Memory management 何时使用cudaHostRegister()和CUDAHOSTROLOC()?“是什么意思?”;固定或页面锁定";记忆?在OpenCL中,哪些是等效的? 我只是英伟达的API,我觉得有些表达不太清楚。我想知道是否有人能帮助我理解何时以及如何简单地使用这些CUDA命令。更准确地说:

Memory management 何时使用cudaHostRegister()和CUDAHOSTROLOC()?“是什么意思?”;固定或页面锁定";记忆?在OpenCL中,哪些是等效的? 我只是英伟达的API,我觉得有些表达不太清楚。我想知道是否有人能帮助我理解何时以及如何简单地使用这些CUDA命令。更准确地说:,memory-management,cuda,opencl,Memory Management,Cuda,Opencl,在研究如何通过并行执行内核(例如CUDA)来加速某些应用程序时,我遇到了加速交互主机设备的问题。 我有一些信息,在网上冲浪,但我有点困惑。 很明显,如果可以使用cudaHostRegister()和/或cudaHostAlloc(),您可以更快地使用。据解释, “您可以使用cudaHostRegister()命令获取一些数据(已分配)并将其固定,以避免将额外副本带入GPU” “锁定内存”是什么意思?为什么这么快?我以前在这个领域如何做到这一点?之后,在链接中的同一视频中,他们继续解释 “如果要传

在研究如何通过并行执行内核(例如CUDA)来加速某些应用程序时,我遇到了加速交互主机设备的问题。 我有一些信息,在网上冲浪,但我有点困惑。 很明显,如果可以使用
cudaHostRegister()
和/或
cudaHostAlloc()
,您可以更快地使用。据解释,

“您可以使用
cudaHostRegister()
命令获取一些数据(已分配)并将其固定,以避免将额外副本带入GPU”

“锁定内存”是什么意思?为什么这么快?我以前在这个领域如何做到这一点?之后,在链接中的同一视频中,他们继续解释

“如果要传输固定内存,可以使用异步内存传输,
cudaMemcpyAsync()
,让CPU在内存传输过程中继续工作。”

PCIe事务是否完全由CPU管理?有没有一个巴士经理负责这件事? 此外,部分答案真的很感谢在最后重新组成的难题

我们也希望能有一些关于OpenCL中等效API的链接

“锁定内存”是什么意思

它意味着制造记忆。这告诉操作系统虚拟内存管理器,内存页必须留在物理ram中,以便GPU可以通过PCI express总线直接访问它们

为什么这么快

一句话。当内存被页面锁定时,GPU DMA引擎可以直接运行传输,而无需主机CPU,从而减少总体延迟并减少净传输时间

PCIe事务是否完全由CPU管理

不,见上文

有没有一个巴士经理负责这件事


否。GPU管理传输。在这种情况下,没有总线主控编辑:似乎CUDA将固定和页面锁定视为与Mark Harris编写的“固定主机内存”部分相同。这意味着答案是没有意义的,最好的答案应该照原样去做

我在找别的东西时碰到了这个问题。对于所有未来的用户,我认为@Talonmes完美地回答了这个问题,但我想指出锁定页面和固定页面之间的一个细微区别——前者确保内存不可分页,但内核可以自由移动内存,后者确保它保留在内存中(即不可分页)但也被映射到相同的地址。
这是一个相同的例子。

我已经读过这篇文章,但它仍然不那么清晰和完整:我正在网上搜索其他信息,并试图深入研究这个主题。我没有一些基本的概念,比如“固定内存”等等。这就是我写这个问题的原因。谢谢你在任何情况下的帮助:)-第一段应该回答你几乎所有的背景问题。如果你听不懂,恐怕你问错地方了。你知道这些OpenCL指令的等价物吗?@Leos313我想等价的OpenCL指令是
clEnqueueMapBuffer