Nvidia CUDA中的预取

Nvidia CUDA中的预取,cuda,nvidia,prefetch,Cuda,Nvidia,Prefetch,我在nVidia CUDA从事数据预取工作。我阅读了一些关于设备本身预取的文档,即从共享内存预取到缓存 但我对CPU和GPU之间的数据预取感兴趣。有人能给我提供一些关于这件事的文件或东西吗。任何帮助都将不胜感激 也许您会对CUDA 4.0的异步主机/设备内存传输功能感兴趣?通过使用页锁定主机内存,可以重叠主机/设备内存传输和内核。你可以用这个来 将工作集#1和#2从主机复制到设备 同时处理#i、提升#i+1和加载#i+2 因此,您可以将数据流式传输进出GPU,并在GPU上同时进行计算(!)。有关

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


但我对CPU和GPU之间的数据预取感兴趣。有人能给我提供一些关于这件事的文件或东西吗。任何帮助都将不胜感激

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

  • 将工作集#1和#2从主机复制到设备
  • 同时处理#i、提升#i+1和加载#i+2

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

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

  • 将工作集#1和#2从主机复制到设备
  • 同时处理#i、提升#i+1和加载#i+2

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

    根据您的评论回答:


    当我们想要对大数据执行计算时,理想情况下,我们会将最大数据发送到GPU,执行计算,将其发送回CPU,即发送,计算,发送(返回到CPU)现在当它发送回CPU时GPU必须暂停,现在我的计划是给CU程序,比如说它在整个全局内存中运行,我将强制它在全局内存的一半中运行它,以便我可以使用另一半中的其余部分进行数据预取,因此,当计算同时在其中一半中执行时,我可以在另一半中预取数据。这样就不会出现暂停。现在告诉我这样做可行吗?性能将降级或升级?应该提高

    引入CUDA流正是为了实现这种方法

    如果你的写作相当密集,那么是的,它可以大大加快你的表现。另一方面,如果数据传输占用您90%的时间,您将只节省计算时间-即最多10%

    CUDA编程指南中提供了有关如何使用流的详细信息(包括示例)。
    对于版本4.0,这将是“3.2.5.5流”部分,特别是“3.2.5.5.5重叠行为”——在那里,当内核仍在运行时,它们会启动另一个异步内存拷贝。

    根据您的评论回答:


    当我们想要对大数据执行计算时,理想情况下,我们会将最大数据发送到GPU,执行计算,将其发送回CPU,即发送,计算,发送(返回到CPU)现在当它发送回CPU时GPU必须暂停,现在我的计划是给CU程序,比如说它在整个全局内存中运行,我将强制它在全局内存的一半中运行它,以便我可以使用另一半中的其余部分进行数据预取,因此,当计算同时在其中一半中执行时,我可以在另一半中预取数据。这样就不会出现暂停。现在告诉我这样做可行吗?性能将降级或升级?应该提高

    引入CUDA流正是为了实现这种方法

    如果你的写作相当密集,那么是的,它可以大大加快你的表现。另一方面,如果数据传输占用您90%的时间,您将只节省计算时间-即最多10%

    CUDA编程指南中提供了有关如何使用流的详细信息(包括示例)。
    对于版本4.0,这将是“3.2.5.5流”部分,特别是“3.2.5.5.5重叠行为”——在那里,当内核仍在运行时,它们会启动另一个异步内存复制。

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

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

    在APU(同一芯片上的CPU+GPU)上,由于两个处理器可以访问相同的内存,因此不需要进行复制,因此上述操作可能更容易实现


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

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

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

    在APU(同一芯片上的CPU+GPU)上,由于两个处理器可以访问相同的内存,因此不需要进行复制,因此上述操作可能更容易实现


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

    你的问题在目前的形式下过于宽泛——试着问一个更具体的问题。你可能也想看看英伟达开发论坛在…OK……我怎么能在预CUDA程序中添加预取指令?这还是很模糊的——预取到底是什么?为了什么?关于哪一代GPU?你的问题在目前的形式下太宽泛了——试着问一个更具体的问题。你可能也想看看英伟达开发论坛在…OK……我怎么能在预CUDA程序中添加预取指令?这还是很模糊的——预取到底是什么?为了什么?在哪一代GPU上?你