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

作者:Cascade
链接:https://www.zhihu.com/question/21231074/answer/20701124
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

想要理解GPU与CPU的区别,需要先明白GPU被设计用来做什么。现代的GPU功能涵盖了图形显示的方方面面,我们只取一个最简单的方向作为例子。

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


大家可能都见过上面这张图,这是老版本Direct X带的一项测试,就是一个旋转的立方体。显示出一个这样的立方体要经过好多步骤,我们先考虑简单的,想象一下他是个线框,没有侧面的“X”图像。再简化一点,连线都没有,就是八个点(立方体有八个顶点的)。那么问题就简化成如何让这八个点转起来。首先,你在创造这个立方体的时候,肯定有八个顶点的坐标,坐标都是用向量表示的,因而至少也是个三维向量。然后“旋转”这个变换,在线性代数里面是用一个矩阵来表示的。向量旋转,是用向量乘以这个矩阵。把这八个点转一下,就是进行八次向量与矩阵的乘法而已。这种计算并不复杂,拆开来看无非就是几次乘积加一起,就是计算量比较大。八个点就要算八次,2000个点就要算2000次。这就是GPU工作的一部分,顶点变换,这也是最简单的一部分。剩下还有一大堆比这更麻烦的就不说了。

GPU的工作大部分就是这样,计算量大,但没什么技术含量,而且要重复很多很多次。就像你有个工作需要算几亿次一百以内加减乘除一样,最好的办法就是雇上几十个小学生一起算,一人算一部分,反正这些计算也没什么技术含量,纯粹体力活而已。而CPU就像老教授,积分微分都会算,就是工资高,一个老教授资顶二十个小学生,你要是富士康你雇哪个?GPU就是这样,用很多简单的计算单元去完成大量的计算任务,纯粹的人海战术。这种策略基于一个前提,就是小学生A和小学生B的工作没有什么依赖性,是互相独立的。很多涉及到大量计算的问题基本都有这种特性,比如你说的破解密码,挖矿和很多图形学的计算。这些计算可以分解为多个相同的简单小任务,每个任务就可以分给一个小学生去做。但还有一些任务涉及到“流”的问题。比如你去相亲,双方看着顺眼才能继续发展。总不能你这边还没见面呢,那边找人把证都给领了。这种比较复杂的问题都是CPU来做的。

总而言之,CPU和GPU因为最初用来处理的任务就不同,所以设计上有不小的区别。而某些任务和GPU最初用来解决的问题比较相似,所以用GPU来算了。GPU的运算速度取决于雇了多少小学生,CPU的运算速度取决于请了多么厉害的教授。教授处理复杂任务的能力是碾压小学生的,但是对于没那么复杂的任务,还是顶不住人多。当然现在的GPU也能做一些稍微复杂的工作了,相当于升级成初中生高中生的水平。但还需要CPU来把数据喂到嘴边才能开始干活,究竟还是靠CPU来管的。

至于如何将挖矿和破解密码这种事情分成小学生都能做的简单任务,就是程序员的工作了。所以以后谁再跟你说程序员的工作就是体力活,你可以直接抽他。
 
评论:做作业的时候算到立方体的变换矩阵,纯体力活。
   GPU擅长的是大规模并发计算。
 
作者:Cascade
链接:https://www.zhihu.com/question/21695362/answer/19055180
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
普通的显示器色深是8bit的,按彩色的算,RGB通道都是用8bit来表示。所以范围都是0-255。而当RGB三个值相等的时候,这个像素就是灰的。也就是一共256个灰度级。而医用的一般都是10bit,需要支持10bit输出的显卡。它能显示出来1024个灰度级。而放射影像数据一般也都是8bit以上的。比如CT与核磁共振的影像每个像素有16bit 。这和其他图像领域使用的RAW格式差不多,可以记录更多的信息。他通过一种被称为调窗的算法,把数据映射到可显示的范围内。更高的显示范围可以支持更好的效果。比如本来灰度接近的两个组织,在普通显示器上可能就被映射到一个值内了。用这种显示器能看到普通显示器看不到的细节。
 
评论:原始数据的边缘都是锯齿状的,因为CT的采样原来就是离散采样的。