为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚至破解密码?

作者:冰糖葫芦娃
链接:https://www.zhihu.com/question/21231074/answer/17598768
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

为什么二者会有如此的不同呢?首先要从CPU和GPU的区别说起。

CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。

于是CPU和GPU就呈现出非常不同的架构(示意图):

图片来自nVidia CUDA文档。其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。

GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。

所以与CPU擅长逻辑控制和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。

作者:rabbit
链接:https://www.zhihu.com/question/21231074/answer/20729629
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

在计算机上运行的程序从性能的角度来说大致可分为三类:(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擅长的是且仅是成规模的并行计算,而不能并行执行的任务或者与控制相关的任务都与GPU离得很远。GPU只是个计算器,计算密集型的并行计算任务可以分配给它,但CPU是整个计算机进行计算与控制的核心

猜你喜欢

转载自blog.csdn.net/shenwansan_gz/article/details/110930163