【发布时间】:2022-01-19 15:27:07
【问题描述】:
我是一名学习 CUDA 的学生,我正在尝试了解内存传输的工作原理。 我在 Internet 上读到,大于 64KB 的内存传输被视为阻塞调用,而 64KB 以下的内存传输是非阻塞的。 我试图用我的课堂笔记来解释它,但我不确定我的推理。 我想这是因为传输大量数据可能会导致空闲时间,GPU、CPU 和内存总线都没有工作,所以最好在计算和内存传输之间有重叠。不过我不明白为什么限制真的是 64KB,我什至不确定我刚才说的是否正确。
谁能帮助我或提供更好的解释?非常感谢。
编辑: 我首先在以下参考资料中找到了这些信息:https://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf
幻灯片编号为 7,标题为“Default Stream (aka Stream '0')”
然后我加深了我的研究,我发现了这个:
在以下参考中:http://gpu.di.unimi.it/slides/lezione7.pdf
但还有很多其他类似的参考资料。
【问题讨论】:
-
这样的互联网充满了错误信息。请提供参考资料,最好来自 CUDA 文档,以获取此处查询的信息。
-
我发现的唯一 CUDA 参考如下:developer.download.nvidia.com/CUDA/training/… at slide n.7
-
我没有看到该幻灯片中提到的任何似乎与问题所声称的事实有关的内容。你能指出与问题相关的幻灯片编号吗?此外,为了提高问题的清晰度,我建议首先指出提示您问题的在线资源。现在在我看来,这个问题是基于一个不正确的前提。
-
我编辑了我的问题,希望更准确,很抱歉不清楚。
-
参考似乎是幻灯片 4。措辞有点糟糕(恕我直言)但没有错。它告诉我们:
cudaMemcpyAsync()在主机执行方面是非阻塞的。cudaMemcpy()主机设备在主机执行方面通常是阻塞的,除了对于 大概(推测!)源于对命令长度的限制。总是喜欢权威来源。此处:CUDA 编程指南第 3.2.6.1 节。
标签: performance memory-management cuda blocking memory-access