CPU与GPU的几何变换


9

我注意到,许多3d程序通常在CPU上进行矢量/矩阵计算以及几何转换。有没有人发现将这些计算移入GPU上的顶点着色器的优势?

Answers:


3

一般而言:网格转换是在GPU上完成的。将变换矩阵发送到GPU,然后着色器将其应用于网格的所有顶点。

使用GPU来计算矩阵本身是另一回事,并且在GPU上实际上要慢一些,因为有如此多的存储值会逐帧变化,这对于确定最终的转换矩阵是必不可少的。将数据发送到CPU和从CPU发送数据-GPU速度很慢。同样,在CPU上,计算只执行一次,而在GPU上,计算将针对每个顶点进行。


编写“实际上在GPU上速度较慢”部分;这是一个非常广泛的声明。如果您正在谈论为GPU上的每个顶点构造矩阵,那么您的性能将取决于瓶颈。如果您在GPU上绑定了ALU /寄存器,则性能只会降低,但不一定。在这些瓶颈情况下,在CPU上执行完全相同的操作也将变慢。其中,这样的一个例子常用的GPU来完成:顶点着色器结构顶点切线空间矩阵上飞救顶点提取带宽。同样,取决于您的瓶颈,YMMV也是如此。
jpaver

我不能投票,但是这个答案应该被投票。说“实际上在GPU上速度较慢”是非常错误的。
亚当

3

在非GPU处理器上可以完成许多几何转换,但是必须考虑目标平台。您的里程会根据您要定位的平台以及该平台的瓶颈而有所不同。

一个考虑因素是生成几何图形的设备与呈现几何图形的设备之间的总线带宽。

在典型的现代PC系统中,CPU位于PCIe总线(http://en.wikipedia.org/wiki/PCI_Express)的一侧,而GPU在另一侧。将每帧生成的数据从CPU传输到GPU(反之亦然)的唯一方法是通过此总线。这意味着,您可能会受到此总线传输速度的限制。如果目标平台具有16条通道的PCIe 2.x,则带宽为8GB / s。实际上,跨PCIe的传输效率不是100%,因为在传输过程中协议消耗了某些带宽。根据传输的大小,仅在每个数据包的开销上,您可能会损失5-10%的带宽。

例如。给定一个PC平台运行有16条通道的PCIe 2.x,您每帧可以生成多少数据以馈送到GPU?假设您希望以60fps的速度运行,那么对于PCIe 2.x,这相当于每帧8GB / 60 = 136MB。乘以一些(推测的)90%的因素来考虑驱动程序通信开销和PCIe传输协议开销,您可以在不受到PCIe 2.x带宽限制的情况下,每帧生成大约120Mb数据。

您还必须回答另一个问题:在目标CPU上,这种120Mb数据的生成是否可以在1/60秒内轻松实现?请记住,您必须在CPU上执行许多其他游戏任务,您可能会因为时间不足而无法生成转换后的数据。就纯ALU吞吐量而言,这可能会限制您使用CPU。在CPU到sysmem总线方面,您还可能受到带宽的限制(带宽有所不同,但在最近的CPU上约为8.5GB / s)。

好吧,那么什么因素使得在GPU上进行操作更具可行性?一个因素是GPU内存带宽,这是GPU与本地视频内存之间的带宽。在当代的中端GPU上,此视频内存带宽可以高达200GB / s(是的,是PCIe 2.x带宽的25倍)。另一个因素是GPU是大规模并行的,具有数百个ALU,并且能够通过一次运行数千个线程来隐藏内存访问延迟。

所有这些因素都可以为将更多工作推到GPU上带来明显的胜利,但是YMMV同样取决于目标平台。


1

“网状转换”是什么意思?通过一组矩阵转换几何?如今,大多数游戏将使GPU处理简单的转换,蒙皮等。并且大多数游戏将使用顶点着色器来完成。在某些平台上,您可能没有着色器,或者在CPU上执行这些操作还有其他优点。例如,在PS3上,可以让SPU处理外观和转换来减轻RSX的负担。如果您要进行多遍照明,那么在CPU上蒙皮可能是有好处的,因为您只需执行一次,然后为每个渲染遍提交要绘制的结果。因此也有例外,但通常大多数游戏都是在GPU和着色器中执行这些操作。

还是您想说的更奇特,例如使用GPU进行一般矢量数学运算?如今,我们已经有了通用GPU,它们可以通过CUDA等系统运行相当通用的C代码。可以利用此功能进行繁重的矢量数学运算,而且我知道有一些程序可以执行此操作。我个人没有任何经验。


将“网格转换”更改为“几何转换”以帮助阐明问题。我还在等待opencl es,它可能最早在明年推出。
zmdat 2010年

0

在某些情况下,在GPU上渲染所有内容可能是有道理的,但是您不能在着色器中设置常量,并且实际上没有其他地方可以设置它们,除了在绘制调用之前在CPU端。

即使您可以使用自定义初始化程序在GPU上计算常量(如骨骼转换矩阵),您也可能不想这样做。GPU确实擅长并行执行,但时钟速度慢得多。

变换层次结构并非不可并行化,因为子节点依赖于父节点,而变换网格中的所有顶点则是,因为这些顶点在计算上相互独立。

一般规则是:

  • 串行处理:CPU
  • 并行处理:GPU
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.