【发布时间】:2016-02-13 04:12:12
【问题描述】:
我有一个关于从全局 CUDA 内核调用设备函数的基本问题。我想调用设备函数时可以指定块数和线程数吗???
我之前发布了一个关于减少最小值的问题 (here),我想在另一个全局内核中调用这个函数。然而,减少代码需要某些块和线程。
【问题讨论】:
标签: cuda
我有一个关于从全局 CUDA 内核调用设备函数的基本问题。我想调用设备函数时可以指定块数和线程数吗???
我之前发布了一个关于减少最小值的问题 (here),我想在另一个全局内核中调用这个函数。然而,减少代码需要某些块和线程。
【问题讨论】:
标签: cuda
设备上可以调用的函数有两种:
__device__ 函数就像普通的 c 或 c++ 函数:它们在单个 (CUDA) 线程的上下文中运行。可以从块中的任意数量的线程调用这些,但从函数本身的角度来看,它不会像内核启动那样自动创建一组线程。
__global__ 函数或“内核”只能使用内核启动方法(例如 CUDA 运行时 API 中的 my_kernel<<<...>>>(...);)调用。当通过内核启动调用__global__ 函数时,您指定要启动的块和线程数作为内核配置的一部分(<<<...>>>)。如果您的 GPU 具有 3.5 或更高的计算能力,那么您还可以从设备代码调用__global__ 函数(使用基本相同的内核启动语法,它允许您为“子”内核)。这使用了CUDA Dynamic Parallelism,其中有专门的编程指南部分。
有很多CUDA示例代码演示:
__device__函数,如simpleTemplates
__global__函数,如cdpSimplePrint
【讨论】: