Я не понимаю, есть ли перегрузка функций в Cuda или нет. Я хочу объяснить мою проблему в следующих двух функциях, которые я хочу использовать как на GPU, так и на CPU, и мне не важна точность:
__host__ __device__
float myabs( float v ) {
return abs( v + 1 ); //I want the floating point absolute value
}
__host__ __device__
float mycos( float v ) {
return 2.f*cos( v );
}
- Какие функция
abs
, соотв. cos
мне позвонить и почему? std::abs
/ abs
/ fabs
/ fabsf
/ anythingelse
std::cos
/ cos
/ cosf
/ __cosf
/ anythingelse
(Поскольку __cosf
является Cuda-intrinsi c и std::abs
/ std::cos
недоступны в Cuda, я предполагаю, что мне нужно использовать директивы препроцессора внутри моих функций для этих выборов.)
Какие заголовки я должен включать?
Зависит ли ответ на первые два вопроса от того, буду ли я компилировать с флагами быстрой математики (например, -ffast-math
).
Если это важно для ответа, я компилирую с nv cc 10.2 в Ubuntu 18.04.4. , но я скорее заинтересован в платформе независимый ответ.