我想知道如何使用CUDA在内核代码中使用__cos(x)
(和__sin(x)
)。我在CUDA手册中查找了这样的设备功能,但是当我实现它时,编译器只是说我不能在设备中调用主机功能。
但是,我发现有两个姐妹函数cosf(x)
和__cosf(x)
,后者在SFU上运行,总体上比原始cosf(x)
函数快得多。编译器当然不会抱怨__cosf(x)
函数。
我有遗失的图书馆吗?我错了这个触发功能吗?
答案 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版本质量)。