当前位置: 首页 > news >正文

记录 | CUDA编程中使用#ifdef指令控制生成CPU和GPU代码

CUDA编程中使用#ifdef指令控制生成CPU和GPU代码

比如:

#include <cstdio>
#include <cuda_runtime.h>__host__ __device__ void say_hello(){
#ifdef __CUDA_ARCH__printf("Hello, world from GPU!\n");
#elseprintf("Hello, world from CPU!\n");
#endif
}__global__ void kernel(){say_hello();
}int main(){kernel<<<1, 1>>>();cudaDeviceSynchronize();say_hello();return 0;
}

● CUDA编译器具有多段编译的特点;
● 一段代码他会先送到 CPU 上的编译器 (通常是系统自带的编译器如 gcc 和 msvc) 生成 CPU 部分的指令码。然后送到真正的 GPU 编译器生成 GPU 指令码。最后再链接成同一个文件,看起来好像只是编译了一次一样,实际上你的代码会被预处理很多次;
● 他在 GPU 编译模式下会定义 __CUDA_ARCH__ 这个宏,利用 #ifdef 判断这个宏是否定义,就可以判断当前是否处于 GPU 模式,从而实现一个函数针对 GPU 和 CPU 生成两份源码级不同的代码;


__CUDA_ARCH__ 是一个整数,表示当前编译所针对的 GPU 的架构版本号是多少,这个版本号是编译时指定的八本,不是运行时检测到的版本。编译器默认就是最老的52,能够兼容所有GTX900 以上的显卡。

相关文章:

  • [足式机器人]Part2 Dr. CAN学习笔记-数学基础Ch0-3线性化Linearization
  • CoreDNS实战(九)-性能压测
  • IDEA连接Redis注意事项
  • Arduino项目式编程教学第三章——红外遥控灯
  • CSS单位vmin、vmax
  • 【JMeter】BeanShell了解基础知识
  • C/C++---------------LeetCode第118. 杨辉三角
  • RT-Thread Studio文件消失不见或被排除构建
  • 【唐山海德教育】职称评审需要什么条件呢?
  • 2-- 简要介绍 Kubernetes
  • 【Python】zip
  • 【Openstack Train安装】五、Memcached/Etcd安装
  • 【工作生活】汽车电子嵌入式开发简介
  • python socket编程7 - 使用PyQt6 开发UI界面新增实现UDP server和client单机通讯的例子
  • 并发集合框架
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • CAP 一致性协议及应用解析
  • Electron入门介绍
  • Java 网络编程(2):UDP 的使用
  • java多线程
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 回顾2016
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 设计模式走一遍---观察者模式
  • 深度学习中的信息论知识详解
  • 鱼骨图 - 如何绘制?
  • 怎么把视频里的音乐提取出来
  • 最简单的无缝轮播
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​人工智能书单(数学基础篇)
  • #QT(智能家居界面-界面切换)
  • (2)MFC+openGL单文档框架glFrame
  • (9)STL算法之逆转旋转
  • (C++)八皇后问题
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET BackgroundWorker
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET gRPC 和RESTful简单对比
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET程序员迈向卓越的必由之路
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET实现之(自动更新)
  • .net中我喜欢的两种验证码
  • /usr/bin/env: node: No such file or directory
  • /var/spool/postfix/maildrop 下有大量文件
  • @31省区市高考时间表来了,祝考试成功
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149