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

用于SFU的特殊CUDA双精度触发功能,cuda,trigonometry,Cuda,Trigonometry,我想知道如何在CUDA的内核代码中使用\uu cos(x)(以及分别使用\uu sin(x))。我在CUDA手册中查到有这样一个设备函数,但是当我实现它时,编译器只是说我不能在设备中调用主机函数 但是,我发现有两个姐妹函数cosf(x)和\uuucosf(x),后者在SFU上运行,总体上比原来的cosf(x)函数快得多。编译器当然不会抱怨\uu cosf(x)函数 有我不见的图书馆吗?关于这个trig函数,我弄错了吗?因为SFU只支持某些单精度操作,所以没有双精度cos()和sin()设备函数。

我想知道如何在CUDA的内核代码中使用
\uu cos(x)
(以及分别使用
\uu sin(x)
)。我在CUDA手册中查到有这样一个设备函数,但是当我实现它时,编译器只是说我不能在设备中调用主机函数

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


有我不见的图书馆吗?关于这个trig函数,我弄错了吗?

因为SFU只支持某些单精度操作,所以没有双精度cos()和sin()设备函数。有单精度_cosf()和_sinf()设备函数,以及CUDA 4.2编程手册表C-4中详述的其他函数


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

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

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

此sincos()函数是否分别按sin和cos计算值?或者它做的是sin(cos(x))还是cos(sin(x))?或者不同的东西?sincos(x)同时返回sin(x)和cos(x)。组合计算比单独计算sin()和cos()要快得多。类似地,sincospi(x)[添加在CUDA 5.0中]计算sin(πx)和cos(πx)的速度比单独调用sinpi()和cospi(x)要快。它也比通过sincos()手动计算结果更快。函数签名是sincos(double arg,double*sine_of_arg,double*cos_of_arg)。您还可以在任何Linux系统上执行“man sincos”。当然有单精度版本sincosf()和sincospif()。这个sincos()函数是否分别计算sin和cos的值?或者它做的是sin(cos(x))还是cos(sin(x))?或者不同的东西?sincos(x)同时返回sin(x)和cos(x)。组合计算比单独计算sin()和cos()要快得多。类似地,sincospi(x)[添加在CUDA 5.0中]计算sin(πx)和cos(πx)的速度比单独调用sinpi()和cospi(x)要快。它也比通过sincos()手动计算结果更快。函数签名是sincos(double arg,double*sine_of_arg,double*cos_of_arg)。您还可以在任何Linux系统上执行“man sincos”。当然有单精度版本sincosf()和sincospif()。