挖矿——不管是从字面意义上,还是从这个词语所代表的含意来看,这都是一件需要付出较重劳动负担的事情。在虚拟世界中亦是如此。使用计算机进行挖矿,其实就是运算一项非常复杂的数学计算,为了更快的挖矿,一般情况下,人们都会采用极快速、并且针对挖矿的数学算法进行过优化的计算设备。使用很慢的计算设备不但拖慢了运算速度,而且还会“得不偿失”,花费更多的成本。那么有没有使用很慢的计算设备实现“挖矿”的呢?

打开网易新闻 查看更多图片

还真有。实现“挖矿”本质上是实现一种数学运算,因此任何一种计算设备都能够用来“挖矿”。在那些很慢的设备上,实现算法主要是基于“炫技”的目的(甚至还有人试着使用笔和纸来进行SHA-256的矩阵运算!)。今天我们就要介绍的是一种非常“硬核”的算法:使用阿波罗飞船的导航计算机(AGC)实现算法。

打开网易新闻 查看更多图片

Ken Shirriff和他的朋友们非常幸运,拥有一台还能够正常运行的阿波罗飞船导航计算机(Apollo Guidance Computer AGC)。这台1960年代的导航计算机和现在的计算机系统有着非常不同的系统结构:由5600余个NOR(或非门)组成的逻辑结构,能够组合成为寄存器、加法器和逻辑电路等。这样的一台计算机能够实现每秒钟四万次数学计算——虽然这样的算力能够制导飞船从地球飞向月球,再飞回来,但这样的计算机甚至都不能与我们手中的智能机相提并论。在这样的计算机上实现一个数学算法,可行吗?

打开网易新闻 查看更多图片

对付这样的任务,首先的一个拦路虎是指令集。作为一台六十年前的计算机,其指令集缺乏很多现代计算机所需要的功能。比如它没有堆栈,这就使得调用子程序时,编程者需要手动配置所有的子函数的返回值存储位置和中断产生时现场保护的功能。很多汇编指令还存在和现有的算法不兼容、不安全的地方;在架构上,AGC也存在着不足之处——这是一台只有16位(包括一位补码)的数据形式的计算机。而SHA-256算法的计算中需要使用32位无符号数,因此算法需要进行适当地改进;AGC的存储器也是个问题,程序内存使用磁芯存储器,而RAM仅有4K字节。对于SHA-256的矩阵运算来说是个不小的挑战。更不要提连一个简单的移位操作都要使用自己实现的函数……

打开网易新闻 查看更多图片

不管怎样,费尽千辛万苦,Ken还是将SHA-256运算的程序移植到了飞控计算机上。最终运算的结果能够显示在飞控计算机所配的DSKY(显示和键盘输入控制板)上。在60年前,宇航员使用这样的面板控制整艘飞船,而现在,挖矿的结果将会被显示在上面。这样的一台计算机计算一个正确的区块需要10.3秒时间,但由于很多“矿场”的存在,想要使用这样的计算机产生一块无人发现过的区块所花费的时间可能超过宇宙的寿命——看来指望这样的计算机算出区块是不现实的了,不过从炫技的目标来看,它成功了,成功得一塌糊涂!

本文为 无线电杂志 微信公众平台文章。详细内容及高清大图请查阅《无线电》杂志。版权所有,欢迎个人转发至朋友圈。公众号、报刊等转载请联系授权。

…………………………………………………