APU: CPU和GPU的合体
APU: CPU和GPU的合体
【百度百科】 链接地址:APU
------------------------------------------------------------------------------------------------------------------------------------
APU(Accelerated Processing Unit)中文名字叫加速处理器,是AMD“融聚未来”理念的产品,它第一次将中央处理器和独显核心做在一个晶片上,它同时具有高性能处理器和最新独立显卡的处理性能,支持DX11游戏和最新应用的“加速运算”,大幅提升了电脑运行效率。
PS4的APU在性能上十分的强大,拥有1.84T/s浮点的GPU,以及176GB/s速度的8GB GDDR5共享内存,在性能上可以媲美中高端的电脑独显。[1]
更关键的是,Turbo Core会自动协调CPU、GPU,让需要更多资源的能够获得更高速度。在GPU闲置的时候,它就会大幅降低其频率,去尽可能高地提升CPU频率。
如果碰到了较为繁重的图形或者视频任务,GPU就会获得更高优先级,CPU退而求其次。
如果GPU执行的是DVD视频播放等轻负载任务,那么留给CPU的加速空间就要在整体热设计功耗中排除掉GPU的那一部分。
极端情况下,如果CPU、GPU都面临繁忙的任务,或者需要携手进行OpenCL APP加速计算,此时CPU、GPU就会同时得到加速,甚至会在短时间内超过热设计功耗限制,然后再根据情况去降低CPU的频率和功耗(GPU不变),保证核心温度不致于过高。这一点倒是和Sandy Bridge上的第二代Turbo Boost有些相似。
CPU和GPU的区别
转自:
http://www.zhihu.com/question/19903344
http://ee.ofweek.com/2014-09/ART-8440-2808-28880354.html
首先需要解释CPU和GPU这两个缩写分别代表什么。CPU即中央处理器,GPU即图形处理器。其次,要解释两者的区别,要先明白两者的相同之处:两者都有总线和外界联系,有自己的缓存体系,以及数字和逻辑运算单元。一句话,两者都为了完成计算任务而设计。
两者的区别在于存在于片内的缓存体系和数字逻辑运算单元的结构差异:CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单(GPU初始时在浮点计算上一直弱于CPU)。从结果上导致CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,如分布式计算,数据压缩,人工智能,物理模拟,以及其他很多很多计算任务等。GPU由于历史原因,是为了视频游戏而产生的(至今其主要驱动力还是不断增长的视频游戏市场),在三维游戏中常常出现的一类操作是对海量数据进行相同的操作,如:对每一个顶点进行同样的坐标变换,对每一个顶点按照同样的光照模型计算颜色值。GPU的众核架构非常适合把同样的指令流并行发送到众核上,采用不同的输入数据执行。在2003-2004年左右,图形学之外的领域专家开始注意到GPU与众不同的计算能力,开始尝试把GPU用于通用计算(即GPGPU)。之后NVIDIA发布了CUDA,AMD和Apple等公司也发布了OpenCL,GPU开始在通用计算领域得到广泛应用,包括:数值分析,海量数据处理(排序,Map-Reduce等),金融分析等等。
简而言之,当程序员为CPU编写程序时,他们倾向于利用复杂的逻辑结构优化算法从而减少计算任务的运行时间,即Latency。当程序员为GPU编写程序时,则利用其处理海量数据的优势,通过提高总的数据吞吐量(Throughput)来掩盖Lantency。目前,CPU和GPU的区别正在逐渐缩小,因为GPU也在处理不规则任务和线程间通信方面有了长足的进步。另外,功耗问题对于GPU比CPU更严重。
两者的区别在于存在于片内的缓存体系和数字逻辑运算单元的结构差异:CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单(GPU初始时在浮点计算上一直弱于CPU)。从结果上导致CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,如分布式计算,数据压缩,人工智能,物理模拟,以及其他很多很多计算任务等。GPU由于历史原因,是为了视频游戏而产生的(至今其主要驱动力还是不断增长的视频游戏市场),在三维游戏中常常出现的一类操作是对海量数据进行相同的操作,如:对每一个顶点进行同样的坐标变换,对每一个顶点按照同样的光照模型计算颜色值。GPU的众核架构非常适合把同样的指令流并行发送到众核上,采用不同的输入数据执行。在2003-2004年左右,图形学之外的领域专家开始注意到GPU与众不同的计算能力,开始尝试把GPU用于通用计算(即GPGPU)。之后NVIDIA发布了CUDA,AMD和Apple等公司也发布了OpenCL,GPU开始在通用计算领域得到广泛应用,包括:数值分析,海量数据处理(排序,Map-Reduce等),金融分析等等。
简而言之,当程序员为CPU编写程序时,他们倾向于利用复杂的逻辑结构优化算法从而减少计算任务的运行时间,即Latency。当程序员为GPU编写程序时,则利用其处理海量数据的优势,通过提高总的数据吞吐量(Throughput)来掩盖Lantency。目前,CPU和GPU的区别正在逐渐缩小,因为GPU也在处理不规则任务和线程间通信方面有了长足的进步。另外,功耗问题对于GPU比CPU更严重。
CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。
于是CPU和GPU就呈现出非常不同的架构(示意图):
图片来自nVidia CUDA文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。
GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。
所以与CPU擅长逻辑控制和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。
2、很久以前,大概2000年那时候,显卡还被叫做图形加速卡。一般叫做加速卡的都不是什么核心组件,和现在苹果使用的M7协处理器地位差不多。这种东西就是有了更好,没有也不是不行,只要有个基本的图形输出就可以接显示器了。在那之前,只有一些高端工作站和家用游戏机上才能见到这种单独的图形处理器。后来随着PC的普及,游戏的发展和Windows这样的市场霸主出现,简化了图形硬件厂商的工作量,图形处理器,或者说显卡才逐渐普及起来。
想要理解GPU与CPU的区别,需要先明白GPU被设计用来做什么。现代的GPU功能涵盖了图形显示的方方面面,我们只取一个最简单的方向作为例子。
大家可能都见过上面这张图,这是老版本Direct X带的一项测试,就是一个旋转的立方体。显示出一个这样的立方体要经过好多步骤,我们先考虑简单的,想象一下他是个线框,没有侧面的“X”图像。再简化一点,连线都没有,就是八个点(立方体有八个顶点的)。那么问题就简化成如何让这八个点转起来。首先,你在创造这个立方体的时候,肯定有八个顶点的坐标,坐标都是用向量表示的,因而至少也是个三维向量。然后“旋转”这个变换,在线性代数里面是用一个矩阵来表示的。向量旋转,是用向量乘以这个矩阵。把这八个点转一下,就是进行八次向量与矩阵的乘法而已。这种计算并不复杂,拆开来看无非就是几次乘积加一起,就是计算量比较大。八个点就要算八次,2000个点就要算2000次。这就是GPU工作的一部分,顶点变换,这也是最简单的一部分。剩下还有一大堆比这更麻烦的就不说了。
GPU的工作大部分就是这样,计算量大,但没什么技术含量,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已。而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?GPU就是这样,用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。很多涉及到大量计算的问题基本都有这种特性,比如你说的破解密码,挖矿和很多图形学的计算。这些计算可以分解为多个相同的简单小任务,每个任务就可以分给一个小学生去做。但还有一些任务涉及到“流”的问题。比如你去相亲,双方看着顺眼才能继续发展。总不能你这边还没见面呢,那边找人把证都给领了。这种比较复杂的问题都是CPU来做的。
总而言之,CPU和GPU因为最初用来处理的任务就不同,所以设计上有不小的区别。而某些任务和GPU最初用来解决的问题比较相似,所以用GPU来算了。GPU的运算速度取决于雇了多少小学生,CPU的运算速度取决于请了多么厉害的教授。教授处理复杂任务的能力是碾压小学生的,但是对于没那么复杂的任务,还是顶不住人多。当然现在的GPU也能做一些稍微复杂的工作了,相当于升级成初中生高中生的水平。但还需要CPU来把数据喂到嘴边才能开始干活,究竟还是靠CPU来管的。
3、就目前的计算机架构,GPU只能称作是小众。GPU作为后来者,出现的太晚了,计算机架构已经定型,不太可能撼动 Intel 的霸主地位,而且Intel 一定会借着先天优势打压其他竞争对手。 最近bitcoin被媒体炒作的太过了,出现在了公众的视野中。媒体写新闻的那群人只要是写点和技术沾边的文章,就能暴露他们的无知,倒霉的还是无辜的群众。
笔者简单提一下为什么GPU只能算作是小众。在计算机上运行的程序从性能的角度来说大致可分为三类:(1) I/O intensive; (2) Memory intensive 以及 (3) Compute-intensive。
(1)I/O intensive的程序其性能瓶颈是I/O,也就是说程序运行的大部分时间花在了硬盘读写/网络通信上,而I/O处在计算机体系结构金字塔的最底层,速度非常慢。最近炒的很火的big data 讨论的就是这一类应用程序。几百TB 甚至到PB级别的数据往哪搁,只能放在硬盘上。一台机器容量太小CPU太少怎么办,搞几百台甚至上千台机器用网线连起来分布处理。所以这块全是I/O, 现在大的互联网公司不多搞几个上千节点的集群肯定撑不住。
(2)Memory intensive的程序其性能瓶颈在内存访问,程序中有大量的随机访问内存的操作,但是基本没有I/O, 这类程序已经比第一类程序快一个数量级了,但是和寄存器的速度还是没法比。目前大部分应用程序都属于这类。个人电脑里装的的各种软件基本就是这类,如果有点I/O, 立刻就会非常得卡。
以上提到的这两类程序的应用最广泛,涵盖了大部分有用的计算机软件,但遗憾的是GPU在这两块毫无用处, GPU只有在计算密集型的程序有些作用。I/O是瓶颈的程序,花在计算的时间可以忽略不计,再怎么用GPU加速也没用。 含有大量内存随机访问的程序也不适合在GPU上执行,大量的随机访问甚至可以使GPU的行为由并行变为串行。
什么类型的程序适合在GPU上运行?
(1)计算密集型的程序。所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。可以做一下对比,读内存的延迟大概是几百个时钟周期;读硬盘的速度就不说了,即便是SSD, 也实在是太慢了。
(2)易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构, 他有成百上千个核,每一个核在同一时间最好能做同样的事情。
满足以上两点,就可以用GPU做运算了。 不过你还得先用CUDA或者Open CL 把能在GPU上运行的程序写出来, 这也是很麻烦的,写一下就知道了。 而且GPU的架构比较特殊,要想写出高效率的程序,要花很多很多时间。笔者想说写GPU程序是一件很蛋疼的事情。
GPU在某些地方很有用,但应用面比较窄,远远没有某公司声称的那么有用。当今还是Intel的天下, 现在计算机的速度已经很快了,计算其实已经不是什么大问题。I/O才是最需要解决的问题。 记得曾经看过N家的GTC峰会,黄某人吹得神乎其神,连笔者都被感动了,多少多少T FLOPS的计算速度。 程序运行时间从100 秒 变成 1秒 其实没多重要,你倒杯水的功夫就100秒了。运行时间从100天缩短到1天才是大贡献。 前者就是GPU做的事情,后者才是我们真正需要的。
CPU与GPU合二为一 将技术与美嵌入生活
对于大多数人来说,处理器这个词并不陌生,他会出现在我们的笔记本、智能手机、游戏机以及平板电脑中。由于这些设备几乎遍及我们的生活、工作和娱乐之中,因此我们对这类处理器还是能有比较直观的认识。但在那些我们不太注意的角落,处理器技术同样在潜移默化的改变我们的生活。
当你不经意间走过一块广告显示屏时,你不会想到最新的图像技术正在让广告变得更具美感;当你在游艺场所内欢呼中奖时,你不会想到新一代3D技术正在将游戏变得更好玩;当你通过网络电视盒看蓝光大片和在线视频时,你不会想到是最新的处理器让这些小盒子充满乐趣。没错,在我们生活中那些不太在意的角落里,嵌入式处理器正在为我们打造一个全方位的数字新时代。
嵌入更美好的基因
嵌入式处理器并不是最新出现的事物,事实上,嵌入式处理器很早就出现在了各类数字终端和工业控制领域。只不过由于功耗和可靠性的限制,过去的嵌入式处理器始终无法摘掉功能单一、性能低下的帽子。但随着全新计算架构的诞生,曾经尴尬的嵌入式处理器终于露出了全新的姿态。
稍有IT知识的人都知道,AMD是全球主流x86处理器供应商之一,同时,AMD也是全球仅有的两家消费级独立图形芯片生产者之一。而当CPU与GPU合二为一,我们得到了APU。一个能够在功耗、性能、成本三方面取得全新平衡的革命性架构。
在典型的传统计算机架构中,CPU与GPU之间通过PCI-E总线进行通讯,同时,两者都必须配有相互独立的内存系统(CPU使用内存,GPU使用显存)。而两者之间的每一次通讯和协作都不可避免的要经过成百上千个时钟周期的等待,因为两套系统间存在频率差异、结构差异以及总线延迟等等因素。
而当CPU与GPU融合形成APU,整套计算系统则只需使用一套统一的内存系统,而传统的系统总线也被集成到CPU内部。这意味着所有两者之间通讯的效率都将获得质的提升。换而言之,我们得到了一套结构更简单、性能更强大、成本更低廉的计算系统。
之所以我们要花费大量笔墨在介绍APU的本质上,是因为APU的诞生为嵌入式处理器的飞跃铺平了道路。
更低成本
在这个强调交互与体验的时代,人人都喜欢复杂生动的3D图像,但增加图形性能却意味着需要集成更强悍的独立显示核心,这会显著提升整套系统的成本。而对于 AMD 嵌入式G系列APU来说,一切都变得简单。在构建拥有强大3D显示能力的嵌入式系统时,我们只需要一颗APU,一套内存;由此带来的成本降低会使每个企业主惊喜。
更强大的性能
以AMD在2014年最新发布的代号为“Steppe Eagle”的嵌入式G系列APU来看,其整体性能比上一代G系列系统级芯片解决方案提升多达53%,是包括工业控制与自动化(IC&A)应用在内的各种严苛环境的理想选择。而即使是上一代产品,我们也很难在市场上找到相称的对手。
惠普瘦客户机产品管理全球总监Jeff Groudan曾表示:“医疗、金融、教育以及零售行业对更加先进的嵌入式解决方案的需求日益增长,AMD G系列系统级芯片为惠普的瘦客户机带来更强的安全性、价值和无与伦比的性能。”
更多的功能
性能和成本当然不是新一代AMD嵌入式G系列APU的全部。AMD平台安全处理器(PSP)基于ARM TrustZone®架构,为全新AMD嵌入式G系列系统级芯片处理器注入了更强的安全特性,可保护硬件层面的敏感数据和运行不受恶意入侵破坏,是基于云计算的瘦客户机解决方案的理想选择。
更低的功耗
嵌入式设备的最核心要求是什么?当然是低功耗。低功耗意味着更省电,降低使用成本。低功耗意味着全被动散热,这是嵌入式处理器能够被塞进各种小盒子里全年无休工作的前提,低功耗意味着他能让那些依靠电池供电的设备工作更长时间。而最新一代AMD嵌入式G系列APU低至5瓦的功耗使其并不比一颗普通手机处理器更费电。
更简便的开发
嵌入式设备的整个生命周期可能只会运行少数几款软件,因此,用最简单的方法开发出最稳定、最实用的程序是对嵌入式应用的总体要求。而APU所采用标准 x86架构和各类标准的图形接口,因此,借助业界数十年积累的众多开发工具和经验,开发者可以极大的简化整个开发的流程和周期。当然,相对于嵌入式的另一大阵营——ARM来说,基于x86的开发成本也更加低廉,因为很多优秀的ARM开发者都去开发终端游戏和APP了。
嵌入未来
在每年出货的数十亿颗处理器中,有95%都是嵌入式处理器。而这些嵌入式处理器则是我们数字生活的基础。而一颗更强大、更节能、更稳定的嵌入式处理器也无疑将加速我们的数字生活体验。
三十岁之前做别人要你做的事,三十岁之后学着稀里糊涂做自己的事。