CUDA Academy · 课时

三重尖括号启动语法

使用 >> 调用内核

第 2 / 4 课13 个步骤

三重尖括号启动语法 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。

启动方式不同

您不能像调用普通函数那样调用内核。您需要启动它,并告诉 GPU 同时创建多少个线程。🚀

<<< >>> 语法

启动时会使用 CUDA 特有的三重尖括号。您需要在其中、普通参数列表之前指定启动配置。

myKernel<<<blocks, threads>>>(args);

第一个数字:线程块

第一个值设置要启动多少个线程块。线程块是一组共同运行并共享片上快速内存的线程。

myKernel<<<4, threads>>>(args); // 4 blocks

第二个数字:每个线程块的线程数

第二个值设置每个线程块的线程数。启动的线程总数等于线程块数量乘以每个线程块的线程数。

myKernel<<<4, 256>>>(args); // 1024 threads

参数放在后面

方括号之后,在圆括号中传递内核的普通参数,就像任何 C++ 调用一样。

doubleIt<<<1, 256>>>(devicePtr);

启动是异步的

启动是异步的:CPU 会将工作排入队列,然后立即继续执行。GPU 则在后台运行内核。

配置可以使用变量

启动配置中的数字不必是字面量。您通常会在运行时根据数据大小计算线程块数量。

int blocks = (n + 255) / 256;
add<<<blocks, 256>>>(c, a, b, n);

使用 dim3 处理二维数据

对于二维或三维的网格和线程块,您可以使用 dim3 值。它会将 x、y 和 z 方向的大小组合到启动配置中。

dim3 threads(16, 16);
blur<<<grid, threads>>>(img);

选择每个线程块的线程数

每个线程块的线程数可以安全地设为 128 或 256。该数值必须是 32 的倍数,并且不得超过 1024。

kernel<<<blocks, 128>>>(data);

错误的配置会导致失败

如果每个线程块请求的线程过多,启动会静默失败。您必须在启动后立即检查错误。

kernel<<<1, 2048>>>(p); // too big, fails

从左到右阅读

可以这样理解一次启动:让这个内核在这么多个线程块中运行,每个线程块包含这么多线程,并使用这些参数。理解之后就很简单了。

vectorAdd<<<grid, block>>>(c, a, b, n);

快速检查

现在来检查一下启动配置。

回顾:启动

您可以使用 kernel<<>>(args) 来启动内核。线程块数乘以每个线程块的线程数就是线程总数,而且启动是异步的。您已经能像专家一样启动内核了!🎉

免费开始

用 AI 导师学习 C++ — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「三重尖括号启动语法」课时是免费的吗?

是的 — 「三重尖括号启动语法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。

「三重尖括号启动语法」这节课中我会学到什么?

使用 >> 调用内核 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CUDA Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「三重尖括号启动语法」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CUDA Academy 课中编写并运行代码吗?

能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 内核的组成
  2. 三重尖括号启动语法
  3. 在内核中使用 printf
  4. 详解 cudaDeviceSynchronize
← 返回 CUDA Academy