什么是CUDA?CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。什么是异构计算?这里的异构主要指的是主机端的CPU和设备端的GPU,CPU更擅长逻辑控制,而GPU更擅长计算。CUDA编程难吗?干就是了。

一.异构架构编程思维

1.异构架构

  一个典型的异构计算节点包括2个多核CPU插槽和2个或更多个的众核GPU。GPU通过PCIe总线与基于CPU的主机相连来进行操作。CPU是主机端,而GPU是设备端,这样一个异构应用就包含主机代码(逻辑)和设备代码(计算)。

2.CUDA平台

  CUDA平台可以通过CUDA加速库、编译器指令、应用编程接口以及行业标准程序语言的扩展(包括C|C++|Fortran|Python等)来使用。CUDA提供了2层API来管理GPU设备和组织线程,其中驱动API是一种低级API,它相对来说较难编程,但是它对于在GPU设备使用上提供了更多的控制,每个运行时API函数都被分解为更多传给驱动API的基本运算。

二.Hello World例子实战

1.VS 2022开发方式

  安装好VS 2022和CUDA 11.8,然后创建一个CUDA项目,如下所示:



  Hello World例子实战,如下所示:

#include "cuda_runtime.h" // CUDA
#include "device_launch_parameters.h"
#include <stdio.h>

__global__ void helloFromGPU(void)
{
 printf("Hello World from GPU!\n");
}

int main(void) 
{
 // hello from cpu
 printf("Hello World from GPU!\n");

 helloFromGPU<<<1,10>>>();
 cudaDeviceReset();

 return 0;
}

2.Clion开发方式(推荐)

  如果经常使用PyCharm进行Python编程,可能会更习惯Clion这个IDE吧。新建一个CUDA项目,使用10个线程输出"Hello World from GPU!",如下所示:


  CMakeLists.txt如下所示:

cmake_minimum_required(VERSION 3.26) # CMake版本要求,VERSION是版本,3.26是3.26版本
project(20231003_ClionProgram CUDA) # 项目名称,CUDA是CUDA项目

set(CMAKE_CUDA_STANDARD 17) # C++标准,CMAKE_CUDA_STANDARD是C++标准,17是C++17

add_executable(20231003_ClionProgram main.cu) # 可执行文件

set_target_properties(20231003_ClionProgram PROPERTIES CUDA_SEPARABLE_COMPILATION ON) # 设置可分离编译,PROPERTIES是属性,CUDA_SEPARABLE_COMPILATION是可分离编译,ON是开启

  main.cu文件如下所示:

#include "cuda_runtime.h" // CUDA运行时API
#include <stdio.h> // 标准输入输出

__global__ void helloFromGPU(void) // GPU核函数
{
 printf("Hello World from GPU!\n"); //输出Hello World from GPU!
}

int main(void) // 主函数
{
 // hello from cpu
 printf("Hello World from GPU!\n"); //CPU主机端输出Hello World from CPU!

 helloFromGPU<<<1,10>>>(); // 调用GPU核函数,10个线程块,1表示每个grid中只有1个block,10表示每个block中有10个线程
 cudaDeviceReset(); // 重置当前设备上的所有资源状态,清空当前设备上的所有内存

 return 0;
}

参考文献:

[1]《CUDA C编程权威指南》

