哪个线程运行传递给cudaStreamAddCallback的回调?

fwy*_*ard 5 cuda

如果我通过注册一个回调cudaStreamAddCallback(),哪个线程将运行它?

CUDA文档说 cudaStreamAddCallback

在流中所有当前排队的项目完成后,添加要在主机上调用的回调。对于每个cudaStreamAddCallback调用,回调将仅执行一次。回调将阻止流中的后续工作,直到完成为止。

但是没有提到回调本身的调用方式。

tal*_*ies 4

只是为了充实评论,以便这个问题有答案,并且会从未回答的队列中消失:

简而言之,这是 CUDA 运行时的内部实现细节,您无需担心它。

更长的答案是,如果您仔细观察 CUDA 运行时的操作,您会注意到设备上的上下文建立(无论是通过驱动程序 API 显式建立,还是通过运行时 API 隐式建立)会生成一个小型线程池。这些线程用于实现运行时的功能,例如流命令队列和回调操作。同样,程序员不需要了解内部实现细节。

  • 我不明白你的评论。我们确实有每个线程的资源,如果应用程序线程池中的线程数是预定义的,那么它们的分配可以是静态的。但是,如果回调函数需要访问这些每线程资源,则需要动态配置它们,因为我们无法控制 CUDA 线程池。 (2认同)