主机到设备的数据传输
将输入数据上传到 GPU
主机到设备的数据传输 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。
两种内存,一个目标
您的数据从主机 RAM 开始,但 GPU 只能处理位于自身设备内存中的数字。首先,您必须将数据传输过去。🚚
认识 cudaMemcpy
cudaMemcpy 函数就像一辆运送车:它可以在主机地址或设备地址之间复制一块字节。
cudaMemcpy(dst, src, bytes, kind);上传方向
要将输入数据传输到 GPU,请使用 cudaMemcpyHostToDevice。源是主机 RAM,目标是设备内存。
cudaMemcpy(d_a, h_a, n*sizeof(float), cudaMemcpyHostToDevice);参数顺序很重要
与 memcpy 一样,目标位于前面,源位于后面。如果不小心将它们交换,GPU 缓冲区就会保持为空。😬
cudaMemcpy(d_dst, h_src, bytes, cudaMemcpyHostToDevice);按字节数而不是元素数计算
大小参数以字节为单位,因此请使用 sizeof 将元素数量乘以类型大小。
size_t bytes = n * sizeof(float);复制前先分配
设备指针必须已经指向真实的 GPU 内存。将数据上传到目标缓冲区之前,请务必先使用 cudaMalloc 分配它。
cudaMalloc(&d_a, bytes);
cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);同步等待
普通的 cudaMemcpy 是阻塞的:您的 CPU 线程会暂停,直到每个字节都安全地传输到 GPU。
然后启动内核
先上传,再计算。输入数据位于设备上后,您的内核就可以读取它并开始执行实际工作。
cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);
myKernel<<<blocks, threads>>>(d_a, n);大小必须匹配
请确保上传的字节数不超过已分配缓冲区的容量。复制超出预留空间的数据是典型的溢出错误。
检查返回代码
cudaMemcpy 会返回一个 cudaError_t。请检查它,以便让无效指针或大小错误明确失败,而不是悄悄破坏程序运行。
cudaError_t err = cudaMemcpy(d_a, h_a, bytes, cudaMemcpyHostToDevice);复制并非没有代价
每次上传都要经过速度较慢的 PCIe 总线,因此只复制您确实需要放在设备上的数据。
快速检查
您想要将一个输入数组从 CPU RAM 发送到 GPU。哪个调用是正确的?
回顾
您学会了使用 cudaMemcpyHostToDevice 上传数据:分配设备缓冲区,将目标放在前面,以字节为单位指定大小,并在启动前完成复制。🎉
用 AI 导师学习 C++ — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「主机到设备的数据传输」课时是免费的吗?
是的 — 「主机到设备的数据传输」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。
「主机到设备的数据传输」这节课中我会学到什么?
将输入数据上传到 GPU 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 CUDA Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「主机到设备的数据传输」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 CUDA Academy 课中编写并运行代码吗?
能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 主机到设备的数据传输
- 设备到主机的数据传输
- 复制方向枚举
- PCIe 传输瓶颈