【问题标题】:Multiply Matrices in C or in GLSL?用 C 或 GLSL 乘法矩阵?
【发布时间】:2016-01-10 05:19:16
【问题描述】:

我有一个 OpenGL 程序,每秒可以进行相当多的矩阵乘法运算。这些将是 4x4 矩阵和每个 128 字节。我的 CPU 和 GPU 都是最新的(我有一台 MacBook Pro(Retina,13 英寸,2014 年中))。我知道 GPU 通常更面向并行,并且可能会针对这类东西进行优化。让 CPU 执行乘法运算还是让我的 GPU 更快?

【问题讨论】:

  • 大多数时候答案是GPU is faster for that。一个值得注意的细节是精确度。大多数显卡不支持双精度,这可能会导致精度错误(在某些情况下可能会非常大)。
  • @mlkn 该死,我有一个问题,我会做很多这样的事情,所以我需要 GPU 来提高速度,但另一方面,我需要很多精度,因为这些乘法将是累积的,因此 CPU 会更好。嗯...
  • 有一些解决方法,因为人们经常需要精确度。例如使用两个浮点数编码双精度或使用迭代算法。
  • 你说每个 64 字节所以这些是浮点数(sizeof(float)*4*4=64)?但是你说你需要精度。那么你真的想要双精度数吗?这很关键,因为 CPU 与大多数 GPU 相比仍然很有竞争力当涉及到双倍时。您可以使用float-float,但它仍然使用与双倍一样多的空间。
  • @Zboson 抱歉,我的数学计算不正确。我确实想要双精度(或 64 位)浮点数进行计算。

标签: c opengl matrix gpu matrix-multiplication


【解决方案1】:

我有一个 OpenGL 程序,每秒可以进行相当多的矩阵乘法运算。

定义“相当数量的矩阵乘法”。请记住,CPU 也非常有能力进行这种计算。使用矢量化指令集,一个 4×4 矩阵-矩阵乘法可以归结为 16 个 FMA(融合乘加)指令。这不是很多。鉴于现代 CPU 也希望保持忙碌,而且您通常还需要矩阵来进行 CPU 上的计算,因此将矩阵计算保持在 CPU 上是很有意义的。

如果您可以轻松地并行化所有这些矩阵的计算,那么在 GPU 上执行此操作只会有好处。对于单个 4×4 矩阵-矩阵,将矩阵加载到 GPU 上的开销相乘并轻松地进行内务处理会消耗任何性能优势。

【讨论】:

    猜你喜欢
    • 2018-06-10
    • 2012-02-05
    • 2019-12-13
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-09-07
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多