【问题标题】:Set the number of blocks and threads in calling a device function in CUDA?设置在CUDA中调用设备函数的块数和线程数?
【发布时间】:2016-02-13 04:12:12
【问题描述】:

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

我之前发布了一个关于减少最小值的问题 (here),我想在另一个全局内核中调用这个函数。然而,减少代码需要某些块和线程。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    设备上可以调用的函数有两种:

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

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

    有很多CUDA示例代码演示:

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

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 2022-01-08
      • 2018-12-10
      • 2011-06-11
      • 1970-01-01
      • 2014-03-28
      • 2012-08-26
      • 2023-03-24
      • 2013-11-14
      相关资源
      最近更新 更多