Специальные функции триггера CUDA Double Precision для SFU
Мне было интересно, как я буду использовать __cos(x)
(и соответственно __sin(x)
) в коде ядра с помощью CUDA. Я посмотрел в руководстве CUDA, что есть такая функция устройства, однако, когда я ее реализую, компилятор просто говорит, что я не могу вызвать функцию хоста в устройстве.
Тем не менее, я обнаружил, что есть две родственные функции cosf(x)
а также __cosf(x)
последний из которых работает на СФЕ и в целом намного быстрее, чем оригинал cosf(x)
функция. Компилятор не жалуется на __cosf(x)
Функция конечно.
Я скучаю по библиотеке? Я ошибаюсь по поводу этой функции триггера?
1 ответ
Поскольку SFU поддерживает только определенные операции одинарной точности, нет функций устройства двойной точности __cos() и __sin(). Существуют функции устройства __cosf() и __sinf() одинарной точности, а также другие функции, подробно описанные в таблице C-4 Руководства по программированию CUDA 4.2.
Я предполагаю, что вы ищете более быстрые альтернативы версиям математических функций двойной точности sin () и cos()? Если синус и косинус одного и того же аргумента необходимы, sincos () следует использовать для значительного увеличения производительности. Если аргумент синуса или косинуса умножается на π, вы захотите использовать sinpi (), cospi () или sincospi () вместо этого для еще большей производительности. Например, sincospi () очень полезна при реализации алгоритма Бокса-Мюллера для генерации нормально распределенных случайных чисел. Кроме того, посмотрите предварительный просмотр CUDA 5.0 для лучшей производительности (обратите внимание, что предварительный просмотр обеспечивает качество альфа-релиза).