如何修复在“ cuda_fp16.h”中找不到的数学函数

时间:2019-08-07 11:15:22

标签: math cuda

我正在编写大量内存的CUDA计算程序。我需要使用数学函数,例如内核中math.h中的函数。因此,我做了一些研究,偶然发现了“ cuda_fp16.h”,它应该在设备上添加许多数学函数。但是,如果我想使用其中的一个数学函数(例如,cos(i)是该库的一部分),则在编译时会告诉我无法在设备上运行__host__函数。我很清楚这是不可能的,但是cuda_fp16.h库应该为数学精确添加__device__函数。在“ cuda_fp16.h”中,有错误提示未定义__half类型。

我查看了正在使用的cos()的定义,它使我进入了math.h中的内容。所以我的猜测是,它只是从那里获取函数,而不是cuda_fp16.h


#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "cuda_fp16.h"

__global__ void computation(double x, double y) //function that should upon being called compute the cosine of y.
{
    x = cos(y);
}

这是我正在尝试做的一个非常简单的例子;只是为了让内核计算值的某种数学函数。

我希望整个事情都能编译,因为我包括了一个库,该库将允许通过__device__函数来计算该函数。但是它不能编译,并告诉我不能在设备上调用__host__函数cos。

1 个答案:

答案 0 :(得分:1)

我发现了问题。在代码本身中,我有一个int而不是double作为该函数的参数。如果cos()的参数为int,则它使用函数的<math.h>版本而不是CUDA版本。使用floatdouble来调用CUDA。因此,我作为示例发布的代码实际上是如何工作的,我只是没有意识到我给出了一个整数作为参数,而不是实际想要的双精度数。