记录 | CUDA编程中声明内联函数的方法

下面将 say_hello() 声明为内联函数:

#include <cstdio>
#include <cuda_runtime.h>

__device__ __inline__ void say_hello(){
    printf("Hello, world!\n");
}

__global__ void kernel(){
    say_hello();
}

int main(){
    kernel<<<1, 1>>>();
    cudaDeviceSynchronize();
    return 0;
}

需要注意的点:
inline 在 C++ 中的效果是声明一个函数为 weak 符号(弱符号),和性能优化意义上的内联无关;
● 优化意义上的内联指把函数体直接放到调用者那里去;
● 因此 CUDA 编译器提供了一个 “私货” 关键字:__inline__ 来声明一个函数为内联。不论是 CPU 函数还是 GPU 都可以使用,只要你用的 CUDA 编译器。GCC 编译器相应的私货则是 __attribute__(("inline"))
● 注意声明为 __inline__ 不一定就保证内联了,如果函数太大,编译器可能会放弃内联化。因此 CUDA 还提供了 __forceinline__ 这个关键字来强制一个函数为内联。GCC 也有相应的 __attribute__(("always_inline"))
● 此外,还有 __noinline__ 来禁止内联优化;

相关推荐

  1. 记录 | CUDA编程声明函数方法

    2023-12-06 02:50:01       56 阅读
  2. 函数为什么不能声明定义分离?

    2023-12-06 02:50:01       24 阅读
  3. Kotlin 函数

    2023-12-06 02:50:01       58 阅读
  4. C++函数

    2023-12-06 02:50:01       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 02:50:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 02:50:01       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 02:50:01       87 阅读
  4. Python语言-面向对象

    2023-12-06 02:50:01       96 阅读

热门阅读

  1. 糊里糊涂在计算机行业混迹10年

    2023-12-06 02:50:01       49 阅读
  2. python昨天日期时间,另外两种方法

    2023-12-06 02:50:01       55 阅读
  3. job_queue_processes参数讲解

    2023-12-06 02:50:01       66 阅读
  4. k8s的部署管理以及prometheus相关监控

    2023-12-06 02:50:01       66 阅读
  5. crui_lvgl 一个LVGL的DSL辅助工具的设想

    2023-12-06 02:50:01       54 阅读
  6. Vue 报错error:0308010C:digital envelope routines::unsupported

    2023-12-06 02:50:01       56 阅读
  7. 【网络控制】

    2023-12-06 02:50:01       61 阅读
  8. hive总结

    2023-12-06 02:50:01       62 阅读
  9. wpf 使用 StringFormat

    2023-12-06 02:50:01       46 阅读
  10. Clickhouse表引擎的总结

    2023-12-06 02:50:01       112 阅读
  11. 【Qt5】QList的用法

    2023-12-06 02:50:01       60 阅读