CUDA C++编程指南(7.1)——C++语言扩展之函数执行空间指定符

函数执行空间限定符用于指定函数是在主机上执行还是在设备上执行,以及是否可以从主机或设备调用。

7.1.1. global

__global__执行空间说明符将函数声明为内核。此类函数具有以下特性:

  • 在设备上执行,

  • 可从主机调用,

  • 对于计算能力5.0或更高的设备可从设备端调用。

一个 __global__ 函数必须具有 void 返回类型,并且不能是类的成员。

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

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

7.1.2. device

__device__执行空间说明符用于声明一个函数,该函数具有以下特性:

  • 在设备上执行,

  • 仅可从设备端调用。

__global____device__ 执行空间说明符不能同时使用。

7.1.3. host

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

  • 在主机上执行,

  • 仅可从主机端调用。

这相当于声明一个仅带有__host__执行空间说明符的函数,或者声明一个不包含任何__host____device____global__执行空间说明符的函数;无论哪种情况,该函数都仅为主机编译。

__global____host__ 执行空间说明符不能同时使用。

__device____host__ 执行空间说明符可以同时使用,在这种情况下,函数会同时为主机和设备编译。 应用兼容性中介绍的 __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 !defined(__CUDA_ARCH__)
   // Host code path
#endif
}

7.1.4. 未定义行为

当出现以下情况时,"跨执行空间"调用具有未定义行为:

  • __CUDA_ARCH__ 已定义的情况下,从 __global____device____host__ __device__ 函数内部调用 __host__ 函数。

  • __CUDA_ARCH__ 未定义,从 __host__ 函数内部调用 __device__ 函数的情况。

7.1.5. noinlineforceinline

编译器会在认为适当时内联任何__device__函数。

__noinline__ 函数限定符可用作提示编译器尽可能不要内联该函数。

__forceinline__ 函数限定符可用于强制编译器内联该函数。

__noinline____forceinline__ 函数限定符不能同时使用,且这两个限定符都不能应用于内联函数。

7.1.6. inline_hint

__inline_hint__限定符使编译器能够进行更激进的函数内联优化。与__forceinline__不同,它并不强制要求函数必须内联。在使用LTO(链接时优化)时,该限定符可用于提升跨模块的内联优化效果。

__noinline____forceinline__ 函数限定符都不能与 __inline_hint__ 函数限定符一起使用。

相关推荐
AngelPP30 分钟前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年34 分钟前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼1 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS1 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区2 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈2 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
端平入洛3 小时前
delete又未完全delete
c++
Ray Liang3 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx
shengjk14 小时前
NanoClaw 深度剖析:一个"AI 原生"架构的个人助手是如何运转的?
人工智能