我想知道我将如何使用__cos(x)
(和分别__sin(x)
)在带有 CUDA 的内核代码中。我在 CUDA 手册中查找到有这样一个设备函数,但是当我实现它时,编译器只是说我无法调用设备中的主机函数。
然而我发现有两个姐妹函数cosf(x)
and __cosf(x)
后者在 SFU 上运行,总体上比原来的快得多cosf(x)
功能。编译器不会抱怨__cosf(x)
当然是函数。
我缺少图书馆吗?我对这个三角函数有误解吗?
由于 SFU 仅支持某些单精度运算,因此不存在双精度 __cos() 和 __sin() 设备函数。有单精度 __cosf() 和 __sinf() 设备函数,以及 CUDA 4.2 编程手册的表 C-4 中详细介绍的其他函数。
我假设您正在寻找标准数学函数 sin() 和 cos() 的双精度版本的更快替代方案?如果需要相同参数的正弦和余弦,则应使用 sincos() 来显着提高性能。如果正弦或余弦的参数乘以 π,您可能需要使用 sinpi()、cospi() 或 sincospi() 来代替,以获得更高的性能。例如,sincospi() 在实现用于生成正态分布随机数的 Box-Muller 算法时非常有用。另外,请查看 CUDA 5.0 预览版以获得最佳性能(请注意,预览版提供 alpha 版本质量)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)