CUDA<<<...>>>() 内核启动语法是如何实现的

How is the CUDA<<<...>>>() kernel launch syntax implemented

CUDA 内核使用此语法启动(至少在运行时 API)

mykernel<<<blocks, threads, shared_mem, stream>>>(args);

这是作为宏实现的还是 nvcc 在将主机代码交给 gcc 之前删除的特殊语法?

nvcc 预处理系统最终将其转换为 CUDA runtime library calls 的序列,然后将代码交给主机代码编译器进行编译。调用的确切顺序可能因 CUDA 版本而异。

您可以使用 --keep 选项到 nvcc 检查文件(并且 --verbose 也可能有助于理解),您还可以看到 [=25= 的踪迹] 使用其中一个分析器为内核调用发出的调用,例如nvprof --print-api-trace ...

---编辑---

为了使这个答案更简洁,nvcc 在将其传递给主机编译器之前直接修改主机代码以替换 <<<...>>> 语法(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#offline-compilation)