用于SFU的特殊CUDA双精度触发功能

时间:2012-07-19 04:51:06

标签: cuda trigonometry

我想知道如何使用CUDA在内核代码中使用__cos(x)(和__sin(x))。我在CUDA手册中查找了这样的设备功能,但是当我实现它时,编译器只是说我不能在设备中调用主机功能。

但是,我发现有两个姐妹函数cosf(x)__cosf(x),后者在SFU上运行,总体上比原始cosf(x)函数快得多。编译器当然不会抱怨__cosf(x)函数。

我有遗失的图书馆吗?我错了这个触发功能吗?

1 个答案:

答案 0 :(得分:4)

由于SFU仅支持某些单精度操作,因此没有双精度__cos()和__sin()设备函数。有单精度__cosf()和__sinf()设备函数,以及CUDA 4.2编程手册表C-4中详述的其他函数。

我假设您正在寻找标准数学函数sin()和cos()的双精度版本的更快替代方案?如果需要相同参数的正弦和余弦,则应使用sincos()来显着提升性能。如果正弦或余弦的参数乘以π,则可能需要使用sinpi(),cospi()或sincospi()来获得更高的性能。例如,在实现用于生成正态分布随机数的Box-Muller算法时,sincospi()非常有用。另外,请查看CUDA 5.0预览以获得最佳性能(请注意,预览提供了alpha版本质量)。