Выберите уникальную/дедупликацию в SSE/AVX

Задача
Существуют ли вычислительно осуществимые подходы к внутрирегистративной дедупликации набора целых чисел с использованием инструкций simD x86?

Пример
У нас есть 4-кортежный регистр R1 = {3, 9, 2, 9}, и мы хотим получить регистр R2 = {3, 9, 2, NULL}.

Ограничения
Стабильность. Сохранение порядка ввода не имеет никакого значения.

Выход. Тем не менее, все удаленные значения/NULL должны быть в начале и/или конце регистра:

  • {null, 1, 2, 3} - OK
  • {1, 2, null, null} - OK
  • {null, 2, null, null} - OK
  • {null, 2, null, 1} - Недопустимый порядок
  • {null, null, null, null} - Недопустимый вывод

Очевидно, что это бонус, если известно, что он производит один конкретный выходной формат. Пожалуйста, предположите, что NULL фактически означает 0 (ноль).

Всеобщность. Должен уметь терпеть отсутствие дубликатов, и в этом случае производить выход, эквивалентный входному регистру.

Наборы инструкций.Я ищу решения для любого или всех: SSE2-SSSE3; SSE4.x; AVX-AVX2

9
задан awdz9nld 25 May 2012 в 07:54
поделиться