在CUDA中调用设备功能时设置块数和线程数?

时间:2016-02-13 04:12:12

标签: cuda

我有一个关于从全局CUDA内核调用设备函数的基本问题。我想在调用设备函数时指定块和线程的数量???

我之前发布了一个关于缩减(here)的问题,我想在另一个全局内核中调用此函数。但是,缩减代码需要某些块和线程。

1 个答案:

答案 0 :(得分:5)

可以在设备上调用两种类型的函数:

__device__函数类似于普通的cc++函数:它们在单个(CUDA)线程的上下文中运行。可以从块中的任意数量的线程调用这些线程,但从函数本身的角度来看,它不会像内核启动那样自动创建一组线程。

__global__函数或“内核”只能使用内核启动方法(例如CUDA运行时API中的my_kernel<<<...>>>(...);)调用。通过内核启动调用__global__函数时,您可以指定要作为内核配置(<<<...>>>)的一部分启动的块和线程数。如果您的GPU具有3.5或更高的计算能力,那么您还可以从设备代码调用__global__函数(使用基本相同的内核启动语法,它允许您指定块和线程对于“孩子”内核)。这使用了CUDA Dynamic Parallelism,其中有一节专门用于编程指南。

有许多CUDA示例代码可以证明:

  1. 调用__device__函数,例如simpleTemplates
  2. 从设备调用__global__功能,例如cdpSimplePrint