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

CUDA编程(一):GPU计算与CUDA编程简介

CUDA编程(一):GPU计算与CUDA编程简介

  • GPU计算
    • GPU硬件资源
    • GPU软件资源
    • GPU存储资源
  • CUDA编程

GPU计算

NVIDIA公司发布的CUDA是建立在GPU上的一个通用并行计算平台和编程模型,CUDA编程可以利用GPU的并行计算引擎来更加高效地解决比较复杂的计算难题。GPU的并行计算最成功的一个应用就是深度学习领域。

GPU通常不作为一个独立运行的计算平台,而需要与CPU协同工作,它可以看成是CPU的协处理器,因此GPU的并行计算实际上是指基于CPU和GPU的异构计算架构,GPU和CPU之间通过PCIe总线连接在一起来协同工作。CPU的运算核心较少,但其可以实现复杂的逻辑运算,因此其适合控制密集型任务,而且CPU上的线程是重量级的。GPU的运算核心较多,其特别适合数据并行的计算密集型任务,其线程是轻量级的。基于CPU和GPU的异构计算平台可以优势互补,CPU负责处理逻辑复杂的串行计算程序,GPU主要处理数据密集型的并行计算程序,从而发挥最大的功效。

GPU硬件资源

在硬件上,GPU的资源包括SP和SM。

  • SP:最基本的处理单元,streaming processor,也称为CUDA core。具体的指令和任务都是在SP上处理的。GPU进行并行计算,也就是很多个SP同时进行运算。我们所说的几百核心的GPU值指的都是SP的数量;
  • SM:多个SP加上其他的一些资源组成一个streaming multiprocessor。也叫GPU大核,其他资源如:warp scheduler,register,shared memory等。SM可以看做GPU的心脏(对比CPU核心),register和shared memory是SM的稀缺资源。CUDA将这些资源分配给所有驻留在SM中的threads。因此,这些有限的资源就使每个SM中active warps有非常严格的限制,也就限制了并行能力。

每个SM包含的SP数量依据GPU架构而不同,Fermi架构GF100是32个,GF10X架构是48个,Kepler架构是192个,Maxwell架构是128个,Turing架构是64个。

GPU软件资源

从软件上看,即GPU的线程模型,可以分为Grid、Block、Thread和Warp。

  • Thread:一个CUDA的并行程序会被以许多个threads来执行。
  • Block:若干个threads组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
  • Grid:若干个blocks可以组成Grid。
  • Warp:GPU执行程序时的调度单位,同一个warp里的线程执行相同的指令,即SIMT。
    在这里插入图片描述

GPU存储资源

每一个Thread都有自己的local memoryresigters,每一个Block有shared memory,这个Block中的所有Thread都可以访问,Grid之间会有Global memoryCache,所有的Grid都可以访问。

CUDA编程

CUDA提供了多种编程语言支持,如C/C++、Python、Fortran等。
CUDA编程工具:

  • 编译器:nvcc
  • 调试器:nvcc-gdb
  • 性能分析:nsight、nvprof。

CUDA编程模型是一个异构模型,它假设系统是由一个主机和一个设备组成的,而且各自拥有独立的内存,CPU所在位置称为主机端(host),而GPU所在位置称为设备端(device)。一个CUDA程序即包含host程序,也包含device程序,CUDA程序在运行时可以分配和释放设备上的内存,并且在主机内存和设备内存之间进行传输,在设备上运行核函数。

典型的CUDA编程包括以下五个流程:

  1. 分配GPU内存,并进行数据的初始化;
  2. 从CPU内存中拷贝数据到GPU内存中;
  3. 调用CUDA的核函数来完成指定的计算;
  4. 将数据从GPU内存中拷贝回CPU内存中;
  5. 释放GPU内存。

http://www.kler.cn/a/5743.html

相关文章:

  • 运行.Net 7 Zr.Admin项目(后端)
  • 快速导入请求到postman
  • 03_Redis基本操作
  • 计算机网络 笔记 数据链路层 2
  • Java Spring Boot实现基于URL + IP访问频率限制
  • kubeneters-循序渐进Cilium网络(二)
  • 52LeetCode刷题_LeetCode刷题手册
  • 工作7年了,从“功能测试”到了现在的“测试开发”,年薪35W+,分享下我的心得
  • JVM 执行引擎
  • 基于JSP的学生奖学金评定管理系统的设计与实现_kaic
  • vue尚品汇商城项目-day01【1.vue-cli脚手架初始化项目生成文件的介绍】
  • Linux Dbus
  • 通讯录——文件版
  • 鲲鹏DevKit原生开发,效率倍增使能极简开发
  • Linux配置yum源
  • windows C++环境安装
  • 图书馆管理系统(Java编写,思路及源代码)
  • 计算机网络第三章(数据链路层)【湖科大教书匠】
  • Spring系列(六) --- SpringBoot 与 Servlet 的比较及 Spring 读取配置文件的方式
  • el-table实现自适应高度滚动,并处理fixed的问题
  • 【美赛】2023年MCM问题Y:理解二手帆船价格(代码思路)
  • 对Mysql的了解-索引
  • pdf太大怎么压缩大小,3个pdf文件压缩方法
  • 深入学习hashCode 和equals()方法的关系
  • 数据结构:二叉树
  • 兆芯最新X86 CPU曝光:性能与英特尔/AMD相比,没落后10年