参考

  • Exploring the GPU Architecture
  • GPU vs CPU: What Are The Key Differences?
  • Everything You Need to Know About GPU Architecture and How It Has Evolved
  • 深入GPU硬件架构及运行机制
  • 如何设置CUDA Kernel中的grid_size和block_size?

SIMD和SIMT

  • SISD:单一的指令流执行单一的数据流,即每条指令只能执行其对应的一个数据,也不会有不同的核执行不同的指令流,即只有一个核心。

  • SIMD:该架构只有一个控制单元和一个指令内存,因此同一时刻只能有一条指令被执行,但是这条指令可以同时处理多个数据,类似于指令的操作数不再是针对单个数字,而是针对向量。例如在SISD情境下,如果abc都是四维数据,我们想要执行c = a + b

    ADD c.x, a.x, b.x
    ADD c.y, a.y, b.y
    ADD c.z, a.z, b.z
    ADD c.w, a.w, b.w
    

    但是在SIMD下,只需要执行一条指令即可:

    SIMD_ADD c, a, b
    

  • MISD:不同的指令对同一数据进行操作,很少使用。

  • MIMD:指令和数据都可以并行,不同的核心可以对不同的数据执行不同的指令流,可以认为是多个SISD的并行?

  • SIMT:可以认为是SIMD的升级版,同一条指令可以被多个并发线程执行,并且不同线程执行的统一指令,其操作数也可以不同。

Fermi架构

  • 有16个SM (Streaming Processor),即上图黑框
  • 上图右侧为SM,一个SM拥有:
    • 2个Warp,每个Warp有16个Core
    • 16组LD/ST(加载处理单元)
    • 4个SFU(特殊函数处理单元)
    • shared memory
  • 每个Warp包括:
    • 16个Core
    • 一个Warp Scheduler
    • 一个Dispatch Unit
  • 每个Core(Streaming Processor,SP)包括:
    • 一个 INT Unit(整数计算单元、ALU)
    • 一个 FP Unit(浮点计算单元)

CUDA

cuda核函数启动时,主要是如下形式:

cuda_kernel<<<grid_size, block_size, Ns, stream>>>(...)
  • grid_size:dim3型数据,例如x、y和z,设置了grid的维度。x * y * z就等于启动的blocks的数目。Grid中所有的线程共享global memory。
  • blcok_size:dim3型数据,设置了每个block的维度。例如x * y * z就等于每个block包含的线程(thread)数目。block内部的线程可以同步,可以访问shared memory。
  • Ns:默认为0,代表在shared memory中,可以为每个block动态申请的memory,大小是字节数。
  • stream:就是指明该核函数匹配的stream,默认是0,即GPU中默认的stream。

与GPU架构的联系和层次

  • Cuda中的 Thread:就对应GPU中的Core。
  • Cuda中的 block:可以认为它可以由多个warp组成,也就是由多个thread构成,但是其不够大过SM,也就是说,一个block中的所有thread,都必须是同一个SM中的,这样才能使用shared memory。
  • warp:是调度和运行的基本单元,规定了block中 32个 thread 组成一个 warp,如果最后剩下的thread不够32个,也要占一个warp。因此,block_size最好是32的整数倍。warp中的32个thread每次都会执行同一条指令,也就是SIMT。
  • 对于Cuda中的block,其在同一个SM上运行,但是可被调度到不同的SM中。同一个SM可以同时运行多个block(并发执行)。但是SM中的资源有限,例如shared memory或者寄存器,因此有限制:Maximum number of resident blocks per SMMaximum number of resident threads per SM。因为有该限制,一个block中的thread数目应该尽量大于SM的core数目/SM最多驻留block数目,不同的架构比值不同,例如对GTX 1080 Ti 是 2048 / 32 = 64。128作为block的通用值比较合适。
  • 一个SM可以并行执行多个warp,这主要由一个SM有几个warp scheduler决定。但是这并行执行的多个warp,是只能属于同一个block还是可以属于多个不同的block?似乎可以属于不同的block,感觉有多种说法。

