CPU和GPU科普(一)
概述
整理和研究通用CPU算力和异构GPU/ASIC芯片算力的区别。
CPU工作方式及算力测算
CPU工作原理
SRAM: Static Random Access Memory ,静态随机存取存储器, volatile memory易失性存储,不需要刷新电路即能保存它内部存储的数据。L2 Cache。
DRAM: Dynamic Random Access Memory,动态随机存取器,volatile memory,刷新电路保存它内部存储的数据。
SDRAM: Synchronous Dynamic Random Memory,同步动态随机存取内存。对进入的指令进行管线(Pipeline)操作,管线意味着芯片可以在处理完之前的指令前,接受一个新的指令。
易失性存储器(Volatile Memory,VM),电源关闭,资料丢失,如SRAM、DRAM、SDAM、DDR-SDRAM等;
非易失性存储器(Non-Volatile Memory,NVM):电源关闭,资料任然可以保留,如ROM等。
CPU组成
CPU的结构主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元(CU, Control Unit)、寄存器(Register)、高速缓存器(Cache)和它们之间通讯的数据、控制及状态的总线。
CPU运行过程,下面链接的文章讲的比较清楚。
传送门转载:https://blog.csdn.net/dong_daxia/article/details/80289951。
补充:编译过程
事实上,仅仅将程序通过编译改写成汇编指令或机器指令,在操作系统上还不能直接运行。实际上广义的编译,其实包括预处理、编译、汇编、链接这整个过程。
- 预处理,就是把代码里引入的其他代码,插入到这段代码中,形成一个代码文件。
- 编译,就是把代码转化为汇编指令的过程,汇编指令只是CPU相关的,也就是说C代码和python代码,代码逻辑如果相同,编译完的结果其实是一样的。
- 汇编,就是把汇编指令转为机器码的过程,机器码可以被CPU直接执行。
- 链接,就是将一段我们需要的已经编译好的其他库,与我们的汇编结果连起来,这样才是最终程序完整的形式,操作系统才可以运行。不同操作系统编译好的其他库形式不同,而且链接的方式也不同,得到最终程序的形式也不同,所以编译好的程序只能在特定的操作系统下运行。
CPU算力测算
算力=CPU核心*时钟频率*单时钟周期执行浮点操作数
# FP64 双精度计算
# 支持AVX2的处理器的单指令的长度是256bit,每个intel核心假设包含2个FMA,一个FMA一个时钟周期可以进行2次乘或者加的运算,那么这个处理器在1个核心1个时钟周期可以执行 `256bit*2FMA*2M/A/64=16` 次浮点运算,也称为16FLOPs,就是Floating Point Operations Per Second;
# 支持AVX512的处理器的单指令的长度是512Bit,每个intel核心假设包含2个FMA,一个FMA一个时钟周期可以进行2次乘或者加的运算,那么这个处理器在1个核心1个时钟周期可以执行 `512bit*2FMA*2M/A/64=32` 次浮点运算,也称为32FLOPs。
例子:
现在intel purley platform的旗舰skylake 8180是28Core@2.5GHZ,支持AVX512,其理论双精度浮点性能是:28Core*2.5GHZ*32FLOPs/Cycle=2240GFLPs=2.24TFLOPs
。
MOPS(Million Operation Per Second),1MOPS代表处理器每秒钟可进行一百万次(10^6)操作;
GOPS(Giga Operations Per Second),1GOPS代表处理器每秒钟可进行十亿次(10^9)操作;
TOPS(Tera Operations Per Second),1TOPS代表处理器每秒钟可进行一万亿次(10^12)操作;
Pops(Peta Operation Per Second),1POPS代表处理器每秒钟可进行千万亿次(10^15)操作;
Eops(Exa Operation Per Second),1EOPS代表处理器每秒钟可进行百亿亿次(10^18)操作;
参考链接:https://baike.baidu.com/item/数量级/3289119?fr=aladdin
GPU能做的CPU都能做,CPU能做的GPU却不一定能够做到,GPU一般一个时钟周期可以操作64bit的数据,1个核心实现1个FMA。
这个GPU的计算能力的单元是:64bit1FMA2M/A/64bit=2FLOPs/Cycle
GPU的计算能力也是一样和核心个数,核心频率,核心单时钟周期能力三个因素有关。
但是架不住GPU的核心的数量多呀
例如:对现在nvidia tesla class 的pascal旗舰 p100而言,是1792core@1.328GHZ,其理论的双精度浮点性能是:1792Core1.328GHZ2FLOPs/Cycle=4759.552GFLOPs=4.7TFLOPs
CPU和GPU区别
SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。;
SISD全称Single instruction, Single data,单指令流单数据流,每个指令部件每次仅译码一条指令,而且在执行时仅为操作部件提供一份数据。
CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。
什么类型的程序适合在CPU上运行?
- I/O intensive
- Memory intensive
什么类型的程序适合在GPU上运行? - 计算密集型的程序。所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。可以做一下对比,读内存的延迟大概是几百个时钟周期;读硬盘的速度就不说了,即便是SSD, 也实在是太慢了。
- 易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构, 他有成百上千个核,每一个核在同一时间最好能做同样的事情。
GPU和CPU对比----传送门
CPU和GPU科普(一)相关推荐
- 深度解析:CPU与GPU有什么区别?xPU又是什么鬼?
先了解什么是异构并行计算 同构计算是使用相同类型指令集和体系架构的计算单元组成系统的计算方式. 而异构计算主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式,常见的计算单元类别包括CPU ...
- CPU、GPU、DPU、TPU、NPU...傻傻分不清楚?实力扫盲——安排
人工智能的发展离不开算力的支持,算力又是依附于各种硬件设备的,没有了算力设备的加持,就好比炼丹少了丹炉一样,可想而知,人工智能智能也就无用武之地了.以深度学习为主的人工智能方向的发展更是离不开强大 ...
- 汽车智能化基本概念:CPU、GPU、NPU、DPU、MCU、ECU……
当汽车进入电动化.智能化赛道后,产品变革所衍生的名词困扰着消费者.例如关于芯片方面的CPU.GPU.NPU.SOC等等.这些参数格外重要,甚至不逊于燃油车时代的一些核心部件配置. 这次,我们进行一次芯 ...
- CPU、GPU、TPU是个啥?
本文纯科普文,不涉及任何编程代码 CPU.GPU.TPU 前言 一.CPU和GPU的区别 CPU 基于低延时的设计: GPU是基于大的吞吐量设计. CUDA cuDNN 二.什么类型的程序适合在GPU ...
- CPU,GPU,Memory调度
CPU,GPU,Memory调度 HDD&Memory&CPU调度机制(I/O硬件性能瓶颈) 图1. HDD&Memory&CPU调度图 CPU主要就是三部分:计算单元 ...
- TensorFlow指定CPU和GPU方法
TensorFlow指定CPU和GPU方法 TensorFlow 支持 CPU 和 GPU.它也支持分布式计算.可以在一个或多个计算机系统的多个设备上使用 TensorFlow. TensorFlow ...
- CPU,GPU,GPGPU
CPU,GPU,GPGPU 1.基本概念 1.1 GPU 图形处理器(bai英语:Graphics Processing Unit,缩写:GPU),又称显示核心.视觉du处理器.zhi显示芯片,是一种 ...
- PyTorch 笔记(03)— Tensor 数据类型分类(默认数据类型、CPU tensor、GPU tensor、CPU 和 GPU 之间的转换、数据类型之间转换)
1. Tensor 数据类型 Tensor 有不同的数据类型,如下表所示,每种类型都有 CPU 和 GPU 版本(HalfTensor)除外,默认的 tensor 是数据类型是 FloatTensor ...
- Arm 发布移动端 v9 体系新架构,CPU、GPU、IP全囊括了
作者 | 夕颜 头图 | 下载于ICphoto 出品 | AI 科技大本营(ID:rgznai100) 2021年5月25日晚,Arm发布了针对移动端的Armv9体系新架构,除了公布首款全面计算(To ...
最新文章
- SpringCloud:入门介绍
- window.showModalDialog用法介绍
- Javascript 两种 function 定义的区别
- 小米手环4怎么使用_小米手环4/5 NFC添加加密门禁
- 2013年上半年 中级数据库工程师
- python的email模块_python email 模块
- 召唤新一代超参调优开源新神器,集十大主流模块于一身
- Java高级面试题!kafkastreams加时间窗口的count
- Material UI 4.10 Skeleton 骨架
- 传说中的Markov不过如此”
- 前端注释那些事儿:看懂这篇,提高代码质量So easy
- Luogu1638 逛画展
- xapofx1_5.dll怎么安装
- Ubuntu搭建FTP服务器
- stm32h743单片机嵌入式学习笔记8-avi视频解码
- Drupal7学习笔记之Theme感觉非常好转来共享啊!
- python 拆分excel单元格_python使用openpyxl excel 合并拆分单元格
- 【Unity3D】人物跟随鼠标位置
- ffmeg将多段视频合成一个视频
- 用css编写一个简单的旋转魔方