我是否更愿意在CPU或GPU上计算矩阵?
假设我有以下矩阵P * V * M
,我应该在CPU上计算它们以便我可以将最终矩阵发送到GPU(GLSL),还是应该将这三个矩阵分别发送到GPU以便GLSL可以计算最终矩阵吗?
我的意思是在这种情况下,GLSL必须为每个顶点计算MVP矩阵,因此在CPU上预先计算它可能更快。
但是,让我们说GLSL只需要计算一次MVP矩阵,GPU会比CPU更快地计算出最终矩阵吗?
答案 0 :(得分:58)
一般规则:如果您可以以制服的形式将其传递给着色器,始终在CPU上预先计算;没有例外。着色器侧的计算仅对顶点和片段之间的值有所不同。在整批顶点中不变的所有东西都可以在CPU上得到最有效的处理。
GPU不是魔术“可以做更快的一切”机器。在某些任务中,CPU可以轻松胜过GPU,即使对于非常大的数据集也是如此。因此,一个非常简单的指导原则是:如果您可以将其移动到CPU而不花费更多的CPU时间进行计算,而不是GPU处理总开销所需的时间,那么就在CPU上执行。单个矩阵的计算就在这些任务之中。答案 1 :(得分:13)
与大多数使用OpenGL的情况一样,它取决于。
在大多数情况下,CPU上的单次计算可以比GPU上更快。 GPU的优势在于它可以并行进行大量计算。
另一方面,它还取决于你的瓶颈所在。如果你的CPU正在做很多其他的工作,但你的着色器不是最低功率目标系统的瓶颈,那么你可以通过将一些矩阵乘法移动到顶点着色器来轻松地看到一些性能提升。
通常,您应该避免碎片着色器中的任何工作也可以在顶点着色器或CPU中完成,但除此之外,它取决于具体情况。除非遇到性能问题,否则只需按照最简单的方式进行操作,如果遇到性能问题,请同时执行此操作并分析性能,以确定哪种方法更有效。