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)
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)