0

我不明白 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-intrinsic 和std::abs/std::cos在 Cuda 中不可用,我假设我必须在我的函数中使用预处理器指令来进行这些选择。)

  1. 我应该包括哪些标题?

  2. 前两个问题的答案是否取决于我是否使用快速数学标志(例如-ffast-math)进行编译。

如果这对答案很重要,我将在Ubuntu 18.04.4下使用nvcc 10.2进行编译。,但我对独立于平台的答案很感兴趣。

4

1 回答 1

1
  1. abs,resp的哪个功能。因为我应该打电话,为什么?

如果您使用浮点参数,那么通常您会使用fabsand cosf。这些是标准的 CUDA Math API 实现(它们对应于等效 C 标准库函数的名称)。

  1. 我应该包括哪些标题?

按照惯例,您应该包括math.hcmath

  1. 前两个问题的答案是否取决于我是否使用快速数学标志(例如 -ffast-math)进行编译。

不,这些函数都不会被快速数学取代快速内在函数。

于 2020-04-06T15:02:58.210 回答