有没有办法在CUDA中优化sincos呼叫?

有没有办法在CUDA中优化sincos呼叫?,cuda,trigonometry,Cuda,Trigonometry,我正在用CUDA编写一个程序,使用双精度对sincos()函数进行大量调用。恐怕这是代码中最大的瓶颈之一,我无法减少对函数的调用次数 在CUDA或我可以导入的库中,是否有任何与sincos相当的近似值?我也非常关心准确性,所以近似值越高,我的代码就越快乐 我也考虑过建立一个查找表或用泰勒级数近似值,但我想在走这条路之前征求一些意见。一个非常快速和准确的sincos函数在中提供。只需包括math.h。或者使用sincosf(),如果这对您有用的话。(我知道你在问题中说了双重精度。只是指出了一些事情

我正在用CUDA编写一个程序,使用双精度对
sincos()
函数进行大量调用。恐怕这是代码中最大的瓶颈之一,我无法减少对函数的调用次数

在CUDA或我可以导入的库中,是否有任何与sincos相当的近似值?我也非常关心准确性,所以近似值越高,我的代码就越快乐


我也考虑过建立一个查找表或用泰勒级数近似值,但我想在走这条路之前征求一些意见。

一个非常快速和准确的
sincos
函数在中提供。只需包括
math.h
。或者使用
sincosf
(),如果这对您有用的话。(我知道你在问题中说了双重精度。只是指出了一些事情。)

如果您可以使用
sincospif
而不是
sincosf
,@njuffa已经发挥了他的魔力,这可能会引起您的兴趣


你可能也感兴趣。

我已经在使用
math.h
中的
sincos
,我不知道使用
sincosf
是否会失去太多的准确性,你怎么看?。虽然我的角度不是
pi*expr
,但感谢您指向
sincospif
!当然,
sincosf
sincos
之间的精度(位)有很大的差异。我不知道这对你的特殊算法有多重要。由于您对性能感兴趣,并且通常性能和精度是一种折衷,考虑到问题中的规定,研究算法对额外精度位的敏感性似乎是合乎逻辑的。当njuffa过来时,他将能够回答你所有的问题。@Alejandro除了
sincos
的适用性之外,还可能有其他特殊的使用模式。一些代码以规则的角度增量使用正弦和余弦,这允许在不调用
sincos
的情况下计算这些值。其他代码将正弦和余弦与反三角函数结合使用,这种使用通常可以用可能更便宜的代数计算代替。你可能会想问一个关于正弦和余弦调用如何减少你的特定用例的问题。如果这与你的问题有关,我想你可能会把你的优先级混为一谈。我无法想象一个优化的
sincos
能提供超过10%的好处。另一方面,CUDA中由5个线程组成的启动块是近乎愚蠢的。您将超过GPU可用性能的27/32放在桌面上,这意味着修复可能导致6-10倍的加速。您应该注意@tera在对该问题的评论中给您的建议。尝试每个块使用128个线程是的,@RobertCrovella,这是相关的,但我确实在代码中改变了这一点,我正在尝试进一步优化它。我的算法现在比顺序码快15-20倍。我还没有回答这些评论,因为我还在测试他们的建议。尽管如此,这个问题仍然是相关的,因为我在更改网格块维度后分析了代码,发现
sincos
是一个巨大的瓶颈。如果你想回答我的另一个问题,让我们在那里讨论一下,谢谢!