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

Dav*_*vid 2 cuda language-design

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

mykernel<<<blocks, threads, shared_mem, stream>>>(args);
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*lla 5

nvcc预处理系统,最终将其转换为序列CUDA运行时库调用移交之前的代码关闭主机代码编译器编译。确切的调用顺序可能会因 CUDA 版本而异。

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

- -编辑 - -

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