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

Ham*_*UMB 0 cuda

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

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

Rob*_*lla 5

设备上可以调用两种类型的功能:

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

__global__函数或“内核” 只能使用内核启动方法(例如my_kernel<<<...>>>(...);,在CUDA运行时API中)调用。__global__通过内核启动调用函数时,您可以指定要作为内核配置(<<<...>>>)的一部分启动的块和线程数。如果您的GPU具有3.5或更高的计算能力,那么您还可以从设备代码中调用一个__global__函数(使用本质上相同的内核启动语法,该语法允许您为“子”内核指定块和线程)。它采用了CUDA动态并行功能 ,在编程指南的整个章节中都有专门介绍。

有许多CUDA示例代码演示:

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