1

我正在研究 nVidia CUDA 中的数据预取。我阅读了一些关于设备本身预取的文档,即从共享内存预取到缓存。

但我对 CPU 和 GPU 之间的数据预取感兴趣。任何人都可以将我与一些文件或有关此事的东西联系起来。任何帮助,将不胜感激。

4

3 回答 3

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 Overlapping Behavior”——在那里,他们启动另一个异步内存副本,而内核仍在运行。

于 2011-10-18T08:44:42.957 回答
0

Cuda 6 将消除复制的需要,即复制将是自动的。但是您仍然可以从预取中受益。

简而言之,您希望在完成当前计算时传输“下一个”计算的数据。要实现这一点,您需要在 CPU 上至少有两个线程,以及某种信号方案(知道何时发送下一个数据)。分块当然会起到很大的作用并影响性能。

以上在 APU(同一芯片上的 CPU+GPU)上可能更容易,因为无需复制,因为两个处理器都可以访问相同的内存。

如果你想找到一些关于 GPU 预取的论文,只需使用 google 学者。

于 2013-11-21T01:23:06.983 回答
0

也许您会对 CUDA 4.0 的异步主机/设备内存传输功能感兴趣?您可以使用页面锁定的主机内存来重叠主机/设备内存传输和内核。你可以用这个来...

  1. 将工作集 #1 和 #2 从主机复制到设备。
  2. 处理#i,提升#i+1,并加载#i+2 - 同时进行。

因此,您可以将数据流式传输进出 GPU 并同时对其进行计算(!)。有关更多详细信息,请参阅 CUDA 4.0 编程指南和 CUDA 4.0 最佳实践指南。祝你好运!

于 2011-10-17T20:27:26.153 回答