Ядро CUDA и явное пространство имен математических функций - PullRequest
1 голос
/ 22 февраля 2020

Я работаю над проектом, в котором есть несколько определений базовых c математических функций (cos, sin, exp, log, sqrt, ...), перегруженных для различных объектов. Нередко я включаю несколько заголовков с такими определениями (например, <cmath>, <cuda.h> и мои собственные заголовки). Чтобы быть полностью уверенным, что используется правильная реализация, я хочу явно выписать пространство имен, например, std::sqrt(). Это заставило меня задуматься о двух взаимосвязанных вещах:

Q: Как мне убедиться, что я использую реализацию <cuda.h> конкретной функции, т.е. возможно ли выписать пространство имен в явном виде?

Q: Буду ли я сталкиваться с проблемами, например, с помощью std::sqrt() в ядре CUDA (скажем, с проблемами производительности, поскольку обычно это функция хоста)?

1 Ответ

3 голосов
/ 22 февраля 2020

Внутри ядер cuda вы можете использовать только функции с атрибутом __device__. Это гарантирует, что ничего из std:: или cmath не будет использовано.

error: calling a constexpr __host__ function("sqrt") from a __global__ function("kernel") is not allowed. The experimental flag '--expt-relaxed-constexpr' can be used to allow this.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...