CUDA C编程权威指南:1-基于CUDA的异构并行计算的更多相关文章

  1. 『CUDA C编程权威指南』第二章编程题选做

    第一题 设置线程块中线程数为1024效果优于设置为1023,且提升明显,不过原因未知,以后章节看看能不能回答. 第二题 参考文件sumArraysOnGPUtimer.cu,设置block=256,新 ...

  2. 读《Android编程权威指南》

    因为去年双十二购买了一折的<Android 编程权威指南(第一版)>,在第二版出来后图灵社区给我推送了第二版的优惠码,激动之余就立马下单购买电子书,不得不说Big Nerd Ranch G ...

  3. Swift编程权威指南第2版 读后收获

    自从参加工作一直在用OC做iOS开发.在2015年的时候苹果刚推出swift1.0不久,当时毕竟是新推出的语言,大家也都很有激情的学习.不过在学完后发现很难在实际项目中使用,再加上当时公司项目都是基于 ...

  4. 《Android编程权威指南》CriminalIntent项目梳理

    相信很多新手或者初级开发人员都已经买了第2版的<Android编程权威指南>, 这本书基于Android Studio开发,对入门人员来说是很好的选择,但是很可惜的是, 在完成一个项目后, ...

  5. 使用最新AndroidStudio编写Android编程权威指南(第3版)中的代码会遇到的一些问题

    Android编程权威指南(第3版)这本书是基于Android7.0的,到如今已经过于古老,最新的Android版本已经到10,而这本书的第四版目前还没有正式发售,在最近阅读这本书时,我发现这本书的部 ...

  6. 《Android编程权威指南》

    <Android编程权威指南> 基本信息 原书名:Android programming: the big nerd ranch guide 原出版社: Big Nerd Ranch Gu ...

  7. 《Android编程权威指南》PhotoGallery应用梳理

    PhotoGalley是<Android编程权威指南>书中另外一个重要的应用.       

  8. Android编程权威指南第三版 第32章

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35564145/article/de ...

  9. Android编程权威指南(第2版)--第16章 使用intent拍照 挑战练习

    16.7挑战练习:优化照片显示 新建dialog_photo.xml 1234567891011121314 <?xml version="1.0" encoding=&qu ...

  10. Android编程权威指南笔记

    学习android开发,你需要对java语言,包括类,对象,接口,监听器,包,内部类,匿名内部类有所了解. android studio 的下载与安装 可以从android开发者网站下载android ...

随机推荐

  1. 成本阶问题:财务模块axcr004合计金额检核表第18行合计金额与明细差异过大问题处理?

    财务模块axcr004合计金额检核表第18行合计金额与明细差异过大问题处理? 可能原因:生产开立工单时元件未建在生产料件BOM明细中,导致成本阶没有算到,需要手动更改成本阶. 公式: 处理办法:修改成 ...

  2. 后缀自动机 (SAM) 的构造及应用

    cnblogs 怎么又炸了. 为什么又可爱又强的 xxn 去年 9 月就会的科技樱雪喵现在还不会呢 /kel. 感觉 SAM 的教程已经被前人写烂了啊.那就写点个人学习过程中对 SAM 的理解. 参考 ...

  3. JVM-JVM如何加载类

    一.Java 语言的类型可以分为两大类: 基本类型(primitive types) 引用类型(reference types):类.接口.数组类和泛型参数(泛型参数会在编译中被擦除),因此Java虚 ...

  4. JUC并发编程学习(十一)四大函数式接口(必备)

    四大函数式接口(必备) 程序员:泛型.反射.注解.枚举 新时代程序员:lambda表达式.链式编程.函数式接口.Stream流式计算 函数式接口:只有一个方法的接口 @FunctionalInterf ...

  5. 题解 CF637B

    题目大意: 维护个栈,去重保留最上层 题目分析: 啥也不是,数组模拟 \(\text{stack} + \text{unordered\_map}\) 直接秒掉. 复杂度 \(O(n)\) 代码实现: ...

  6. 信创就用国产的 Solon Java Framework,v2.6.0 发布

    先吹牛! 在 v2.6 这个新的里程碑节点,Solon 又完成了几件惊天大事(每一件,都是经历了漫长时间打磨与积累): (1)Solon Native,有了第一个开源案例:dromara/neutri ...

  7. Python根据输入的公司编号、名称、网址,格式化输出公司信息。其中1)冒号统一为英文冒号,编号占6位,不足6位的前面补0。编号后面是制表符。

    根据输入的公司编号.名称.网址,格式化输出公司信息.其中 1)冒号统一为英文冒号,编号占6位,不足6位的前面补0.编号后面是制表符. 2)"公司名称:" 后面输出字符串占8位,左对 ...

  8. dbeaver软件的使用

    dbeaver软件的使用 一.dbeaver简介: dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具. DBeaver [1] 是一个通用的数据库管理工具和 SQL 客户端, ...

  9. 使用Tensorrt部署,C++ API yolov7_pose模型

    使用Tensorrt部署,C++ API yolov7_pose模型 虽然标题叫部署yolov7_pose模型,但是接下来的教程可以使用Tensorrt部署任何pytorch模型. 仓库地址:http ...

  10. MongoDB 6.0 单实例基于用户角色实现授权登录

    现代数据库系统能够存储和处理大量数据.因此,由任何一个用户单独负责处理与管理数据库相关的所有活动的情况相对较少.通常,不同的数据库用户需要对数据库的某些部分具有不同级别的访问权限:某些用户可能只需要读 ...