Я пишу программу в CUDA, которая делает огромное количество вызовов функции sincos()
, используя двойную точность. Я боюсь, что это одно из самых больших узких мест в коде, и я не могу уменьшить количество вызовов функции.Есть ли способ оптимизировать вызовы sincos в CUDA?
Есть ли приличное приближение к sincos
в CUDA или в библиотеке, которую я могу импортировать? Я также очень обеспокоен точностью, поэтому, чем лучше аппроксимация, тем счастливее будет мой код.
Я также думал о построении таблицы поиска или приближении значений к их серии Тейлор, но я хочу получить некоторые мнения перед тем, как спуститься по этой дороге.
Я уже использую 'sincos' из' math.h', и я не знаю, потеряю ли я слишком много точности с помощью 'sincosf', что вы думаете ?. Хотя мои углы не 'pi * expr', спасибо, что указали на' sincospif'! – Alejandro
Конечно, существует большая разница в точности (бит) между 'sincosf' и' sincos'. Я не знаю, насколько это важно для вашего конкретного алгоритма. Поскольку вы заинтересованы в производительности, и, как правило, производительность и точность являются компромиссом, логично исследовать чувствительность вашего алгоритма к дополнительным битам точности, учитывая условия в вашем вопросе. Когда ньюффа придет, он сможет ответить на все ваши вопросы. –
@Alejandro В дополнение к применимости 'sincos' могут быть другие специальные шаблоны использования. Некоторые коды используют синус и косинус с постоянными углами, что позволяет вычислять эти значения без вызовов 'sincos'. Другие коды используют синус и косинус в сочетании с обратными триггерными функциями, такое использование часто может быть заменено потенциально более дешевым алгебраическим вычислением. Возможно, вам стоит подумать о том, чтобы задать вопрос о том, как можно сократить количество вызовов синуса и косинуса для вашего конкретного случая использования. – njuffa