GPU上的高精度数学

Mar*_*ark 7 math precision gpu gpgpu

我对使用HLSL在GPU上实现算法感兴趣,但我主要担心的一个问题是我想要一个可变级别的精度.是否存在可以在GPU上实现64位精度和更高精度的技术.

谢谢!

Ste*_*non 10

GPU刚刚开始支持硬件的双精度,但在不久的将来它将继续比单精度慢得多.多年来已经开发出各种各样的技术来使用由具有快速硬件支持的任何精度的多个浮点组成的表示来合成更高精度的浮点,但是开销非常大.IIRC,crlibm手册对其中一些技术进行了很好的讨论,包括错误分析和伪代码(CRLIBM使用它们将数字表示为多个双精度值,但相同的技术可以与单个一起使用)

如果不了解您正在尝试做什么,就很难给出更好的答案.对于某些算法,只有一小部分计算需要高精度; 如果你遇到这样的情况,你可能会在GPU上获得不错的性能,尽管代码不一定非常漂亮或易于使用.如果您在整个算法中普遍需要高精度,那么GPU目前可能不适合您.

最后,为什么HLSL而不是像CUDA或OpenCL这样的面向计算的语言?

  • 如果你需要一致的高精度,那么很可能无法击败目前运行在CPU上的编写良好的代码.您可以更好地花时间分析CPU上的执行并调整性能. (2认同)

Eri*_*ric 5

使用两个浮点数(即单精度值),可以实现大约56位的精度.这接近double的精度,但是你可以为这种"双单"数据类型实现的许多操作都很慢,并且不如使用双精度那么精确.但是,对于简单的算术运算,它们通常就足够了.

谈了一些有关的想法,并介绍了如何实现乘法运算.有关您可以执行的操作以及如何实现它们的更完整列表,请在此处查看DSFUN90软件包.该包使用Fortran 90编写,但可以转换为具有单精度数字的任何内容.请注意,您必须从中许可库以将其用于商业目的.我相信Mersenne-Twister CUDA演示应用程序还具有添加和乘法操作的实现.