通俗易懂告诉你CPU/GPU是什么?

通俗易懂告诉你CPU/GPU是什么?

CPU

CPU( Central Processing Unit, 中央处理器)就是机器的“大脑”,也是布局谋略、发号施令、控制行动的“总司令官”。

CPU的结构主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元(CU, Control Unit)、寄存器(Register)、高速缓存器(Cache)和它们之间通讯的数据、控制及状态的总线。

简单来说就是:计算单元、控制单元和存储单元,架构如下图所示:

img
图:CPU微架构示意图

什么?架构记不住?来,我们换种表示方法:

img

图:CPU微架构示意图(改)

嗯,大概就是这个意思。

从字面上我们也很好理解,计算单元主要执行算术运算、移位等操作以及地址运算和转换;存储单元主要用于保存运算中产生的数据以及指令等;控制单元则对指令译码,并且发出为完成每条指令所要执行的各个操作的控制信号。

所以一条指令在CPU中执行的过程是这样的:读取到指令后,通过指令总线送到控制器(黄色区域)中进行译码,并发出相应的操作控制信号;然后运算器(绿色区域)按照操作指令对数据进行计算,并通过数据总线将得到的数据存入数据缓存器(大块橙色区域)。过程如下图所示:

img

图:CPU执行指令图

是不是有点儿复杂?没关系,这张图完全不用记住,我们只需要知道,CPU遵循的是冯诺依曼架构,其核心就是:存储程序,顺序执行

讲到这里,有没有看出问题,没错——在这个结构图中,负责计算的绿色区域占的面积似乎太小了,而橙色区域的缓存Cache和黄色区域的控制单元占据了大量空间。

高中化学有句老生常谈的话叫:结构决定性质,放在这里也非常适用。

因为CPU的架构中需要大量的空间去放置存储单元(橙色部分)和控制单元(黄色部分),相比之下计算单元(绿色部分)只占据了很小的一部分,所以它在大规模并行计算能力上极受限制,而更擅长于逻辑控制。

另外,因为遵循冯诺依曼架构(存储程序,顺序执行),CPU就像是个一板一眼的管家,人们吩咐的事情它总是一步一步来做。但是随着人们对更大规模与更快处理速度的需求的增加,这位管家渐渐变得有些力不从心。

于是,大家就想,能不能把多个处理器放在同一块芯片上,让它们一起来做事,这样效率不就提高了吗?

没错,GPU便由此诞生了。

GPU

在正式讲解GPU之前,我们先来讲讲上文中提到的一个概念——并行计算。

并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来共同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。

并行计算可分为时间上的并行和空间上的并行。

时间上的并行是指流水线技术,比如说工厂生产食品的时候分为四步:清洗-消毒-切割-包装。

如果不采用流水线,一个食品完成上述四个步骤后,下一个食品才进行处理,耗时且影响效率。但是采用流水线技术,就可以同时处理四个食品。这就是并行算法中的时间并行,在同一时间启动两个或两个以上的操作,大大提高计算性能。

img

图:流水线示意图

空间上的并行是指多个处理机并发的执行计算,即通过网络将两个以上的处理机连接起来,达到同时计算同一个任务的不同部分,或者单个处理机无法解决的大型问题。

比如小李准备在植树节种三棵树,如果小李1个人需要6个小时才能完成任务,植树节当天他叫来了好朋友小红、小王,三个人同时开始挖坑植树,2个小时后每个人都完成了一颗植树任务,这就是并行算法中的空间并行,将一个大任务分割成多个相同的子任务,来加快问题解决速度。

所以说,如果让CPU来执行这个种树任务的话,它就会一棵一棵的种,花上6个小时的时间,但是让GPU来种树,就相当于好几个人同时在种。

GPU全称为Graphics Processing Unit,中文为图形处理器,就如它的名字一样,GPU最初是用在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。

为什么GPU特别擅长处理图像数据呢?这是因为图像上的每一个像素点都有被处理的需要,而且每个像素点处理的过程和方式都十分相似,也就成了GPU的天然温床。

