『学概念找员外』CPU和GPU挖矿
CPU挖矿
第一代挖矿工作都是在普通电脑上完成的,也就是用通用中央处理器(CPU)来进行运算。事实上,CPU挖矿的工作就像如下代码所示的逻辑那样简单,也就是说,矿工简单地按照线性的方式尝试所有的临时随机数,在软件中进行SHA-256的运算,并检查结果确认是否找到一个有效区块。请注意,正如我们之前提到过的,这段代码要进行两次SHA-256运算。
TARGET = (65535 << 208) / DIFFICULTY;
coinbase_nonce = 0;
while(1){
header = makeBlockHeader(transactions, coinbase_nonce);
for(header_nonce = 0;header_nonce < (1 << 32)header_nonce++){
if(SHA256(SHA256(makeBlock(header,header_noonce)))< TARGET)
break; //block found!
};
coinbase_nonce++;
}
普通电脑运行这段代码到底有多快?一台高端的个人桌面电脑,每秒可以计算大约2千万次哈希函数(20MH/s),按照这个速度,根据2015年早期的难度水平(2的67次方 ),大概需要几十万年来找到一个有效区块。毫不夸张地说,挖矿真的非常困难!如今使用一个普通电脑用CPU挖比特币,在目前的难度下已经无利可图了。在过去的几年里,用CPU挖矿的旷工可能会非常失望地发现,他们永远不可能通过挖矿赚到钱,因为他们不了解比特币是如何运行的。
GPU挖矿
第二代矿工意识到用CPU挖矿是在做无用功,他们开始用显卡或者图形处理器(GPU)来挖。
几乎每一个现代个人电脑都有内置的GPU以支持高性能图像处理,这些GPU都有高吞吐量和高并行处理功能,这两点对比特币挖矿都非常有利,比特币挖矿存在大量的并行处理,因为你需要同时用不同的临时随机数计算多个哈希值。2010年,有一门计算机语言开放运算语言(Open Computing Language,简称OpenCL)诞生了,这是一个可以使GPU进行非图像处理类工作的通用语言。OpenCL是一门高级语言,人们可以用它在显卡上做很多种类型的运算,而且速度比在CPU上的要快。这给通过GPU来进行比特币挖矿铺平了道路。
当时,通过显卡来挖矿有好几个吸引人的地方。首先,买显卡很容易,而且哪怕是业余爱好者也能轻松配置显卡。你可以在网上或大多数专营电子产品的商场里买到它。对大众来说,显卡是最容易获得的高端硬件设备。其次,显卡还有一些格外适合比特币挖矿的特性:显卡的并行性设计使其具备很多算术逻辑单元(Arithmetic Logic Units,简称ALU),可以同时进行SHA-256运算。有一些GPU还特别集成了针对位移操作的指令,这对SHA-256的运算非常有用。
大多数显卡都可以超频,这意味着如果你愿意承担显卡过热或者出现故障的风险的话,你可以让显卡以高于设计频率的频率更快地运行。超频是游戏玩家们渴望了多年的特性。对于比特币挖矿来说,超频会增加收益,即使超频可能引起一些运算错误。举例来说,将显卡超频50%,也就是说运算速度加快50%,同时可能会造成SHA-256运算出错概率增加30%。如果显卡错误地接受了一个不正确的运算结果——虽然不太可能发生——你还可以通过CPU来进行二次确认。然而,你可能永远都不会知道一个正确的运算结果被错过了。但是通过超频产生的运算速度的增加,完全可以抵消由于显卡运行错误产生的正确输出减少,这样超频还是合算的(从经济效益上来说)。在上述的例子中,超频使得吞吐量增加到原来的1.5倍,而运算成功率降低到了0.7,那么乘积就是1.05,也就是意味着超频使得你的获利增加了5%。为了最大化收益,人们花了很多时间去优化最佳的超频比例。
最后,你可以通过一个CPU和一个主板加载许多个GPU。然后你便可以在安装了多个GPU的电脑上运行比特币节点,监听网络收集交易,组装区块,同时用多个GPU进行SHA-256的运算,以更快地找到正确的临时随机数及其对应的有效区块。很多人创造性地发明了很多有趣的“自制型”硬件设置,如上图所示,用一个CPU来驱动很多个GPU。这种情况仅发生在比特币的早期,当时大多数矿工都是比特币的爱好者,他们并不具备服务器搭建及运营经验。但是他们还是做了很多巧妙的设计,使得大量的GPU可以在一个较小的空间里同时运行,同时还解决了散热的问题。
网友评论