我正在研究nVidia CUDA中的数据预取。我阅读了一些关于预取设备本身的文档,即从共享内存预取到缓存。
但我对CPU和GPU之间的数据预取感兴趣。任何人都可以与我联系一些有关此事的文件或事情。任何帮助,将不胜感激。
答案 0 :(得分:1)
根据您的评论回答:
当我们想要理想地对大数据执行计算时,我们会将最大数据发送到GPU,执行计算,然后将其发送回CPU,即SEND,COMPUTE,SEND(返回CPU),现在它发送回CPU GPU停止,现在我的计划给了CU程序,说它运行在整个全局内存中,我将强制它在全局内存中运行它的一半,以便剩下的一半我可以用于数据预取,所以虽然计算是同时执行一半我在其他地方预取数据。所以没有档位。现在告诉我这样做是否可行?性能会降低或升级?应该增强..
引入了CUDA 流以实现这种方法。
如果你的计算是相当密集的,那么是的 - 它可以大大加快你的表现。另一方面,如果数据传输需要花费90%的时间,那么您只需节省计算时间 - 即 - 10%最高......
“CUDA编程指南”中提供了有关如何使用流的详细信息,包括示例。 对于版本4.0,这将是“3.2.5.5 Streams”部分,特别是“3.2.5.5.5重叠行为”---在那里,他们启动另一个异步内存副本,而内核仍在运行。
答案 1 :(得分:0)
也许您会对CUDA 4.0的异步主机/设备内存传输功能感兴趣?您可以使用页锁定主机内存重叠主机/设备内存传输和内核。你可以用它来......
因此,您可以将数据流入和流出GPU,并立即对其进行计算(!)。有关更多详细信息,请参阅“CUDA 4.0编程指南”和“CUDA 4.0最佳实践指南”。祝你好运!
答案 2 :(得分:0)
Cuda 6将无需复制,即复制将自动进行。 但是你仍然可以从预取中受益。
简而言之,您希望在完成当前计算时传输“下一步”计算的数据。要实现这一点,你需要在CPU上至少有两个线程,以及某种信令方案(知道何时发送下一个数据)。 Chunking当然会发挥重要作用并影响表现。
上面的APU(同一芯片上的CPU + GPU)可能更容易,因为消除了复制的需要,因为两个处理器都可以访问相同的内存。
如果你想在GPU预取上找到一些论文,请使用谷歌学者。