首页 > 编程语言 >GPU编程初探

GPU编程初探

时间:2024-08-14 19:52:15浏览次数:16  
标签:架构 编程 Host 线程 内存 初探 GPU CPU

GPU(Graphic Processing Unit),图像处理处理器,俗称显卡,主要处理图像、显示等任务(数据运算)

CPU:逻辑运算

GPGPU(General Purpose computing on Graphic Processing Unit ),通用GPU,主要处理通用计算任务。

GPU性能指标

  1. 核心数
  2. GPU显存容量
  3. GPU计算峰值
  4. 显存带宽

CPU与GPU架构差异

CPU+GPU异构架构

GPU不能单独计算,CPU+GPU组成异构计算架构;

CPU起到控制作用,一般称为主机(Host);

GPU可以看作CPU的协处理器,一般称为设备(Device);

主机和设备之间内存访问一般通过PCLe总线链接;

NVIDIA GPGPU发展历史

Tesla 架构

  1. 代表性GPU:G80、G200
  2. 第一款支持CUDA的GPGPU
  3. 第一款使用标量线程处理器的GPU
  4. 首次引入了单指令多线程(SIMT)执行模型,多个线程使用一条指令并发执行
  5. 首次引入共享内存,可编程Cache,线程间通信

 

Fermi 架构(Compte Capability 2.0,2.1)

  1. 代表性GPU:C2050、C2070
  2. 第一款真正支持通用计算的GPU
  3. 提高双精度性能、ECC支持
  4. Ture Cach Hierarchy
  5. 共享内存与L1 Cache 可配置
  6. 大幅提升双精度性能
  7. 我国的天河1A超算,采用了C2050 GPU,全球首台采用异构架构的超算,开启异构计算时代

 

 

 Kepler 架构(Compte Capability 3.0~3.7)

  1. 代表性GPU:K20、K40、K80
  2. 引入DP Unit,双精度性能首次超过1T Flops
  3. 减少SM(SMX)数量
  4. 大幅增加每个SMX中的CUDA Core数量
  5. 192个CUDA Core+64个DP+32个SFU
  6. 美国橡树岭国家实验室超级计算系统Titan采用了Kepler架构的GPU
  7. 进军科学计算的雄心 

 Maxwell 架构(Compte Capability 5.0~5.3)

  1. 代表性GPU:Tegra TX1
  2. 去除DP Unit,追求功效比
  3. 将SMM内的CUDA Core进行分组,每组有专用的指令调度单元
  4. SMM内CUDA Core数量减少为128个,方便调度和控制
  5. Tegra TX1 终端高性能ARM+GPU异构计算平台
  6. 尝试进入自动驾驶领域

 

 Pascal 架构(Compte Capability 6.0~6.2)

  1. 代表性GPU:P40、P100
  2. DP Unit 又回来了,重视双精度
  3. SM内进一步精简,但每个GPU包含的SM多了
  4. NVLink横空出世
  5. Global Memory 由GDDR5替换成了HBM2, 带宽大幅增加
  6. 面向深度学习的初步定制:CUDNN
  7. 硬件直接支持FP16

 

 Volta 架构(Compte Capability 7.0~7.2)

  1. 代表性GPU:V100
  2. Tensor Core 来了,深度学习定制
  3. FP32和INT32两组运算单元相互独立,可同时执行一条FP32指令和一条INT32指令
  4. 每个SM单元,4组Process Block
  5. 硬件直接支持FP16
  6. NVIDIA DGX系列AI超级计算机横空出世

 

 

Turing 架构(Compte Capability 7.5)

  1. 代表性GPU:T4
  2. Volta架构的小加强
  3. 增加了Int8/Int4的推理能力
  4. 去除了FP64,深度学习方面专注推理
  5. LD/ST砍半
  6. 提升管线渲染
  7. 增加TR Core,增强光线追踪能力

 

 Ampere 架构(Compte Capability 8.0)

  1. 代表性GPU:A100
  2. 主要改进是Tensor Core,在深度学习的道路上越走越深
  3. 增强了Tensor Core中混合精度FMA指令的计算能力,由每个时钟周期执行64个FMA提升到每个时钟周期执行256个FMA
  4. Tensor可支持的数据类型扩展到了FP16、BF16、TF32、FP64、INT8、INT4等数据类型
  5. 增加结构化稀疏运算能力

 

GPU硬件抽象

大规模细粒度并行处理器(众核)

层次化的硬件架构:

GPU -> SM(SMX、SMM)->PE(CUDA Core, FP32/FP64)

层次化的内存组织形式:

全局内存(Global Memory)->共享内存(Shared Memory)->私有内存(寄存器)

线程组织

层次化的线程组织形式:

Grid->Block->Thread

线程索引(dim3)

Local_id: (threadIdx.x, theadIdx.y)

Block_id: (blockIdx.x, blockIdx.y)

Block_dim:(blockDim.x, blockDim.y)

Global_id:

X: blockIdx.x * blockDim.x + threadIdx.x

Y:blockidx.y * blcokDim.y + theadIdx.y

线程开启数量和线程组织方式由用户决定

