我想知道当一行像
myKernel<<<16,4>>>(arg1,arg2);
遇到。
那会发生什么?是否调用了 CUDA 驱动程序并将 ptx 代码传递给它还是什么?
“它只是工作”。只是在开玩笑。可能我会因为发布这个答案而受到抨击,因为我在这方面的知识并不广泛。但这就是我能说的:
mykernel<<<...>>>
一系列 api 调用(由各种 cuda 和 GPU api 库提供服务)替换内核启动语法。这就是 cuda 驱动程序在引擎盖下被“调用”的方式。通过研究驱动程序 API 中的内核执行,可以获得对内核执行的更多了解。为了简要描述驱动 API,我可以将其称为比 cuda 运行时 API 更“低级”的 API。然而,提到它的意义在于,它可以让我们深入了解如何将内核启动语法(运行时 API)翻译成实际上看起来像库调用的 C 级 API。
其他人可能会提供更好/更详细的解释。