学习资源:
CPU和GPU到底有什么区别?https://zhuanlan.zhihu.com/p/156171120
目录
CPU:可以理解为颜料先后发射,连接在一起,给人呈现以笑脸的图像,花费时间较长,可类比CPU的计算原理,一步步迭代计算。
GPU:多管颜料同时发射,绘制成一幅完整的画像,花费时间是在一瞬间,可类比GPU的计算原理,大量高并行计算。
因此,在实验中通常希望计算在GPU中进行,常见代码:
- # select device
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
- print("device: %s" % device)
可以发现代码中并未出现GPU,实际上,这暗示了GPU和CUDA之间存在一定的联系,以下进行详细学习记录。
显卡(Video card,Graphics card)全称显示接口卡,又称显示适配器,是计算机最基本配置、最重要的配件之一。就像电脑联网需要网卡,主机里的数据要显示在屏幕上就需要显卡。因此,显卡是电脑进行数模信号转换的设备,承担输出显示图形的任务。具体来说, 显卡接在电脑主板上,它将电脑的数字信号转换成模拟信号让显示器显示出来。原始的显卡一般都是集成在主板上,只完成最基本的信号输出工作,并不用来处理数据。随着显卡的迅速发展,就出现了GPU的概念,显卡也分为独立显卡和集成显卡。独立显卡和集成显卡两者最大区别在性能和功耗上面。前者性能更强,后者由于集成电路和成本等限制,只有顶级核显的表现能够达到入门独显的性能;而前者拥有独立显存后者采用与内存的共享显存设计,也会影响性能;前者在功耗上面更大,后者的功耗更低。
GPU这个概念是由Nvidia公司于1999年提出的。GPU是显卡上的一块芯片,就像CPU是主板上的一块芯片。那么1999年之前显卡上就没有GPU吗?当然有,只不过那时候没有人给它命名,也没有引起人们足够的重视,发展比较慢。自Nvidia提出GPU这个概念后,GPU就进入了快速发展时期。简单来说,其经过了以下几个阶段的发展:
①仅用于图形渲染,此功能是GPU的初衷,Graphic Processing Unit,图形处理单元;
②GPU只用于图形处理太浪费了,它应该用来做更多的工作,例如浮点运算。怎么做呢?直接把浮点运算交给GPU是做不到的,因为它只能用于图形处理(那个时候)。最容易想到的,是把浮点运算做一些处理,包装成图形渲染任务,然后交给GPU来做。这就是 GPGPU(General Purpose GPU)的概念。不过这样做有一个缺点,就是你必须有一定的图形学知识,否则你不知道如何包装。为了让不懂图形学知识的人也能体验到GPU运算的强大,Nvidia公司又提出了CUDA的概念。
中央处理器(central processing unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。
CUDA(Compute Unified Device Architecture),通用并行计算架构,是一种运算平台。它包含CUDA指令集架构以及GPU内部的并行计算引擎。你只要使用一种类似于C语言的 CUDA C语言,就可以开发CUDA程序,从而可以更加方便的利用GPU强大的计算能力,而不是像以前那样先将计算任务包装成图形渲染任务,再交由GPU处理。注意,并不是所有GPU都支持CUDA。
在没有GPU之前,基本上所有的任务都是交给CPU来做的。有GPU之后,二者就进行了分工, CPU负责逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务(大规模计算任务)。为什么这么分工?这是由二者的硬件构成决定的。可以看出, CPU是“主(host)”而GPU是“从(device)”,GPU无论发展得多快,都只能是替CPU分担工作,而不是取代CPU。
CUDA是GPU的实现工具;GPU是CUDA的硬件基础。
显存,也被叫做帧缓存,它的作用是用来存储显卡芯片处理过或者即将提取的渲染数据。如同计算机的内存一样,显存是用来存储要处理的图形信息的部件。也可理解为显卡的内存,电脑查看显卡方法:16G显存