CUDA中的函数执行空间说明符

本文介绍了CUDA编程中的函数执行空间说明符,包括__global__, __device__, 和__host__。__global__用于声明内核函数,它在设备上异步执行,可从主机调用。__device__函数仅在设备上执行,只能由设备代码调用。__host__函数则仅在主机上执行。同时,讨论了如何使用__CUDA_ARCH__宏来区分主机和设备的代码路径。
摘要由CSDN通过智能技术生成

函数执行空间说明符

函数执行空间说明符表示函数是在主机上执行还是在设备上执行,以及它是可从主机调用还是从设备调用。

1 __global__

__global__ 执行空间说明符将函数声明为内核。 它的功能是:

  • 在设备上执行,
  • 可从主机调用,
  • 可在计算能力为 3.2 或更高的设备调用(有关更多详细信息,请参阅 CUDA 动态并行性)。
    __global__ 函数必须具有 void 返回类型,并且不能是类的成员。

__global__ 函数的任何调用都必须指定其执行配置,如执行配置中所述。

__global__ 函数的调用是异步的,这意味着它在设备完成执行之前返回。

2 __device__

__device__ 执行空间说明符声明了一个函数:

  • 在设备上执行,
  • 只能从设备调用。
    __global____device__ 执行空间说明符不能一起使用。

3 __host__

__host__ 执行空间说明符声明了一个函数:

  • 在主机上执行,
  • 只能从主机调用。
    相当于声明一个函数只带有 __host__ 执行空间说明符,或者声明它没有任何 __host__ 、__device____global__ 执行空间说明符; 在任何一种情况下,该函数都仅为主机编译。

__global____host__ 执行空间说明符不能一起使用。

但是, __device____host__ 执行空间说明符可以一起使用,在这种情况下,该函数是为主机和设备编译的。 Application Compatibility 中引入的 __CUDA_ARCH__ 宏可用于区分主机和设备之间的代码路径:

__host__ __device__ func()
{
#if __CUDA_ARCH__ >= 800
   // Device code path for compute capability 8.x
#elif __CUDA_ARCH__ >= 700
   // Device code path for compute capability 7.x
#elif __CUDA_ARCH__ >= 600
   // Device code path for compute capability 6.x
#elif __CUDA_ARCH__ >= 500
   // Device code path for compute capability 5.x
#elif __CUDA_ARCH__ >= 300
   // Device code path for compute capability 3.x
#elif !defined(__CUDA_ARCH__) 
   // Host code path
#endif
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扫地的小何尚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值