GPU架构和CUDA简单介绍(未来继续补充)相关推荐

  1. Spring Cloud微服务系统架构的一些简单介绍和使用

    Spring Cloud 目录 特征 云原生应用程序 Spring Cloud上下文:应用程序上下文服务 引导应用程序上下文 应用程序上下文层次结构 改变Bootstrap的位置Properties ...

  2. 【并行计算-CUDA开发】GPU 的硬体架构 关于存储体的介绍比较好bank conflicts

    GPU 的硬体架构   这里我们会简单介绍,NVIDIA 目前支援CUDA 的GPU,其在执行CUDA 程式的部份(基本上就是其shader 单元)的架构.这里的资料是综合NVIDIA 所公布的资讯, ...

  3. GPU和CUDA基础介绍

    转载自http://blog.csdn.net/fengbingchun/article/details/54691225 一.GPU简介 1985年8月20日ATi公司成立,同年10月ATi使用AS ...

  4. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  5. CUDA ---- GPU架构(Fermi、Kepler)

    GPU架构 SM(Streaming Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的. 以Fermi架构为例,其包含以下主要组成部分: CUDA co ...

  6. CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起

    目录 1.从硬件看 2.从软件看 3.对应关系 4.SIMT和SIMD 掌握部分硬件知识,有助于程序员编写更好的CUDA程序,提升CUDA程序性能,本文目的是理清sp,sm,thread,block, ...

  7. Apollo架构体系、Apollo运行原理、Apollo配置中心简单介绍(一)

    笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关.服务器地址.接口地址.不同环境的一些配置文件不同,这些在每次发布不同环境.更新项目时都比较繁琐,后来学习微服务时接触到了S ...

  8. 公司网络架构简单介绍

    公司网络架构简单介绍 公司服务器架构简单介绍: CDN:租用的,用于提高用户访问速度 前边两台LVS:实现负载均衡和高可用 三台Nginx服务器提供Web服务 三台Tomcat服务器当动态Web服务 ...

  9. Nvidia GPU架构 - Cuda Core,SM,SP等等傻傻分不清?

    背景   在深度学习大热的年代,并行计算也跟着火热了起来.深度学习变为可能的一个重要原因就是算力的提升.作为并行计算平台的一种,GPU及其架构本身概念是非常多的.下面就进行一个概念阐述,以供参考. G ...

最新文章

  1. underscorejs之 _.indexBy(list, iteratee, [context])
  2. 华为云携手秒拍,云+AI助力短视频加速发展
  3. Python中浅拷贝与深拷贝的骚操作
  4. 真是个狠人!开学第一天,这批小学生的造型刷爆朋友圈!
  5. php查到的内容追加到html,javascript - 请问php中如何将查询出来的结果数组转化成自己想要的格式,并在前台利用js输出到html中...
  6. 2021 年 6 月程序员工资统计,反作弊算法工程师太可怕了。。
  7. 禁用”mgmtdb实例导致12c 应用psu失败
  8. POJ 1915 经典马步 双向bfs
  9. SGU-169 Numbers(找规律)
  10. 论文赏析[EMNLP18]用序列标注来进行成分句法分析
  11. 计算机内录音频文件格式,如何将电脑里发出的声音内录下来?
  12. 忽悠马云10亿,还阿里4500亿:做对事赢一场,跟对人赢一生!
  13. arm嵌入式led灯闪烁实验报告_ARM嵌入式系统与应用实验报告
  14. matlab 兼容,matlab版本兼容问题
  15. linux oracle ora-12162,oracle ORA-12162: TNS:net service name is incorrectly specified
  16. [转载] 无法解密!首个利用WinRAR漏洞传播的未知勒索软件(JNEC)分析
  17. TCP/UDP网络的通信
  18. 发送邮件服务器连接错误什么意思,SMTP 错误(-1) :连接服务器失败
  19. SpringBoot 配置文件加密的两种方式
  20. 2019团体程序设计天梯赛L1 L1-1 PTA使我精神焕发L1-2 6翻了L1-3 敲笨钟L1-4 心理阴影面积L1-5 新胖子公式L1-6 幸运彩票L1-7 吃鱼还是吃肉

热门文章

  1. python实现登录抓取_Python实现爬取需要登录的网站完整示例
  2. 华厦邓白氏码查询网址
  3. ESI.ProCAST.2014.0..Visual-Environment.v9.6.Linux64 1DVD铸造模拟软件
  4. maya多边形建模怎样做曲面_maya将曲面模型转换成多边形模型
  5. 2016年每日最新Google hosts
  6. VS2017更改注释快捷键(Ctrl+/ 添加注释 ,Ctrl + Shift + / 取消注释)
  7. 安卓开发-如何添加横线
  8. php 图片扭曲,把一张图片变形扭曲成各种不同的长宽
  9. 读论文:检索式多轮问答,阿里的ESIM模型
  10. 东南大学破格保研挂科_给挂科同学的建议