在 C 或 GLSL 中乘以矩阵?
Multiply Matrices in C or in GLSL?
我有一个 OpenGL 程序,每秒可以执行相当多的矩阵乘法。这些将是 4x4 矩阵和每个 128 字节。我的 CPU 和 GPU 都是最新的(我有一台 MacBook Pro(Retina,13 英寸,2014 年中))。我知道 GPU 通常更面向并行,并且可能针对此类内容进行了优化。让 CPU 做乘法运算或我的 GPU 会更快吗?
I have an OpenGL program that will be do a fairly good amount of matrix multiplies per second.
定义 "fairly good amount of matrix multiplies"。请记住 CPUs 也非常有能力进行这种计算。使用矢量化指令集,4×4 矩阵-矩阵乘法可归结为少至 16 条 FMA(融合乘加)指令。那不是很多。鉴于现代 CPUs 也希望保持忙碌,并且通常您还需要用于 on-CPU 计算的矩阵,因此将矩阵计算保持在 CPU.
如果您可以轻松地并行计算所有这些矩阵,那么在 GPU 上执行此操作只会有好处。对于单个 4×4 矩阵矩阵,乘以将矩阵加载到 GPU 的开销并进行内务处理很容易消耗任何性能优势。
我有一个 OpenGL 程序,每秒可以执行相当多的矩阵乘法。这些将是 4x4 矩阵和每个 128 字节。我的 CPU 和 GPU 都是最新的(我有一台 MacBook Pro(Retina,13 英寸,2014 年中))。我知道 GPU 通常更面向并行,并且可能针对此类内容进行了优化。让 CPU 做乘法运算或我的 GPU 会更快吗?
I have an OpenGL program that will be do a fairly good amount of matrix multiplies per second.
定义 "fairly good amount of matrix multiplies"。请记住 CPUs 也非常有能力进行这种计算。使用矢量化指令集,4×4 矩阵-矩阵乘法可归结为少至 16 条 FMA(融合乘加)指令。那不是很多。鉴于现代 CPUs 也希望保持忙碌,并且通常您还需要用于 on-CPU 计算的矩阵,因此将矩阵计算保持在 CPU.
如果您可以轻松地并行计算所有这些矩阵,那么在 GPU 上执行此操作只会有好处。对于单个 4×4 矩阵矩阵,乘以将矩阵加载到 GPU 的开销并进行内务处理很容易消耗任何性能优势。