opengl - 图形硬件上的 float 与 double

标签 opengl graphics floating-point double

我一直在尝试查找有关在图形硬件上使用 float 与 double 的性能的信息。我发现了大量关于 CPU 上的 float 与 double 的信息,但对于 GPU 来说,此类信息更加稀缺。

我使用 OpenGL 进行编码,因此如果您认为应该了解该 API 的任何特定信息,请让我们了解一下。

我知道,如果程序将大量数据移入/移出图形硬件,那么使用 float 可能会更好,因为 double 需要两倍的带宽。我的询问更多是关于图形硬件如何处理的。据我了解,现代 Intel CPU 将 float/double 转换为 80 位实数进行计算(SSE 指令除外),因此两种类型的速度大致相同。现代显卡有这样的功能吗?现在 float 和 double 的性能差不多吗?是否有充分的理由使用其中一种而不是另一种?

最佳答案

在速度方面,GPU 针对浮点进行了优化。我对 Nvidia 硬件更熟悉,但在当前一代硬件中,每 8 个 SP FPU 对应 1 个 DP FPU。在下一代硬件中,预计它们的比例将更多地为 1 比 2。

我的建议是看看您的算法是否需要 double 。许多算法实际上并不需要额外的位。运行一些测试来确定通过使用单精度获得的平均误差,并确定它是否显着。如果没有,就使用单一的。

如果您的算法纯粹用于图形,您可能不需要 double 。如果您正在进行通用计算,请考虑使用 OpenCL 或 CUDA。

关于opengl - 图形硬件上的 float 与 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2079906/

相关文章:

java - JOGL 2.0 不支持 GLCanvas ,Texture ,Animator ,但是 jogl 1.0 呢?

c - 通过opengl渲染每像素图像1位

c# - 在面板 C# 窗体上绘制矩形

java - 比较两个字符串并根据结果显示图像

c++ - float 的整数部分中的 10 进制数字的最大位数是多少

c++ - 如何在 linux asm 中正确地返回一个 double

python - 带 OpenGL 的 Alpha 蒙版

c++ - 从固定流水线转向现代 OpenGL

c++ - OpenGL 上基于 vector 的字体

floating-point - 浮点和定点表示的优缺点