Может ли CUDA использовать расширения SIMD? - PullRequest
12 голосов
/ 09 марта 2011

Я немного погуглил, но сейчас мне неясно, могут ли некоторые графические процессоры, запрограммированные с CUDA, использовать преимущества или использовать инструкции, аналогичные тем, которые есть в расширениях SSE SIMD;например, можем ли мы суммировать два вектора чисел с двойной точностью, каждый из которых имеет 4 значения.Если так, то мне интересно, будет ли лучше использовать более легкие нити для каждого из 4 предыдущих значений вектора или использовать SIMD.

Ответы [ 2 ]

18 голосов
/ 09 марта 2011

Программы CUDA компилируются в набор команд PTX .Этот набор инструкций не содержит SIMD-инструкций.Таким образом, программы CUDA не могут явно использовать SIMD.

Однако вся идея CUDA заключается в том, чтобы делать SIMD в большом масштабе.Отдельные потоки являются частью групп, называемых перекосами, внутри которых каждый поток выполняет одну и ту же последовательность команд (хотя некоторые инструкции могут быть исключены для некоторых потоков, создавая иллюзию различных последовательностей выполнения).NVidia называет это Single Instruction, Multiple Thread (SIMT), но по сути это SIMD.

7 голосов
/ 06 июля 2015

Как упоминалось в комментарии к одному из ответов, у NVIDIA GPU есть несколько SIMD-инструкций. Они работают на unsigned int на основе байтов и полуслов. По состоянию на июль 2015 года существует нескольких разновидностей следующих операций:

  • абсолютное значение
  • сложение / вычитание
  • вычисленное среднее значение
  • Comparision
  • максимальный / минимальный
  • отрицание
  • сумма абсолютных разностей
...