我有一个关于从全局CUDA内核调用设备函数的基本问题。我想在调用设备函数时指定块和线程的数量???
我之前发布了一个关于缩减(here)的问题,我想在另一个全局内核中调用此函数。但是,缩减代码需要某些块和线程。
答案 0 :(得分:5)
可以在设备上调用两种类型的函数:
__device__
函数类似于普通的c
或c++
函数:它们在单个(CUDA)线程的上下文中运行。可以从块中的任意数量的线程调用这些线程,但从函数本身的角度来看,它不会像内核启动那样自动创建一组线程。
__global__
函数或“内核”只能使用内核启动方法(例如CUDA运行时API中的my_kernel<<<...>>>(...);
)调用。通过内核启动调用__global__
函数时,您可以指定要作为内核配置(<<<...>>>
)的一部分启动的块和线程数。如果您的GPU具有3.5或更高的计算能力,那么您还可以从设备代码调用__global__
函数(使用基本相同的内核启动语法,它允许您指定块和线程对于“孩子”内核)。这使用了CUDA Dynamic Parallelism,其中有一节专门用于编程指南。
有许多CUDA示例代码可以证明:
__device__
函数,例如simpleTemplates __global__
功能,例如cdpSimplePrint