我应该更喜欢在CPU或GPU上计算矩阵?
假设我有以下矩阵P * V * M,我应该在CPU上计算它们,以便我可以将最终矩阵发送到GPU (Gls1),还是应该将这三个矩阵分别发送到GPU,以便gls1可以计算最终矩阵?
我的意思是,在这种情况下,GLSL必须计算每个顶点的MVP矩阵,所以在CPU上预计算可能会更快。
但是假设GLSL只需要计算一次MVP矩阵,GPU计算最终矩阵的速度会比CPU快吗?
发布于 2013-05-18 16:24:06
一般规则:如果可以将其以一致的形式传递给着色器,则始终在CPU上进行预计算;没有例外。着色器一侧的计算仅对在顶点和碎片之间变化的值有意义。在CPU上处理一整批顶点中不变的所有内容都是最有效的。
GPU不是神奇的“无所不能”的机器。在某些任务中,CPU可以轻松超越GPU,即使对于非常大的数据集也是如此。因此,一个非常简单的指导原则是:如果您可以将其移动到CPU,而不需要花费比GPU处理它的总开销更多的CPU时间来进行计算,那么在CPU上进行计算。单个矩阵的计算就是这些任务之一。
发布于 2013-05-18 15:04:33
就像OpenGL的大多数情况一样,这取决于。
在大多数情况下,在CPU上完成单个计算的速度比在GPU上更快。GPU的优势在于它可以并行进行大量的计算。
另一方面,这也取决于你的瓶颈在哪里。如果CPU正在执行大量其他工作,但着色器在功耗最低的目标系统上还不是瓶颈,那么通过将一些矩阵乘法移动到顶点着色器,可以很容易地看到一些性能改进。
通常,应避免在片段着色器中执行也可以在顶点着色器或CPU上完成的任何工作,但除此之外,这取决于具体情况。除非你遇到性能问题,否则只要用对你来说最简单的方法就行了,如果你有性能问题,就两种方法都做,并分析一下性能,看看哪种方法效果更好。
https://stackoverflow.com/questions/16620013
复制相似问题