线程与硬件的映射

  • 每个Thread都有自己的私有内存(寄存器)
  • 同属于一个Block内的所有Thread可通过共享内存(sharead memory)进行通信
  • 同属于一个Grid内的所有Thread可通过全局内存进行通信

异构编程

异构计算系统:

  • Host(主机端): CPU
  • Device(设备端): GPU

异构计算程序:

  • 始于Host,终于Host:Device程序由Host端开启,Device完成计算任务后,将计算结果传回Host端。
  • Host和Devie可以并行执行不同计算程序

 

 CPU与GPU之间的数据传输

  1. 独立GPU:CPU内存和GPU内存相互独立且分离
  2. Host端除执行一般C语言程序的内存分配外,还需执行如下操作:
  • 分配设备内存:cudaMalloc
  • 执行Host与Device间的数据传输: cudaMemcpy

 

CUDA程序组成

Host端程序(管理者)

  • 运行在CPU
  • 内存管理、Host与Device间通信、任务管理

Device端程序(工人)

  • 运行在GPU
  • 计算任务

编译:NVCC编译器

标签:架构,编程,Host,线程,内存,初探,GPU,CPU
From: https://blog.csdn.net/qq_62704693/article/details/141191742

相关文章

  • Delphi编程艺术:注释技巧与文档自动化
    标题:Delphi编程艺术:注释技巧与文档自动化引言在Delphi开发中,注释和文档生成是编写可维护代码的基础。Delphi支持多种注释方式,同时提供了工具和方法来自动化文档的生成。本文将详细介绍Delphi中的注释类型,以及如何使用Delphi生成Word文档等自动化文档的技巧。Delphi中的注......
  • 图像识别,训练数据集---GPU篇 3090免费使用
     大家一般都在window上训练yolo等一些深度学习模型,会发现很慢或者说GPU显存不够用而云GPU平台则解决了一系列该问题深度学习目标检测交流群1:985499650yolo2D3D目标检测行为识别交流群2:782537412接下来以该平台为例---有一些免费的3090,4090可以用(24G):https://cloud.lanyun.n......
  • 【数据结构】详细介绍线性表中的顺序表,带你复盘实现细节,附上顺序表编程练习题
    目录一.线性表二.顺序表 1.静态顺序表与动态顺序表2.动态顺序表的接口实现 2.1顺序表初始化 2.2判断是否需要扩容  2.3 顺序表指定位置插入2.4 顺序表头插2.5 顺序表尾插2.6 顺序表指定位置删除2.7 顺序表头删2.8 顺序表尾删2.9 顺序表查找2.1......
  • 【开端】如何高效记录并整理编程学习笔记
    如何高效记录并整理编程学习笔记?在编程学习的海洋中,高效的笔记记录和整理方法就像一张珍贵的航海图,能够帮助我们在浩瀚的知识中找到方向。如何建立一个既能快速记录又易于回顾的笔记系统?如何在繁忙的学习中保持笔记的条理性?让我们一起探讨如何打造属于自己的编程学习“知识宝......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(8)1006 cats 的最小生成树
    题目大意:给出有\(n\)个点\(m\)条边的图,接下来进行若干次操作,每次操作取出当前图的最小生成树,然后删去这些构成最小生成树的边,知道该图不连通,输出每条边在第几次操作时被删除思路:由于构成最小生成树的边数是\(n-1\)条边,所以最多操作次数为\(\lfloor\frac{m}{n-1}\rfloor\),每次......
  • Python编程中不可忽视的docstring使用详解
    概要在Python编程中,代码的可读性和可维护性至关重要。除了清晰的命名和结构良好的代码外,良好的文档字符串(docstring)也是确保代码易于理解和使用的关键工具。docstring是Python中用于记录模块、类、方法和函数行为的字符串,帮助开发者和用户快速了解代码的功能和用法。本文将......
  • groovy 编程语言简单介绍
    值提取系列值提取系列字符串值提取工具-01-概览字符串值提取工具-02-java调用js字符串值提取工具-03-java调用groovy字符串值提取工具-04-java调用java?Janino编译工具字符串值提取工具-05-java调用shell字符串值提取工具-06-java调用python字符串值提取工具-......
  • 编程语言地位大洗牌,谁才是王?
    编程语言地位大洗牌,谁才是王?前言编程语言的排行榜你选择的语言Java语言开发规范开发工具系统监控Java知识点写在最后前言作为一个开发者,其实还是会关于一下当下各种语言的使用情况,毕竟如果自己常用的语言用的人越来越少的话,那么对于这门语言本身的发展也是不利的,......
  • 如何高效记录并整理编程学习笔记?
    如何高效记录并整理编程学习笔记?在编程学习的海洋中,高效的笔记记录和整理方法就像一张珍贵的航海图,能够帮助我们在浩瀚的知识中找到方向。如何建立一个既能快速记录又易于回顾的笔记系统?如何在繁忙的学习中保持笔记的条理性?让我们一起探讨如何打造属于自己的编程学习“知识宝......
  • 编程入门攻略
    编程小白如何成为大神?大学新生的最佳入门攻略编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱?让我们一起探讨大学新生入门编程的最佳路径,为你的大学生活和未来职业......