__host__ __device__ функции, вызывающие перегруженные функции - PullRequest
0 голосов
/ 06 апреля 2020

Я не понимаю, есть ли перегрузка функций в 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 );
}
  1. Какие функция 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. , но я скорее заинтересован в платформе независимый ответ.

1 Ответ

1 голос
/ 06 апреля 2020
  1. Какая функция абс, соотв. потому что я должен звонить, и почему?

Если вы используете аргументы с плавающей запятой, то обычно вы используете fabs и cosf. Это стандартные реализации CUDA Math API (и они соответствуют именам эквивалентных C стандартных функций библиотеки).

Какие заголовки я должен включать?

Обычно вы должны включать либо math.h, либо cmath

Зависит ли ответ на первые два вопроса от того, компилирую ли я флаги быстрой математики (например, -ffast-math).

Нет. Ни одна из этих функций не будет заменена для быстрой встроенной функции быстрой математикой.

...