GPU简单架构如下图所示:

img

图:GPU微架构示意图

从架构图我们就能很明显的看出,GPU的构成相对简单,有数量众多的计算单元和超长的流水线,特别适合处理大量的类型统一的数据。

但GPU无法单独工作,必须由CPU进行控制调用才能工作。CPU可单独作用,处理复杂的逻辑运算和不同的数据类型,但当需要大量的处理类型统一的数据时,则可调用GPU进行并行计算。

注:GPU中有很多的运算器ALU和很少的缓存cache,缓存的目的不是保存后面需要访问的数据的,这点和CPU不同,而是为线程thread提高服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram。

再把CPU和GPU两者放在一张图上看下对比,就非常一目了然了。

img

GPU的工作大部分都计算量大,但没什么技术含量,而且要重复很多很多次。

借用知乎上某大神的说法,就像你有个工作需要计算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已;而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?

GPU就是用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。

但有一点需要强调,虽然GPU是为了图像处理而生的,但是我们通过前面的介绍可以发现,它在结构上并没有专门为图像服务的部件,只是对CPU的结构进行了优化与调整,所以现在GPU不仅可以在图像处理领域大显身手,它还被用来科学计算、密码破解、数值分析,海量数据处理(排序,Map-Reduce等),金融分析等需要大规模并行计算的领域。

所以GPU也可以认为是一种较通用的芯片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql正在加载_mysql 数据库基本操作

CREATE TABLE classes(id INT PRIMARY KEY AUTO_INCREMENT COMMENT班级表id,name VARCHAR(20) COMMENT班级名称);运行DESCRIBE classes;--------------------------------------------------------| Field | Type | Null | Key | Default | Extra |---------------------------…

CPU和GPU的区别是什么?

CPU是一种微处理器,用于执行程序根据操作(如算术、逻辑、控制和输入-输出)给出的指令。相反,GPU最初设计用于在电脑游戏中渲染图像。CPU强调低延迟,而GPU则强调高吞吐量。 CPU Vs GPU 内容 比较表格定义区别关键不同结论 1. 比较表格 从上…

乌班图配置mysql Java_Ubuntu准备+MySQL+Java

Linux服务器准备1 . 安装Ubuntu系统2 . 修改root用户密码sudo passwd root #修改root账户密码logout # 退出当前账号并重新登录#如果需要关机使用 halt 命令3 . 更新所有Linux的开发包apt-get update4 . 配置相关的编译包apt-get install gcc libpcre3 libpcrecpp* libpcre3-de…

java截取指定字符串中的某段字符

利用字符串的substring函数来进行截取。 其中,substring函数有两个参数: 1、第一个参数是开始截取的字符位置。(从0开始) 2、第二个参数是结束字符的位置1。(从0开始) indexof函数的作用是查找该字符串中…

JSON中的JSON.parseArray()、JSON.parseObject()、JSON.tojsonString()

1、JSON.parseObject和JSON.toJSONString JSON.parseObject,是将Json字符串转化为相应的对象;JSON.toJSONString则是将对象转化为Json字符串。在前后台的传输过程中,JSON字符串是相当常用的,这里就不多介绍其功能了,直…

mysql是gplv3,Affero-GPL和GPLv3之间的区别

解决方案Assume the following:You are developing a server side application in GPL. Now this application serves HTML and not an executable which is directly executed on your machine. That means that another guy could take the GPL code, adapt it and does not …

mysql cluster proxy_GitHub - freedaxin/maya: a mysql cluster proxy powered by node.js

maya安装node.js依赖node v0.8最新版,暂不支持更高的node版本,此处以0.8.7版本为例。root安装(官方要求python2.5.2以上)tar -zxf node-v0.8.7.tar.gzcd node-v0.8.7./configure --prefix/usr/local/sinasrv2/makemake install在root环境变量中增加如下两…

常见HTTP状态码(200、301、302、500等)解说

对网站管理工作者来说有个词不陌生,HTTP状态码,它是用以表示网页服务器HTTP响应状态的3位数字代码。状态码的第一个数字代表了响应的五种状态之一。 1XX系列:指定客户端应相应的某些动作,代表请求已被接受,需要继续处…

