c++ 当CUDA内核被调用时会发生什么?

js4nwp54  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(193)

我想知道在CUDA程序中,当一行

  1. myKernel<<<16,4>>>(arg1,arg2);

字符串
的情况下。
然后会发生什么?CUDA驱动程序被调用,ptx代码被传递给它还是什么?

ax6ht2ek

ax6ht2ek1#

“它只是工作”.只是开玩笑.也许我会得到火张贴这个答案,因为我的知识是不是在这方面的广泛.但这是我可以说:

  • nvcc代码处理器是一个编译器驱动程序,这意味着它使用多个编译器并将代码片段引导到一个或另一个方向。如果您有这样的问题,您可能想在这里阅读更多关于nvcc工具链的信息。无论如何,nvcc工具要做的事情之一是用一系列API调用替换内核启动语法mykernel<<<...>>>(由各种cuda和GPU API库提供服务)。这就是cuda驱动程序在引擎盖下被“调用”的方式。
  • 作为调用序列的一部分,驱动程序将执行各种任务。(设备汇编)代码。设备实际上并不执行PTX,这是一个中间代码,而是SASS。如果没有合适的SASS可用,但PTX代码在映像中可用,驱动程序将执行JIT编译步骤来创建SASS。(事实上,其中一些实际上发生在上下文创建时/CUDA延迟初始化,而不是在内核启动时。)
  • 此外,在调用序列中,驱动程序将执行各种类型的设备状态检查、数据有效性检查(例如内核启动配置参数)和数据复制(例如内核sass代码、内核参数)到设备。
  • 最后,驱动程序将在设备上启动执行,然后立即将控制权返回给主机线程。

通过研究驱动程序API中的内核执行,可以获得对内核执行的更多了解。为了简要描述驱动程序API,我可以将其称为比cuda运行时API“更低级别”的API。然而,提到它的目的是,它可以给予一些关于如何将内核启动语法(运行时API)转换为实际上看起来像库调用的C级别API的了解。
其他人可能会带着更好/更详细的解释来沿着。

相关问题