1

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

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

有没有我想念的图书馆?我对这个三角函数有误解吗?

4

1 回答 1

4

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

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

于 2012-07-19T05:02:54.037 回答