3.1、 CUDA执行模型概述

3.1.1 GPU架构概述

GPU架构主要围绕流式多处理器(SM)进行的搭建。如下图所示。

SM中有多个CUDA执行核心,支持数百个线程的并发执行。

当启动一个grid时,其中的block被划分到SM上进行执行,block不会跨SM进行执行一个SM中可执行多个block,block之间根据SM资源的可用性进行调度(主要由Warp Scheduler负责)。

SM会将block再次进行划分,划分为线程束wrap(每个wrap有32个线程),然后再调度执行,wrap是SM调度运行的最小单位。此外由于block分了wrap,同一线程块中的线程可能会以不同的速度进行前进

CUDA采用SIMT架构管理和执行线程。每32个线程为一组,称为线程束wrap。线程束中的线程执行相同的指令,但是不同线程拥有自己的指令地址计数器、寄存器状态,利用自身的数据对当前指令进行执行

SIMT(单指令多线程)和SIMD(单指令多数据)

相同:二者都是将相同指令广播给多个执行单元进行执行

区别:

SIMD要求同一个向量中的所有元素要在一个统一的同步组中一起执行,SIMT允许同一线程束中的线程独立执行。

SIMD是一个线程,在一个核心上。SIMT是多个线程,多个核心上运行的线程。

SIMT是真正的并行,各个线程的逻辑都可以有一定的区别;SIMD仅仅能进行简单的加减乘除运算而已。

3.1.2 Fermi架构

架构图如上所示。Fermi架构是第一个完整的GPU计算架构,共有16个SM,一个SM有32个CUDA执行核心,一个执行核心中又有一个全流水线的ALU和FPU(浮点运算),有点套娃了。

整个Fermi架构还包括:

一个二级缓存(768KB,16个SM共享);

6个DRAM存储接口(提供大容量的全局内存 );

Giga Thread引擎(全局调度器),调度线程块到SM的wrap scheduler上面。

往下再套一波,每个SM中,32个CUDA执行核心;16个LD/SD单元(允许一个时钟周期内16个线程计算源地址、目的地址);4个SFU(特殊功能计算,比如正余弦等);

两个wrap scheduler和Dispatch Unit,双Warp调度器同时调度和分派来自两个独立Warp的指令。如图1所示,两个组,每组16个CUDA核心。

Fermi架构,可以在每个SM中同时处理48个线程束(16+16+16(LD/SD))。

Fermi也支持同时并发执行内核。并发执行内核允许执行一些小的内核程序来充分利用GPU,如图:

3.1.3 Kepler架构

Kelper架构框主要有三个比较大的提升:全新的SM、动态并行、Hyper-Q技术。架构图如下所示:

主要部件:

15个SM

6个64位内存控制器

(1) 全新的SM

192个单精度CUDA核心

64个双精度单元

32个SFU

32个LD/ST

64KB的共享内存/L1 Cache