linux c语言编写聊天室mysql_Linux平台上用C语言实现与MySQL数据库的连接

测试代码如下://查询操作#include #include #include #define HOST "localhost"#define USERNAME "用户名"#define PASSWORD "密码"#define DATABASE "PublicResourcesDB"int main(void){MYSQL mysql;MYSQL_ROW row;MYSQL_…

java开发安装mysql_从零开始搭建Java开发环境第二篇:如何在windows10里安装MySQL

1 下载安装包1.1 压缩包[外链图片转存失败(img-oesO8K09-1566652568838)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw "点击并拖拽以移动")]1.2 安装包使用安装包安装则无需后续步骤[外链图片转存失败(img-Y3x59iO4-15666525…

java获取json中某个字段

import com.alibaba.fastjson.JSONObject; public class JsonTest {public static void main(String[] args) {// json串(以自己的为准)String str "{"id":"75","shoppingCartItemList":[{"id":"407","num"…

abap数据类型转换_ABAP 中JSON格式的转换与解析

正文RT,JSON是当今十分流行的一种轻量数据格式,广泛地应用于各种数据交换场景中。本文会介绍一种比较简单的将ABAP中的数据转换为JSON格式的方法。(如果你是因为引号的问题搜索到了这篇文章,请直接拉到底部“其它部分”)序列化使用cl_trex_js…

java解析多层嵌套json字符串

java解析多层嵌套json字符串 java分别解析下面两个json字符串 package jansonDemo;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject;public class TestJSON {/*** JSON实际上也是键值对("…

JVM中的五大内存区域划分详解

一、快速扫盲 1. JVM是什么 JVM是Java Virtual Machine的缩写,即咱们经常提到的Java虚拟机。虚拟机是一种抽象化的计算机,有着自己完善的硬件架构,如处理器、堆栈等,具体有什么咱们不做了解。目前我们只需要知道想要运行Java文件…

编写并调试一个单道处理系统的作业调度模拟程序_操作系统系列(2):操作系统发展历史...

用户需求的提升和硬件技术的发展,是操作系统发展的必要条件和基础。计算机的发展经历了4个阶段,电子管计算机(1945-1955)、晶体管计算机(1955-1965)、集成电路计算机(1965-1980)、大规模集成电路计算机(1980-至今)。因此,伴随着计算机硬件的更…

方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

方法区(落地实现jdk7永久代,jdk8元空间),元空间并不在虚拟机中,而是使用本地内存,它和堆在逻辑上是连续的,但在物理上是不连续的,所以也叫非堆。 1、此区域是线程共享的。储存已加载…

mysql force index报错_新特性解读 | MySQL 8.0 索引特性4-不可见索引

MySQL 8.0 实现了索引的隐藏属性。当然这个特性很多商业数据库早就有了,比如ORACLE,在11g中就实现了。我来介绍下这个小特性。介绍INVISIBLE INDEX,不可见索引或者叫隐藏索引。就是对优化器不可见,查询的时候优化器不会把她作为备…

关于Java成员变量、局部变量、方法,在JVM的内存空间分配

1、变量类型 2、类的结构 下面是一般类的结构 //类体属性状态(即:类体变量方法) public class 类名{ //类名最好首字母大写的英文String name; //在方法体外,所以是成员变量//下面是一个main方法(程序入口的主方法)public static…

python内置函数详解总结篇_Python内置函数详解——总结篇

数学运算(7个)类型转换(24个)序列操作(8个)对象操作(7个)反射操作(8个)变量操作(2个)交互操作(2个)文件操作(1个)编译执行(4个)装饰器(3个)数学运算abs:求数值的绝对值>>> abs(-2)2divmod:返回两个数值的商和余数>>> divmod(5,2)(2, 1…

Java多线程中static变量的使用

Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果? Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果?仅仅是多耗资源还是会引发异常? 不会耗资源 也不会引发异常 而是程序出现逻辑错误,…