学习CUDA--硬件的简单学习

目录

day0:硬件的简单学习

0:写在前面的话

新年开始,一起学习了解一下CUDA的知识,做机器学习的,或者说研究机器学习深度学习算法的人如果只会用算法还是远远不够的,最好能够把一些基本的算法动手实践一下,这样对以后的算法设计,工程结构设计,代码设计都有很大帮助,千万不能做“小学生玩原子弹”的事。

1:处理器结构初步知识

介绍CUDA之前先来下学习处理器结构,当然只是简单的介绍

1.0:CPU

学习CUDA--硬件的简单学习_第1张图片
这是一个典型的现代处理器结构示意图,其中包括处理器核心,就是我们平时所说的“核”,一级缓存,二级缓存,三级缓存。处理器核是用来完成计算的关键部分,简单的可以比喻成一个工人,所有计算(包括数字,逻辑等计算)都必须由工人完成,而工人需要知道工作内容和工作原料,这就是指令和数据,指令和数据存在哪?平时不用的时候放在硬盘里,当然,他们看起来就0101010101001000….这样的二进制文件,当要用他们的时候他们被读到内存-DRAM里面,当工人们需要这些数据或指令的时候,会现在自己的工具箱(L1缓存)里面找,如果没在工具箱里,就去工具车里找(L2缓存),如果还没有,就要开车回维修站(L3)找工具,工具箱和工具车每个工人都有一个自己的,并且互相隔离,但是维修站大家共享,如果L3也没有,那就去工厂找(DRAM)吧。
这个问题就是,找工具箱里的东西可能几秒钟,去工具车估计就要走几分钟,回维修站就要以小时计算了,去工厂可能就要按天计算了,这个工作效率是不能忍受的,所以这也是当年没有缓存的时候计算速度瓶颈之一,因为相比于寄存器,DRAM的速度慢的不可忍受,于是有了高速缓存的出现。
这也有一些关于带宽的知识,在后面介绍。
但高速缓存的出现也涉及很多技术上的问题,比如内存的同步,缓存数据替换算法等,但缓存能够提速的根本原因是程序的“局部性原则”。
学习CUDA--硬件的简单学习_第2张图片
上图为Nehalem处理器芯片内的布局。

1.1多点计算(计算集群)

集群层次最典型的结构如下:

学习CUDA--硬件的简单学习_第3张图片
处理器节点,通过互联网连接多台计算机,将任务分割至各个计算节点,通过互联网交换计算结果,完成大规模并行任务。

1.2GPU

介绍GPU结构之前,先来看IBM的Cell处理器芯片布局,因为他和现在的GPU相似度非常高:

学习CUDA--硬件的简单学习_第4张图片
power PC Core相当于一个管理员,他把任务分配给不同SPE,每个SPE相当于一个工人,这个图里有8个SPE,每个SPE都有自己的工具箱他们协同完成一项或者多项串行或并行任务,同时片内也有L2缓存。
Cell可以完成一个串行工作,以流水线的模式:
学习CUDA--硬件的简单学习_第5张图片
这个结构和NVIDIA的G80类似的;
GPU(多GPU)经典的结构:
学习CUDA--硬件的简单学习_第6张图片

包括SM(处理器簇)L1,L2缓存(更详细的结构预计在第三天给出简介),多个GPU之间通过PCI-E总线连接,相比于上面的计算机群的网络通信,PCI-E的数据传输速度是非常快速的。
而每个GPU内又能完成大规模的并行,因为GPU内部有大规模的用于计算的“核”(SP)。

1.3异构计算

异构计算简单理解就是通过不同的结构完成计算,比如CPU+GPU,CPU+FPGA,ARM+DSP等多种类型的计算单元组合,有些适合做控制,有些用于做计算,各自发挥自己的所长,完成高速计算,而ARM+DSP或者ARM+FPGA多封装在一个片子里,GPU则是通过PCI-E连接在外部,更像是一个外挂设备,或者叫做协处理器,从外观看也更像计算机群的结构。

处理器的能力

处理器的能力主要局限于:计算能力,控制能力和数据吞吐量(带宽)。
计算能力:主要参数是处理器时钟周期,和单个指令需要的周期,例如一个工人A能完成工作1,用1个步骤,而另一个工人B能完成工作1,用2个步骤,但是A一个步骤用1秒,但B一个步骤是0.5秒,那么他们的工作效率是一致的,所以对于同一个工作,步骤越少同时完成一个步骤时间越短的处理器计算能力越强。而且工人越多完成的工作也会越多越快。
控制能力:这个主要是分支预测等数据传输控制算法的设计和结构设计。
数据吞吐量:从内存读取数据到运算核心的过程类似于货车运货,货车的速度和马路的宽度。

I7 Nehalem处理器带宽,理论带宽和单核带宽

学习CUDA--硬件的简单学习_第7张图片
这些要素都要协调同步,一个最简单的短板效应。哪一个拖后腿都不行。
有些程序是“内存受限性”而有些程序是“处理器时钟周期或负载受限型”。

CPU vs GPU

CPU是传统的计算的处理器,拥有复杂的指令控制体系,而GPU则是依靠大量的简单计算核心完成大规模并行计算的处理器,能够在有些计算密集型程序中发挥重要作用,也是计算机视觉,机器学习的重要工具。

你可能感兴趣的:(CUDA,并行计算,GPU)