4个Wrap Scheduler、8个Dispatch  Unit(确保在一个SM上同时发送和执行4个wrap

(2) 动态并行:

允许GPU动态启动新的网格,内核可以启动其他内核。这样一来便于创建和优化递归以及数据相关,同时也减少了CPU与GPU之间的通信,如下图所示。

(3) Hyper-Q技术:

增加了更多的CPU和GPU之间的同步硬件连接,使得CPU可以在GPU上同时运行更多任务,防止因队列阻塞而导致的速度下降,如下图所示。

3.1.4 使用Profile工具进行优化

简而言之:想优化速度,首先用性能分析工具分析(年轻人,得练 ):

  • nvvp
  • nvprof

限制内核性能的主要包括但不限于以下因素:

  • 存储带宽
  • 计算资源
  • 指令和内存延迟

3.1 CUDA执行模型概述相关推荐

  1. 【CUDA 基础】3.1 CUDA执行模型概述

    title: [CUDA 基础]3.1 CUDA执行模型概述 categories: CUDA Freshman tags: CUDA SM SIMT SIMD Fermi Kepler toc: t ...

  2. CUDA编程第三章: CUDA执行模型

    前言: 本章内容: 通过配置文件驱动的方法优化内核 理解线程束执行的本质 增大GPU的并行性 掌握网格和线程块的启发式配置 学习多种CUDA的性能指标和事件 了解动态并行与嵌套执行 通过上一章的练习, ...

  3. Windows Phone 执行模型概述

    Windows Phone 执行模型控制在 Windows Phone 上运行的应用程序的生命周期,该过程从启动应用程序开始,直至应用程序终止. 该执行模型旨在始终为最终用户提供快速响应的体验.为此, ...

  4. CUDA学习之CUDA执行模型--part3

    文章目录 3.3 并行性的表现 3.3.1 用nvprof检测活跃的线程束 3.3.2 用nvprof检测内存操作 内存读取效率 全局加载效率 3.3.3 增大并行性 指标与性能 3.3 并行性的表现 ...

  5. CUDA C编程权威指南 第三章 CUDA执行模型

    基础 每个GPU有多个SM(streaming multiprocessor) 当启动一个grid时,它的block会被分配给多个SM上执行,一个block一旦被调度到一个SM上,则这个block只会 ...

  6. 计算机视觉大型攻略 —— CUDA(2)执行模型

    Professional CUDA C Programming[1]是一本不错的入门书籍,虽说命名为"Professional",但实际上非常适合入门阅读.他几乎涵盖了所有理论部分 ...

  7. cuda C 编程权威指南 Grossman 第2章 CUDA编程模型

    2.1 CUDA编程模型概述 CUDA编程模型提供了一个计算机架构抽象作为应用程序和其可用硬件之间的桥梁. 通信抽象是程序与编程模型实现之间的分界线,它通过专业的硬件原语和操作系统的编译器或库来实现. ...

  8. 使用 Windows Phone 执行模型的最佳做法

    当用户导航离开 Windows Phone 应用程序时,这些应用程序可能会终止.有关应用程序生命周期的概述,请参阅 Windows Phone   执行模型概述. 本主题重点介绍一些处理执行模型事件的 ...

  9. (CUDA 编程1).CUDA 线程执行模型分析(一)招兵 ------ GPU的革命

    (CUDA 编程1).CUDA 线程执行模型分析(一)招兵 ------ GPU的革命 作者:赵开勇 来源:http://www.hpctech.com/2009/0818/198.html 序:或许 ...

最新文章

  1. 系统动力学_System Dynamics
  2. 美翻朋友圈:用Python生成蒙太奇马赛克图片
  3. 微软推出Python入门课,登上GitHub趋势榜第一(附视频)
  4. 新记录诞生,腾讯云2分31秒打破ImageNet训练记录
  5. T4 (Text Template Transformation Toolkit)实现简单实体代码生成
  6. 简明python教程在线-Python简明教程
  7. [Android Pro] InputStream.skip方法的思考
  8. 优秀开源项目:MyXls
  9. SAP技术专家Jerry的技术分享微信群 - 2021年1月14日更新 - 还剩27个名额
  10. 【POI2011】LIZ-Lollipop 【构造】
  11. 【2018.4.7】模拟赛之三-ssl2384 字符串【字符串】
  12. LinuxC高级编程——线程间同步
  13. 从零搭建nginx服务器
  14. (转)深入分析 Java I/O 的工作机制
  15. Apple Watch用户终于能对部分预装应用说不了 包括闹钟、定时器等
  16. LeetCode简单题目(#118 #119 #121 #122 #125 #136 #141 #155)-8道
  17. dns服务期搭建使用_DNS服务器搭建
  18. Java基础语法——Java语言介绍
  19. 服务器缺少dll文件,遇到DLL文件缺失或者损坏怎么办 DLL文件修复教程
  20. python开源bi_推荐一套开源BI工具?

热门文章

  1. 分库分表——基本概念以及shardingJdbc和Mycat对比
  2. 输出字符的ascii码
  3. 由preempt_disable的实现想到的
  4. SP服务商Java短信平台的软件模型和实现(吴宏杰,赵雷,杨季文,苏州大学计算机科学和技术学院)...
  5. 《规范》前端编码规范
  6. Unity两种获取屏幕点击位置的世界坐标方法
  7. 菜鸟到大神的上位历程,即学即用走向人生巅峰
  8. 线条边框简笔画图片大全_每天学一幅简笔画生活小物简笔画图片大全!
  9. SSM框架搭建,及遇到的问题
  10. 如何修改PC端微信消息提示音