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


    函数执行空间说明符

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

    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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    SLAM从入门到精通(amcl定位使用)
    LiveData源码赏析三 —— 常见问题
    OpenNJet 应用引擎:在 NGINX 基础上的云原生增强
    基于51单片机十字路口红绿灯交通灯+紧急模式
    内核中的信号量
    Gitea Action 简单配置(CI/CD)
    金九银十求职季,美团高频面试题和答案都帮你准备好啦
    设计模式之桥接模式、组合模式与享元模式
    细胞机器人系统的概念
    黑龙江省等保评测常用的安全设备,看这一篇就够了
  • 原文地址:https://blog.csdn.net/kunhe0512/article/details/125529566