2013-01-18 78 views

回答

1

试图将渲染命令并行排队到GPU没有任何好处。渲染在GPU上已经并行发生,并行地发送命令只会在驱动程序中产生很多开销,必须检查命令流中的同步点并可能需要重新排序。

另外多线程OpenGL操作很难得到正确的结果。

+0

同意,我想说的是试图允许多个CPU线程同时访问PCIe总线到显卡最有可能不会比单个线程更好,因为只有一个线程将真正成为能够一次访问该IO总线。 – trumpetlicks

+0

@trumpetlicks:对PCIe来说并不是那么糟糕,因为PCIe在具有特定数据包长度的所谓“事务”中执行所有操作(实际上有一整套长度,但实际上它们很短)。多个线程可以交错处理这些事务。所以这主要是一个带宽问题。但是在任何写得很好的OpenGL程序中,无论如何都要首先将几何图形上传到GPU RAM,然后使用单个命令触发整个渲染批处理。 – datenwolf

+0

完全同意打包(并让GPU执行几何结构的并行处理等),但是PCIe总线的带宽(+开销)比即使是1个核心要慢得多(RAM比PCIe快得多并且它仍然可以在单个线程停顿到内存的时候停止运行),拥有多个内核(或HT中的线程)尝试访问该总线会在大多数时间内使大多数线程处于阻塞状态。收集所有数据发送到GPU并尝试以更少但更大的数据包发送(因此开销更少)要好得多。 – trumpetlicks

0

试图让多个CPU线程同时访问PCIe总线到图形卡最有可能不会比单个线程更好,因为只有一个线程将真正能够一次访问该IO总线。