为什么从gpu向cpu发送数据比cpu向gpu发送数据慢?

我听说这种关系类似于网络情况,具体来说,上传比下载慢。但是,我无法理解其含义。

我认为发送操作应该相同,因为两个发送总线(cpu至gpu和gpu至cpu)可以具有相同的性能(I意思是bendwith)。

评论

是什么使您认为速度一定较慢?如果您可以编辑问题以添加更多细节,则会得到更好的答案。

#1 楼

实际的数据发送是相同的。 PCIe总线在两个方向上的速度相同。实际的转移正在进行中。但是在接收时,需要先完成传输同步,然后才能使用发送的数据。

评论


$ \ begingroup $
但是,这并不完全准确。实际上将数据发送到API的命令仍然是同步的,例如您可以在调用gBufferBufferData之后立即立即释放它,因为它已被复制到API中。可能不同步的是该数据到实际GPU内存的传输。但是,相同的异步传输方法也可以应用于数据下载。只是在这种情况下,您通常必须等待所有先前的操作完成。
$ \ endgroup $
–克里斯蒂安·劳(Christian Rau)
18年1月25日在12:52

$ \ begingroup $
@ChristianRau,但是大多数情况下,您通过glBufferData发送的数据首先会被复制到内存的另一部分,从该部分到GPU的实际传输将异步进行。
$ \ endgroup $
–棘轮怪胎
18年1月25日在13:02

$ \ begingroup $
是的,但是您也可以使用glReadPixels来做到这一点。
$ \ endgroup $
–克里斯蒂安·劳(Christian Rau)
18年1月25日在13:03

$ \ begingroup $
@ChristianRau否,因为在调用glReadPixels之前,驱动程序无法知道您想要的数据,这是使gpu开始向RAM发送数据的触发器。在GPU完成工作并且可以使用数据之前,glReadPixels调用无法返回。
$ \ endgroup $
–棘轮怪胎
18年1月25日在13:07

$ \ begingroup $
不,如果您告诉glReadPixels将数据复制到缓冲区对象,它将立即返回。然后,您可以执行其他操作,然后可以随时从缓冲区中检索数据。
$ \ endgroup $
–克里斯蒂安·劳(Christian Rau)
18年1月25日在13:16