当前位置:清远传媒网 > 科技 > 业界 > 正文

ELISUN-优化显卡性能,抵制ASIC,ProgPoW算法到底是什么

清远传媒 www.gdqynews.com   发布时间:2019-09-05 13:45:13   作者:yejie

  ELISUN说起了ProgPoW是一种PoW算法,旨在缩小与专用的ASIC之间的效率差距。ELISUN发现它几乎利用了标准硬件(GPU)的所有性能,并预先为以太坊网络中最常见的硬件进行了调整和优化。

  ELISUN自从首个比特币挖矿ASIC问世以来就出现了很多新的PoW算法,旨在维持“ASIC抗性”。而所谓的“ASIC抗性”则在于抵制PoW挖矿算力的中心化,防止采用这类算法的币种被少数参与者操控。

  本文将首先介绍ProgPoW这个新算法以及其为“ASIC抗性”带来的影响。另外,文章还会分析不同的PoW算法在硬件中的使用状况,并作出比较。最后,我们会通过分析代码来谈一谈ProgPoW的部署方式。

  简单介绍一下ProgPoW

  ProgPoW的设计目标就是要让这个算法的需求与显卡相匹配:如果该算法要部署在特定的ASIC上,那么与显卡相比,其效率提升幅度并不大。

  ProgPoW的主要特点是:

  -将keccak_f1600(64位字)改为keccak_f800(32位字)来减少对总算力的影响

  -增加混合状态

  -在主循环中添加随机数学序列

  -添加支持随机地址的低延时、小规模的缓存读取

  -将DRAM(动态随机存取存储器)读取从128字节增加到256字节

  尽管ASIC也可以部署这个代码,但在效率方面几乎没有任何帮助。大多数显卡都需要支持上述特点。唯一可优化的部分在于:移除图形管线(显示、几何引擎、表面纹理等)以及浮点数学。

  这将提高大约1.1-1.2倍的效率,比Ethash(2倍)或者Cryptonight(50倍)要少得多。

  标准硬件的PoW应用概述

  随着大型矿池的不断发展,形成了少数矿池控制大量算力的局面,因为只有加入这些矿池,小矿工才能获得更稳定的经济收益。虽然有些人认为大型的集中式矿池违背了“ASIC抗性”,但有一点很重要,即基于ASIC的币种事实上反而更加中心化,原因如下:

  1.不存在自然的分布:除了挖矿之外,这类专业硬件不会创造其它经济目的,因此大多数人不会持有这类硬件。

  2.没有后备组织:当价格波动性较大以及容易受到操控的时候,没有后备的硬件或者利益相关方可以入场。

  3.准入门槛较高:入场较早的矿工已经非常富有,他们可以在未知的新币种上投入资金和生态资源。因此,通过挖矿进行的初始代币分配存在局限性,可能导致中心化的“经济偏差”。

  4.委托中心化 VS部署中心化:虽然矿池的中心化是用户委托造成的,但硬件的单一化则不是:只有这种硬件的特定买家才能参与挖矿,因此不可能在短时间内剥夺矿池的控制权。

  5.即使采用去中心化的挖矿方式,也很难实现去中心化的控制:一旦大型ASIC制造商参与进来,设计后门硬件就变得毫无意义。在市场中保证透明和公平对ASIC制造商来说没有任何好处。

  尽管维持“ASIC抗性”的这一目标是非常有价值的,但“ASIC抗性”这个概念是存在谬误的。CPU(中央处理器)和GPU(显卡)本身就是ASIC。理论上来说,任何可以在商用ASIC(CPU或GPU)上运作的算法都能够部署特定的ASIC。部分算法甚至被刻意做成是“ASIC友好型”——部署ASIC后的挖矿效率远远高于运行普通硬件的同类算法。这一现象对于专业的ASIC矿机制造商来说极具吸引力。

  因此,ASIC抗性指的是:专业的硬件和普及度及应用度更高的硬件之间的效率差距。定制和通用硬件之间的效率差越小就意味着抗性越强,算法也就越好。这种效率差是衡量PoW算法质量的合理标准。效率意味着绝对的性能、效能功耗比或者性价比——这几点之间都是高度相关的。如果一家公司生产且控制的ASIC效率极高,那么他们就能够控制51%的网络算力,就很可能发动攻击。

  PoW算法一览

  SHA256(部署ASIC后挖矿效率增长约1000倍)

  SHA算法是一系列的简单数学运算——加法、逻辑和旋转运算。

  处理CPU或GPU的单点运算需要获取并解码一条指令,从寄存器文件中获取数据,执行这条指令,然后把结果写到寄存器文件中。这个过程需要大量的时间和资源。

  在ASIC中实现的单点运算需要少量的晶体管和导线。这意味着每个单独的操作只需要消耗极少的功率、空间或时间。通过列出所需操作的序列就可以构建散列核心(hashing core)。

  这个散列核心可以在短时间内执行操作序列,与CPU和GPU相比,所需消耗的功率和空间也更少。比特币ASIC由许多相同的散列核心和一些最小的芯片外通信组成。

  Scrypt和NeoScrypt(部署ASIC后挖矿效率增长约1000倍)

  从算法和位操作上来看,Scrypt和NeoScrypt与SHA类似。不幸的是,采用这类算法的币种,例如莱特币,他们的PoW挖矿算法只使用一种容量介于32kb和128kb之间的暂存器。这个暂存器的容量非常小,非常适合ASIC,因此这个算法的ASIC部署与SHA类似,都会造成效率的大幅提升。

  X11和X16R(部署ASIC后挖矿效率增长约1000倍)

  X11(以及类似的X系列)要求11个独一无二的散列核心以固定的顺序排列。每个散列核心的效率都和单个SHA核心类似,因此从总体设计上来看,两者的效率增长依然类似。

  X16R要求多个散列核心通过简单定序状态机进行互动。每个单独的核心都会有类似的效率增长,测序逻辑将花费最少的功率、空间以及时间。

  Baikal BK-X就是一种包含多个散列核心以及一个可编程定序器的ASIC,其已经进行了升级以支持哈希排列顺序不同的新算法。

  Equihash(部署ASIC后挖矿效率增长约100倍)

  150mb的状态(state)很大,但是通过ASIC是有可能实现的。通过ASIC可以快速完成位串的读出(binning)、排序和对比。

  Cuckoo Cycle(部署ASIC后挖矿效率增长约100倍)

  一旦发生时间/内存权衡攻击(Time/Memory Tradeoff attacks),芯片所需状态量就不明确了。一个专业的图遍历(graph traversal)核心和SHA计算核心的效率增长类似。

  CryptoNight(部署ASIC后挖矿效率增长约50倍)

  与Scrypt相比,CryptoNight做的计算要少得多,需要2mb的暂存器(没有已知的时间/内存权衡攻击)。这个大容量的暂存器将会主导ASIC部署,限制散列核心的数量以及ASIC的绝对性能。ASIC几乎完全由片上SRAM(静态随机存储器)组成。

  Ethash(部署ASIC后挖矿效率增长约2倍)

  由于大容量DAG(数据库可用性组)的存在,Ethash需要外部存储。然而,它只需要这一点——需要对内存加载结果进行计算的情况很少。因此,ASIC可以从一定程度上消除GPU的复杂性和能耗,只需要形成一个连接到小型计算引擎的内存接口。

  ProgPoW算法演练

  这里生成的DAG和Ethash中的完全一样。唯一的区别是生成了额外的PROGPOW_SIZE_CACHE值的数据,这些数据将驻留在L1缓存中,而不是在framebuffer(帧缓存)中。

  ProgPoW可以采用以下参数进行调试,相关设置已经针对一系列通用GPU进行了调整:

  优化显卡功能,抵抗ASIC,ProgPoW算法究竟是什么

  ProgPoW是一种PoW算法,旨在缩小与专用的ASIC之间的功率距离。它简直利用了规范硬件(GPU)的一切功能,并预先为以太坊网络中最常见的硬件进行了调整和优化。

  algorithm

  自从首个比特币挖矿ASIC面世以来就呈现了许多新的PoW算法,旨在保持“ASIC抗性”。而所谓的“ASIC抗性”则在于抵抗PoW挖矿算力的中心化,避免选用这类算法的币种被少数参加者操控。

  本文将首要介绍ProgPoW这个新算法以及其为“ASIC抗性”带来的影响。别的,文章还会剖析不同的PoW算法在硬件中的运用状况,并作出比较。最终,咱们会经过剖析代码来谈一谈ProgPoW的布置方法。

  简略介绍一下ProgPoW

  ProgPoW的规划方针便是要让这个算法的需求与显卡相匹配:假如该算法要布置在特定的ASIC上,那么与显卡比较,其功率进步起伏并不大。

  ProgPoW的首要特色是:

  -将keccak_f1600(64位字)改为keccak_f800(32位字)来削减对总算力的影响

  -增加混合状况

  -在主循环中增加随机数学序列

  -增加支撑随机地址的低延时、小规模的缓存读取

  -将DRAM(动态随机存取存储器)读取从128字节增加到256字节

  虽然ASIC也能够布置这个代码,但在功率方面简直没有任何协助。大多数显卡都需求支撑上述特色。仅有可优化的部分在于:移除图形管线(显现、几许引擎、外表纹路等)以及浮点数学。

  这将进步大约1.1-1.2倍的功率,比Ethash(2倍)或许Cryptonight(50倍)要少得多。

  规范硬件的PoW运用概述

  跟着大型矿池的不断发展,构成了少数矿池操控很多算力的局势,因为只要参加这些矿池,小矿工才干取得更安稳的经济收益。虽然有些人以为大型的集中式矿池违反了“ASIC抗性”,但有一点很重要,即根据ASIC的币种事实上反而愈加中心化,原因如下:

  1.不存在天然的散布:除了挖矿之外,这类专业硬件不会发明其它经济意图,因而大多数人不会持有这类硬件。

  2.没有后备安排:当价格波动性较大以及简略遭到操控的时分,没有后备的硬件或许利益相关方能够进场。

  3.准入门槛较高:进场较早的矿工现已十分赋有,他们能够在不知道的新币种上投入资金和生态资源。因而,经过挖矿进行的初始代币分配存在局限性,或许导致中心化的“经济误差”。

  4.托付中心化 VS布置中心化:虽然矿池的中心化是用户托付构成的,但硬件的单一化则不是:只要这种硬件的特定买家才干参加挖矿,因而不或许在短时刻内掠夺矿池的操控权。

  5.即便选用去中心化的挖矿方法,也很难完结去中心化的操控:一旦大型ASIC制造商参加进来,规划后门硬件就变得毫无意义。在商场中确保通明和公正对ASIC制造商来说没有任何优点。

  虽然保持“ASIC抗性”的这一方针是十分有价值的,但“ASIC抗性”这个概念是存在错误的。CPU(中央处理器)和GPU(显卡)自身便是ASIC。理论上来说,任何能够在商用ASIC(CPU或GPU)上运作的算法都能够布置特定的ASIC。部分算法乃至被故意做成是“ASIC友爱型”——布置ASIC后的挖矿功率远远高于运转一般硬件的同类算法。这一现象关于专业的ASIC矿机制造商来说极具吸引力。

  因而,ASIC抗性指的是:专业的硬件和遍及度及使费用更高的硬件之间的功率距离。定制和通用硬件之间的功率差越小就意味着抗性越强,算法也就越好。这种功率差是衡量PoW算法质量的合理规范。功率意味着肯定的功能、效能功耗比或许性价比——这几点之间都是高度相关的。假如一家公司出产且操控的ASIC功率极高,那么他们就能够操控51%的网络算力,就很或许发起进犯。

  PoW算法一览

  SHA256(布置ASIC后挖矿功率增加约1000倍)

  SHA算法是一系列的简略数学运算——加法、逻辑和旋转运算。

  处理CPU或GPU的单点运算需求获取并解码一条指令,从寄存器文件中获取数据,履行这条指令,然后把成果写到寄存器文件中。这个进程需求很多的时刻和资源。

  在ASIC中完结的单点运算需求少数的晶体管和导线。这意味着每个独自的操作只需求耗费很少的功率、空间或时刻。经过列出所需操作的序列就能够构建散列中心(hashing core)。

  这个散列中心能够在短时刻内履行操作序列,与CPU和GPU比较,所需耗费的功率和空间也更少。比特币ASIC由许多相同的散列中心和一些最小的芯片外通讯组成。

  Scrypt和NeoScrypt(布置ASIC后挖矿功率增加约1000倍)

  从算法和位操作上来看,Scrypt和NeoScrypt与SHA相似。不幸的是,选用这类算法的币种,例如莱特币,他们的PoW挖矿算法只运用一种容量介于32kb和128kb之间的暂存器。这个暂存器的容量十分小,十分合适ASIC,因而这个算法的ASIC布置与SHA相似,都会构成功率的大幅进步。

  X11和X16R(布置ASIC后挖矿功率增加约1000倍)

  X11(以及相似的X系列)要求11个绝无仅有的散列中心以固定的次序摆放。每个散列中心的功率都和单个SHA中心相似,因而从总体规划上来看,两者的功率增加仍然相似。

  X16R要求多个散列中心经过简略定序状况机进行互动。每个独自的中心都会有相似的功率增加,测序逻辑将花费最少的功率、空间以及时刻。

  Baikal BK-X便是一种包括多个散列中心以及一个可编程定序器的ASIC,其现已进行了晋级以支撑哈希摆放次序不同的新算法。

  Equihash(布置ASIC后挖矿功率增加约100倍)

  150mb的状况(state)很大,可是经过ASIC是有或许完结的。经过ASIC能够快速完结位串的读出(binning)、排序和比照。

  Cuckoo Cycle(布置ASIC后挖矿功率增加约100倍)

  一旦发生时刻/内存权衡进犯(Time/Memory Tradeoff attacks),芯片所需状况量就不清晰了。一个专业的图遍历(graph traversal)中心和SHA核算中心的功率增加相似。

  CryptoNight(布置ASIC后挖矿功率增加约50倍)

  与Scrypt比较,CryptoNight做的核算要少得多,需求2mb的暂存器(没有已知的时刻/内存权衡进犯)。这个大容量的暂存器将会主导ASIC布置,约束散列中心的数量以及ASIC的肯定功能。ASIC简直彻底由片上SRAM(静态随机存储器)组成。

  Ethash(布置ASIC后挖矿功率增加约2倍)

  因为大容量DAG(数据库可用性组)的存在,Ethash需求外部存储。但是,它只需求这一点——需求对内存加载成果进行核算的状况很少。因而,ASIC能够从必定程度上消除GPU的杂乱性和能耗,只需求构成一个连接到小型核算引擎的内存接口。

  ProgPoW算法演练

  这儿生成的DAG和Ethash中的彻底相同。仅有的区别是生成了额定的PROGPOW_SIZE_CACHE值的数据,这些数据将驻留在L1缓存中,而不是在framebuffer(帧缓存)中。

  ProgPoW能够选用以下参数进行调试,相关设置现已针对一系列通用GPU进行了调整:

  - PROGPOW_LANES:为核算一个散列实例而和谐的平行行数;默认值为32

  - PROGPOW_REGS:寄存器文件的运用巨细;默认值是16