有什么方法可以优化CUDA中的sincos调用?

Ale*_*dro 2 cuda trigonometry

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

sincos我可以导入的CUDA或库中是否有任何近似的近似值?我也非常关注准确性,因此近似值越好,我的代码就会越快乐。

我也曾考虑过要建立一个查找表或使用taylor系列来近似这些值,但是在寻求这条路之前,我需要一些意见。

Rob*_*lla 5

CUDA数学api中sincos提供了相当快速而准确的功能。只要包括。或者,如果适合您,请使用(这里)。(我知道您在问题中说的是双精度。只是指出一些要点。)math.hsincosf

如果您可以使用sincospif代替sincosf@ njuffa,@ njuffa在这里发挥了他的魔力,这可能会让您感兴趣。

这个问题这个问题也可能使您感兴趣。

  • @Alejandro除了“ sincos”的适用性之外,还有其他特殊的使用模式。一些代码以规则的角度增量使用正弦和余弦,这使得无需调用“ sincos”即可计算这些值。其他代码将正弦和余弦与反三角函数结合使用,这样的用法通常可以用可能更便宜的代数计算代替。您可能要考虑问一个问题,如何针对您的特定用例减少正弦和余弦调用。 (2认同)
  • 如果这与您的[上一个问题](http://stackoverflow.com/questions/39171823/cuda-parallelized-raytracer-very-low-speedup)有关,那么我认为您可能会混淆您的优先事项。我无法想象提供了超过10%收益的优化`sincos`。另一方面,在CUDA中启动5个线程的块是边界愚蠢的。桌上剩下的性能比GPU的27/32多**,这意味着修复可能导致6-10倍的加速。您应该注意@tera在对该问题的评论中给您的建议。尝试每个块使用128个线程 (2认同)