CUDA Academy · 课时

主机到设备的数据传输

将输入数据上传到 GPU

第 1 / 4 课13 个步骤

主机到设备的数据传输 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 主机到设备的数据传输
  2. 设备到主机的数据传输
  3. 复制方向枚举
  4. PCIe 传输瓶颈
← 返回 CUDA Academy