Loading...

目录

  • 内存与显存
  • CPU与GPU
  • GPU与CUDA

1.内存与显存

1.1 内存

内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。内存一般采用半导体存储单元,包括随机存储器,只读存储器,以及高速缓存。


随机存储器(Random Access Memory,RAM):

  • 既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。
  • 通常购买或升级的内存条就是用作电脑的内存,内存条(SIMM)就是将RAM集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少RAM集成块占用的空间。

只读存储器(Read Only Memory,ROM)

  • 只读存储器在制造的时候,信息(数据或程序)就被存入并永久保存。这些信息只能读出,一般不能写入,即使机器停电,这些数据也不会丢失。
  • ROM一般用于存放计算机的基本程序和数据,如BIOS ROM。其物理外形一般是双列直插式(DIP)的集成块。

高速缓冲存储器(CACHE)

  • 高速缓冲存储器位于CPU与内存之间,是一个读写速度比内存更快的存储器。
  • 当CPU向内存中写入或读出数据时,这个数据也被存储进高速缓冲存储器中。当CPU再次需要这些数据时,CPU就从高速缓冲存储器读取数据,而不是访问较慢的内存,当然,如需要的数据在Cache中没有,CPU会再去读取内存中的数据。

1.2 显存

显卡(Video card,Graphics card)全称显示接口卡,又称显示适配器。显卡接在电脑主板上,它将电脑的数字信号转换成模拟信号让显示器显示出来,同时显卡还是有图像处理能力,可协助CPU工作,提高整体的运行速度。

集成显卡

  • 集成显卡是将显示芯片、显存及其相关电路都做在主板上,与主板融为一体。
  • 独立显存集成显卡:在主板上有独立的显存芯片,不需要系统内存,独立运作
  • 内存划分集成显卡:从主机系统内存当中划分出来的一部分内存作为显存供集成显卡调用,具体的数量一般是系统根据需要自动动态调整的。

独立显卡

  • 独立显卡是指将显示芯片、显存及其相关电路单独做在一块电路板上,自成一体而作为一块独立的板卡存在,它需占用主板的扩展插槽(ISA、PCI、AGP或PCI-E)。

显存全称显示内存,即显卡的专用内存,作用是用来存储显卡芯片处理过或者即将提取的渲染数据,如同计算机的内存一样,显存是用来存储要处理的图形信息的部件。从早期的EDORAM、MDRAM、SDRAM、SGRAM、VRAM、WRAM等到今天广泛采用的DDR SDRAM显存经历了很多代的进步,市场中所采用的显存类型主要有SDRAM,DDR SDRAM,DDR SGRAM三种。

SDRAM / 同步内存:

  • 可以在一个时钟周期内进行数据的读写,从而节省了等待时间。由于低廉的价格和较佳的性能,目前SDRAM已成为中低档显卡和大多数主板普遍采用的内存。用作显存的SDRAM外形和内存条上的芯片无异,它最重要的特征是整个芯片采用两边扁平封装形式(只有两侧有针脚)。

SGRAM:

  • SGRAM可以说是SDRAM的显卡专用版,速度比EDO DRAM快8倍,具有图形增强方面的特性,支持图形处理中两个最有用的操作:写掩码和块写(写掩码可以减少或消除对内存的读/写操作,块写则有利于前景或背景的填充)。

DDR/DDR2/DDR3 SDRAM/SGRAM:

  • 这类是目前高、中端显卡最常见的显存种类,DDR(Double Data Rate)为双倍速率之意,它能在信号的上升沿和下降沿都传输数据,其数据传输带宽相当于SDRAM/SGRAM运行速度的两倍。

VRAM(Video DRAM) / 视频RAM:

  • 是专门为图形应用优化的双端口存储器,常用于中高档显示卡。VRAM是为显示卡量身定作的,除了运用在显示卡上别无它用,但VRAM制造成本很高,故采用这种显存的显卡很少见。

WRAM(Window RAM):

  • WRAM是增强型的VRAM内存,它可以加速常用的视频功能,如位块传输和模式填充等。WRAM性能比VRAM高50%,但WRAM的成本也较高,所以应用上受到很大限制(MGA的Millenium Ⅱ就使用这种显存)。

2.CPU与GPU

2.1 CPU

CPU(Central Processing Unit,中央处理器)的功能主要是解释计算机指令以及处理计算机软件中的数据。电脑中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。CPU包括运算逻辑部件、寄存器部件,运算器和控制部件等。

组件

  • 运算逻辑部件:可以执行定点或浮点算术运算操作、移位操作以及逻辑操作,也可执行地址运算和转换。
  • 寄存器
    • 通用寄存器:用来保存指令中的寄存器操作数和操作结果。通用寄存器的宽度决定计算机内部的数据通路宽度,其端口数目往往可影响内部操作的并行性。
    • 专用寄存器:为了执行一些特殊操作所需用的寄存器。
    • 控制寄存器:通常用来指示机器执行的状态
  • 控制部件:主要负责对指令译码,并且发出为完成每条指令所要执行的各个操作的控制信号。

2.2 GPU

GPU(Graphics Processing Unit,图形处理器)是显卡上的一块芯片,是一种专门进行图像运算工作的微处理器


2.3 CPU与GPU的关系

CPU与GPU的设计逻辑不一样,用两种不同的思路实现了计算能力最大化:

  • CPU秉承着低延时性:就是一台挖掘机(控制器),用它的爪子(缓存),一次就能够挖很多的资源(计算);
  • GPU秉承高吞吐量:就是一个团的人(控制器),用他们的手(缓存),一次一个个的也能捧很多资源(计算)。

基于不同的设计思路,两者的应用场景也是大不相同:CPU适合逻辑性强的事物处理和串行计算,而GPU适合执行高度线程化的并行处理任务(大规模计算任务)。对图像数据的应用就是一种并行计算场景,图像数据由很多像素点组成,各个像素相互独立,并行存在的。,因此GPU最早用于图像渲染等操作。而最近,利用深度学习的解决图像问题的场景也很适合用GPU计算。


3.GPU与CUDA

3.1 GPU

GPU这个概念是由Nvidia公司于1999年提出的,在这之后,经过了以下几个阶段的发展:

  • 仅用于图形渲染:此功能是GPU的初衷,这一点从它的名字就可以看出;
  • GPU这么一个强大的器件只用于图形处理太浪费了,它应该用来做更多的工作,例如浮点运算。怎么做呢?直接把浮点运算交给GPU是做不到的,因为当时它只能用于图形处理。最容易想到的,是把浮点运算做一些处理,包装成图形渲染任务,然后交给GPU来做,这就是GPGPU(General Purpose GPU)的概念。不过这样做有一个缺点,就是你必须有一定的图形学知识,否则你不知道如何包装。
  • 为了让不懂图形学知识的人也能体验到GPU运算的强大,Nvidia公司又提出了CUDA的概念。

3.2 CUDA

CUDA(Compute Unified Device Architecture,通用并行计算架构)是一种运算平台,它包含CUDA指令集架构以及GPU内部的并行计算引擎。只要使用一种类似于C语言的CUDA C语言,就可以开发CUDA程序,从而可以更加方便的利用GPU强大的计算能力,而不是像以前那样先将计算任务包装成图形渲染任务,再交由GPU处理。

CUDA的诞生就是为了让GPU能够有可用的编程环境,使得开发人员可以用程序控制GPU的硬件进行并行计算,但并不是所有GPU都支持CUDA。CUDA本质上是一个软件体系,该体系结构三部分组成:

CUDA驱动API:

  • 通过直接操纵硬件来实现GPU的使用,编程复杂,编程难度大,类似与汇编语言。(函数前缀为cu)

CUDA运行时API:

  • 对驱动API中的操作进行了一次封装,使用起来相对更友好,因此在编程过程中使用会比驱动API的频率要高。需要注意的是不可以和驱动API混合使用。(函数前缀为cuda)

CUDA函数库(官方和第三方):

  • 为了实现更高级的功能,官方或者第三方开发者提供的针对于某个领域的高级函数库,使得普通开发人员能够快速上手实现定制化功能。比如CUDNN就是针对于卷积计算的CUDA函数库,使得深度学习开发者能够很容易的调用CUDA实现深度学习算法的构建。

最后当开发人员利用C语言编写好CUDA应用程序后,还需要用特殊的编译器将C语言编译GPU能够识别的机器语言。如上图所示,CUDA的应用程序是以CPU作为宿主,然后达到操纵GPU的目的,所以最终真正运行时整个解决方案中既有运行在CPU上的代码,也会有运行在GPU上的代码。NVCC编译器就是专门针对这种情形开发出来的编译器。