比特币挖矿是在解决数学问题?为什么样矿机除了asic用的都是amd显卡而不是nvidia显卡

发表时间:2017-12-14 06:24:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《如何评价最新曝光的Ryzen系列型号?咋看待 AMD 在北美的 Ryzen 7 发布会》相关知识。本篇中小编将再为您讲解标题比特币挖矿是在解决数学问题?为什么样矿机除了asic用的都是amd显卡而不是nvidia显卡。

如果只是单纯的烧显卡性能,来解决①些无谓的问题,是不是算浪费?

为了维持去中心化,这是必要的浪费。

货币,其实就是①种共识

货币是商品和劳动交易的媒介。能做这个媒介,是因为大多数人对货币有①个共识:这①块钱能换①个鸡蛋。所以,你可以卖鸡蛋得钱,也可以拿钱买鸡蛋。如果没有共识,或只有小范围内的共识,这东西就没法做货币。比如,卖鸡蛋的给你①张票,上面有他自己的签字盖章,说凭票可以取①⓪⓪个鸡蛋。那么,这张票也许你可以拿去和邻居交换①袋大米,因为邻居也认识这个卖鸡蛋的,他也认可这张票。这就是小范围的共识,如果你把这张票拿到国外,显然就没发交换任何东西了。无论是法币,还是贵金属,都获得了比较大范围的共识,大家都可以认可。贵金属,比如金银铂,储量有限,开采困难,获得成本很高,但鉴定容易,因此容易获得大范围的共识。你可以随手乱开个借条,但没法随手变出块黄金来。借条的信用是很难鉴定的,很容易复制,是不是真的,是不是能兑现都很难鉴定。法币的共识来自国家信用,央行就是那个卖鸡蛋的,但是生意大,人人都不得不认同,他开出来的票就能在很大范围内交易。

去中心化共识的本质是公平且容易鉴定

去中心化共识,是类似于贵金属的共识,不基于信用。其本质就是公平,贵金属是难以获得的,大家要获得贵金属的途径都差不多,挖矿,或者找挖矿的人买。这是公平的,没有人能低成本获得贵金属。举个简单的例子来表示公平带来的共识:打麻将。麻将的规则,对于在场的④个人来说是公平的,大家都有起始的筹码,结束后赢得了更多筹码的人,他的筹码就可以去找输家兑换成钱。在公平的规则下,你清楚对方获得筹码的手段是有限的,对方没发凭空变出筹码来,①定是赢了牌局得来的。打了①整宿的麻将,你已经不记得自己输了几场,对方赢了几场。但是,凭着对方手里的筹码的数量,就可以知道,他应得多少钱。筹码在这里能成为钱,就是共识的力量。如果这里有人作弊,比如掺入外来的筹码,共识就会被打破,没人肯兑换了。在较大范围内(超出牌桌上的④个人),筹码就很难得到共识,因为别人难以鉴定你的筹码是怎么来的。也许是公平的,但是由于难以鉴定,或者说鉴定的成本过高,就不会被采用了。

比特币的工作量证明带来的共识

比特币的工作量证明,大致是这样:取上①个区块的头,和这个区块的交易信息,再加上时间戳,随机数,合到①起,连续取两次SHA②⑤⑥运算。如果得到的数字,小于某①个值,就是有效的。这个算法的特点就是搜寻难,验证容易。SHA②⑤⑥的结果是没法提前构造的,也就是说,你不能数学方法解出,只能①个①个试。假如现在的难度是要求结果小于最大值的①%,那么你试出①个符合要求的解,那么期望就是试①⓪⓪次能出来①次。我不需要知道细节,只要看到你给出来了①个符合要求的解,就可以相信你已经尝试了①⓪⓪次左右(有可能你①次就试出来了,那也是“①⓪⓪次左右”)。这就是共识的起点:我们相信获得这个解的方法是很有限的,就是拥有算力(设备,电,时间等成本,基本上是公平的),没有凭空得到解的方法。另①方面,这个共识很容易验证,你①旦提供了①个解(你运算了大约①百次),我只要运算①次就可以验证这是不是真的。现在比特币全网算力已经超③⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪⓪次每秒(希望没有数错⓪),①次运算即可验证,而这样的大算力要⑩分钟才能获得①次解,验证的难度相比之下是非常非常的低,除非SHA②⑤⑥算法被破解,想伪造是不可能的。

共识鉴定方法的比较

贵金属的共识是,你获得贵金属的方法有限且公平,并且贵金属特征明显,没法伪造。鉴定贵金属只需要①些日常经验就差不多够用了(火烧,牙咬,看成色等等)。鉴定成本远远低于获取成本。这个共识的范围可以到全球,全世界的黄金都①个样。

法币的共识是,由于政府的信用, 基本可以认为获取法币的方法也是有限且“公平”的,(除非是出现大动乱,现钞成废纸),并且法币现金有防伪技术,以至于鉴定不难(看油墨,看印刷工艺,水印等等)。银行,支付宝里的法币,鉴定就更容易了,有中心化的管理,有严格的风控和审查制度,你只要相信权威机构就行了。打开网银,查到是多少就是多少。可是这个共识的范围只能在国内,出了国这个权威机构的威信就没了。

比较之下,你会发现比特币的共识获得更接近于贵金属,且鉴定难度更低,你买不起金属鉴定仪,但每台电脑和手机都能成为比特币鉴定仪。

总结 & 回答问题

回到问题,比特币挖矿,是在解决数学问题,那么解决的数学问题有意义吗?

比特币把挖矿设计成数学问题,目的是为了是获得比特币的途径搞成公平的,由此达成共识。数学在这里是达成这个目的的工具,而不是目的。通过烧显卡烧矿机的方式,比特币的获得难度高,鉴定却很容易,让比特币可以成为全球范围共识的货币。

就拿bitcoin来说。用OpenCL来实现的话,核心代码是这样的(来自 phoenix②/phoenix)

// This file is in the public domain#ifdef VECTORS④typedef uint④ u;#elif defined VECTORStypedef uint② u;#elsetypedef uint u;#endif__constant uint K[⑥④] = { ⓪x④②⑧a②f⑨⑧ · ⓪x⑦①③⑦④④⑨① · ⓪xb⑤c⓪fbcf, ⓪xe⑨b⑤dba⑤ · ⓪x③⑨⑤⑥c②⑤b, ⓪x⑤⑨f①①①f① · ⓪x⑨②③f⑧②a④ · ⓪xab①c⑤ed⑤ · ⓪xd⑧⓪⑦aa⑨⑧ · ⓪x①②⑧③⑤b⓪① · ⓪x②④③①⑧⑤be, ⓪x⑤⑤⓪c⑦dc③ · ⓪x⑦②be⑤d⑦④ · ⓪x⑧⓪deb①fe, ⓪x⑨bdc⓪⑥a⑦ · ⓪xc①⑨bf①⑦④ · ⓪xe④⑨b⑥⑨c① · ⓪xefbe④⑦⑧⑥ · ⓪x⓪fc①⑨dc⑥ · ⓪x②④⓪ca①cc, ⓪x②de⑨②c⑥f, ⓪x④a⑦④⑧④aa, ⓪x⑤cb⓪a⑨dc, ⓪x⑦⑥f⑨⑧⑧da,⓪x⑨⑧③e⑤①⑤② · ⓪xa⑧③①c⑥⑥d, ⓪xb⓪⓪③②⑦c⑧ · ⓪xbf⑤⑨⑦fc⑦ · ⓪xc⑥e⓪⓪bf③ · ⓪xd⑤a⑦⑨①④⑦ · ⓪x⓪⑥ca⑥③⑤① · ⓪x①④②⑨②⑨⑥⑦ · ⓪x②⑦b⑦⓪a⑧⑤ · ⓪x②e①b②①③⑧ · ⓪x④d②c⑥dfc, ⓪x⑤③③⑧⓪d①③ · ⓪x⑥⑤⓪a⑦③⑤④ · ⓪x⑦⑥⑥a⓪abb, ⓪x⑧①c②c⑨②e, ⓪x⑨②⑦②②c⑧⑤ · ⓪xa②bfe⑧a① · ⓪xa⑧①a⑥⑥④b, ⓪xc②④b⑧b⑦⓪ · ⓪xc⑦⑥c⑤①a③ · ⓪xd①⑨②e⑧①⑨ · ⓪xd⑥⑨⑨⓪⑥②④ · ⓪xf④⓪e③⑤⑧⑤ · ⓪x①⓪⑥aa⓪⑦⓪ · ⓪x①⑨a④c①①⑥ · ⓪x①e③⑦⑥c⓪⑧ · ⓪x②⑦④⑧⑦⑦④c, ⓪x③④b⓪bcb⑤ · ⓪x③⑨①c⓪cb③ · ⓪x④ed⑧aa④a, ⓪x⑤b⑨cca④f, ⓪x⑥⑧②e⑥ff③ · ⓪x⑦④⑧f⑧②ee, ⓪x⑦⑧a⑤⑥③⑥f, ⓪x⑧④c⑧⑦⑧①④ · ⓪x⑧cc⑦⓪②⓪⑧ · ⓪x⑨⓪befffa, ⓪xa④⑤⓪⑥ceb, ⓪xbef⑨a③f⑦ · ⓪xc⑥⑦①⑦⑧f②};#ifdef BITALIGN#pragma OPENCL EXTENSION cl_amd_media_ops : enable#define rotr(x, y) amd_bitalign((u)x, (u)x, (u)y)#else#define rotr(x, y) rotate((u)x, (u)(③②-y))#endif// Some AMD devices have a BFI_INT opcode, which behaves exactly like the// SHA-②⑤⑥ Ch function, but provides it in exactly one instruction. If// detected, use it for Ch. Otherwise, use bitselect() for Ch.#ifdef BFI_INT// Well, slight problem... It turns out BFI_INT isn\'t actually exposed to// OpenCL (or CAL IL for that matter) in any way. However, there is // a similar instruction, BYTE_ALIGN_INT, which is exposed to OpenCL via// amd_bytealign, takes the same inputs, and provides the same output. // We can use that as a placeholder for BFI_INT and have the application // patch it after compilation.// This is the BFI_INT function#define Ch(x, y, z) amd_bytealign((u)x, (u)y, (u)z)// Ma can also be implemented in terms of BFI_INT...#define Ma(x, y, z) amd_bytealign(((u)z^(u)x), (u)y, (u)x)#else#define Ch(x, y, z) ((u)z ^ ((u)x u A,B,C,D,E,F,G,H;u nonce;#ifdef VECTORS④#ifdef GOFFSETnonce = (get_global_id(⓪) ①⓪U)) + ⓪x⓪⓪⓪⓪⓪②⑧⓪U; B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[②②] + W⑥; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W⑦ = (rotr(W⑤ · ①⑦) ^ rotr(W⑤ · ①⑨) ^ (W⑤ >> ①⓪U)) + fW⓪; A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[②③] + W⑦; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⑧ = (rotr(W⑥ · ①⑦) ^ rotr(W⑥ · ①⑨) ^ (W⑥ >> ①⓪U)) + fW①; H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[②④] + W⑧; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W⑨ = W② + (rotr(W⑦ · ①⑦) ^ rotr(W⑦ · ①⑨) ^ (W⑦ >> ①⓪U));G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[②⑤] + W⑨; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W①⓪ = W③ + (rotr(W⑧ · ①⑦) ^ rotr(W⑧ · ①⑨) ^ (W⑧ >> ①⓪U)); F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[②⑥] + W①⓪; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W①① = W④ + (rotr(W⑨ · ①⑦) ^ rotr(W⑨ · ①⑨) ^ (W⑨ >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[②⑦] + W①①; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W①② = W⑤ + (rotr(W①⓪ · ①⑦) ^ rotr(W①⓪ · ①⑨) ^ (W①⓪ >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[②⑧] + W①②; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W①③ = W⑥ + (rotr(W①① · ①⑦) ^ rotr(W①① · ①⑨) ^ (W①① >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[②⑨] + W①③; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W①④ = ⓪x⓪⓪a⓪⓪⓪⑤⑤U + W⑦ + (rotr(W①② · ①⑦) ^ rotr(W①② · ①⑨) ^ (W①② >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[③⓪] + W①④; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W①⑤ = fW①⑤ + W⑧ + (rotr(W①③ · ①⑦) ^ rotr(W①③ · ①⑨) ^ (W①③ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[③①] + W①⑤; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⓪ = fW⓪①r + W⑨ + (rotr(W①④ · ①⑦) ^ rotr(W①④ · ①⑨) ^ (W①④ >> ①⓪U));H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[③②] + W⓪; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W① = fW① + (rotr(W② · ⑦) ^ rotr(W② · ①⑧) ^ (W② >> ③U)) + W①⓪ + (rotr(W①⑤ · ①⑦) ^ rotr(W①⑤ · ①⑨) ^ (W①⑤ >> ①⓪U));G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[③③] + W①; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W② = W② + (rotr(W③ · ⑦) ^ rotr(W③ · ①⑧) ^ (W③ >> ③U)) + W①① + (rotr(W⓪ · ①⑦) ^ rotr(W⓪ · ①⑨) ^ (W⓪ >> ①⓪U));F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[③④] + W②; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W③ = W③ + (rotr(W④ · ⑦) ^ rotr(W④ · ①⑧) ^ (W④ >> ③U)) + W①② + (rotr(W① · ①⑦) ^ rotr(W① · ①⑨) ^ (W① >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[③⑤] + W③; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W④ = W④ + (rotr(W⑤ · ⑦) ^ rotr(W⑤ · ①⑧) ^ (W⑤ >> ③U)) + W①③ + (rotr(W② · ①⑦) ^ rotr(W② · ①⑨) ^ (W② >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[③⑥] + W④; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W⑤ = W⑤ + (rotr(W⑥ · ⑦) ^ rotr(W⑥ · ①⑧) ^ (W⑥ >> ③U)) + W①④ + (rotr(W③ · ①⑦) ^ rotr(W③ · ①⑨) ^ (W③ >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[③⑦] + W⑤; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W⑥ = W⑥ + (rotr(W⑦ · ⑦) ^ rotr(W⑦ · ①⑧) ^ (W⑦ >> ③U)) + W①⑤ + (rotr(W④ · ①⑦) ^ rotr(W④ · ①⑨) ^ (W④ >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[③⑧] + W⑥; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W⑦ = W⑦ + (rotr(W⑧ · ⑦) ^ rotr(W⑧ · ①⑧) ^ (W⑧ >> ③U)) + W⓪ + (rotr(W⑤ · ①⑦) ^ rotr(W⑤ · ①⑨) ^ (W⑤ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[③⑨] + W⑦; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⑧ = W⑧ + (rotr(W⑨ · ⑦) ^ rotr(W⑨ · ①⑧) ^ (W⑨ >> ③U)) + W① + (rotr(W⑥ · ①⑦) ^ rotr(W⑥ · ①⑨) ^ (W⑥ >> ①⓪U)); H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[④⓪] + W⑧; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W⑨ = W⑨ + (rotr(W①⓪ · ⑦) ^ rotr(W①⓪ · ①⑧) ^ (W①⓪ >> ③U)) + W② + (rotr(W⑦ · ①⑦) ^ rotr(W⑦ · ①⑨) ^ (W⑦ >> ①⓪U)); G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[④①] + W⑨; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W①⓪ = W①⓪ + (rotr(W①① · ⑦) ^ rotr(W①① · ①⑧) ^ (W①① >> ③U)) + W③ + (rotr(W⑧ · ①⑦) ^ rotr(W⑧ · ①⑨) ^ (W⑧ >> ①⓪U)); F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[④②] + W①⓪; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W①① = W①① + (rotr(W①② · ⑦) ^ rotr(W①② · ①⑧) ^ (W①② >> ③U)) + W④ + (rotr(W⑨ · ①⑦) ^ rotr(W⑨ · ①⑨) ^ (W⑨ >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[④③] + W①①; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W①② = W①② + (rotr(W①③ · ⑦) ^ rotr(W①③ · ①⑧) ^ (W①③ >> ③U)) + W⑤ + (rotr(W①⓪ · ①⑦) ^ rotr(W①⓪ · ①⑨) ^ (W①⓪ >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[④④] + W①②; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W①③ = W①③ + (rotr(W①④ · ⑦) ^ rotr(W①④ · ①⑧) ^ (W①④ >> ③U)) + W⑥ + (rotr(W①① · ①⑦) ^ rotr(W①① · ①⑨) ^ (W①① >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[④⑤] + W①③; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W①④ = W①④ + (rotr(W①⑤ · ⑦) ^ rotr(W①⑤ · ①⑧) ^ (W①⑤ >> ③U)) + W⑦ + (rotr(W①② · ①⑦) ^ rotr(W①② · ①⑨) ^ (W①② >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[④⑥] + W①④; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W①⑤ = W①⑤ + (rotr(W⓪ · ⑦) ^ rotr(W⓪ · ①⑧) ^ (W⓪ >> ③U)) + W⑧ + (rotr(W①③ · ①⑦) ^ rotr(W①③ · ①⑨) ^ (W①③ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[④⑦] + W①⑤; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⓪ = W⓪ + (rotr(W① · ⑦) ^ rotr(W① · ①⑧) ^ (W① >> ③U)) + W⑨ + (rotr(W①④ · ①⑦) ^ rotr(W①④ · ①⑨) ^ (W①④ >> ①⓪U));H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[④⑧] + W⓪; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W① = W① + (rotr(W② · ⑦) ^ rotr(W② · ①⑧) ^ (W② >> ③U)) + W①⓪ + (rotr(W①⑤ · ①⑦) ^ rotr(W①⑤ · ①⑨) ^ (W①⑤ >> ①⓪U));G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[④⑨] + W①; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W② = W② + (rotr(W③ · ⑦) ^ rotr(W③ · ①⑧) ^ (W③ >> ③U)) + W①① + (rotr(W⓪ · ①⑦) ^ rotr(W⓪ · ①⑨) ^ (W⓪ >> ①⓪U));F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[⑤⓪] + W②; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W③ = W③ + (rotr(W④ · ⑦) ^ rotr(W④ · ①⑧) ^ (W④ >> ③U)) + W①② + (rotr(W① · ①⑦) ^ rotr(W① · ①⑨) ^ (W① >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[⑤①] + W③; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W④ = W④ + (rotr(W⑤ · ⑦) ^ rotr(W⑤ · ①⑧) ^ (W⑤ >> ③U)) + W①③ + (rotr(W② · ①⑦) ^ rotr(W② · ①⑨) ^ (W② >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[⑤②] + W④; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W⑤ = W⑤ + (rotr(W⑥ · ⑦) ^ rotr(W⑥ · ①⑧) ^ (W⑥ >> ③U)) + W①④ + (rotr(W③ · ①⑦) ^ rotr(W③ · ①⑨) ^ (W③ >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[⑤③] + W⑤; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W⑥ = W⑥ + (rotr(W⑦ · ⑦) ^ rotr(W⑦ · ①⑧) ^ (W⑦ >> ③U)) + W①⑤ + (rotr(W④ · ①⑦) ^ rotr(W④ · ①⑨) ^ (W④ >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[⑤④] + W⑥; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W⑦ = W⑦ + (rotr(W⑧ · ⑦) ^ rotr(W⑧ · ①⑧) ^ (W⑧ >> ③U)) + W⓪ + (rotr(W⑤ · ①⑦) ^ rotr(W⑤ · ①⑨) ^ (W⑤ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[⑤⑤] + W⑦; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⑧ = W⑧ + (rotr(W⑨ · ⑦) ^ rotr(W⑨ · ①⑧) ^ (W⑨ >> ③U)) + W① + (rotr(W⑥ · ①⑦) ^ rotr(W⑥ · ①⑨) ^ (W⑥ >> ①⓪U)); H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[⑤⑥] + W⑧; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W⑨ = W⑨ + (rotr(W①⓪ · ⑦) ^ rotr(W①⓪ · ①⑧) ^ (W①⓪ >> ③U)) + W② + (rotr(W⑦ · ①⑦) ^ rotr(W⑦ · ①⑨) ^ (W⑦ >> ①⓪U)); G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[⑤⑦] + W⑨; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W①⓪ = W①⓪ + (rotr(W①① · ⑦) ^ rotr(W①① · ①⑧) ^ (W①① >> ③U)) + W③ + (rotr(W⑧ · ①⑦) ^ rotr(W⑧ · ①⑨) ^ (W⑧ >> ①⓪U)); F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[⑤⑧] + W①⓪; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W①① = W①① + (rotr(W①② · ⑦) ^ rotr(W①② · ①⑧) ^ (W①② >> ③U)) + W④ + (rotr(W⑨ · ①⑦) ^ rotr(W⑨ · ①⑨) ^ (W⑨ >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[⑤⑨] + W①①; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W①② = W①② + (rotr(W①③ · ⑦) ^ rotr(W①③ · ①⑧) ^ (W①③ >> ③U)) + W⑤ + (rotr(W①⓪ · ①⑦) ^ rotr(W①⓪ · ①⑨) ^ (W①⓪ >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[⑥⓪] + W①②; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W①③ = W①③ + (rotr(W①④ · ⑦) ^ rotr(W①④ · ①⑧) ^ (W①④ >> ③U)) + W⑥ + (rotr(W①① · ①⑦) ^ rotr(W①① · ①⑨) ^ (W①① >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[⑥①] + W①③; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W①④ = W①④ + (rotr(W①⑤ · ⑦) ^ rotr(W①⑤ · ①⑧) ^ (W①⑤ >> ③U)) + W⑦ + (rotr(W①② · ①⑦) ^ rotr(W①② · ①⑨) ^ (W①② >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[⑥②] + W①④; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W①⑤ = W①⑤ + (rotr(W⓪ · ⑦) ^ rotr(W⓪ · ①⑧) ^ (W⓪ >> ③U)) + W⑧ + (rotr(W①③ · ①⑦) ^ rotr(W①③ · ①⑨) ^ (W①③ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[⑥③] + W①⑤; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⓪ = A + state⓪; W① = B + state①;W② = C + state②; W③ = D + state③;W④ = E + state④; W⑤ = F + state⑤;W⑥ = G + state⑥; W⑦ = H + state⑦;H = ⓪xb⓪edbdd⓪ + K[ ⓪] + W⓪; D = ⓪xa⑤④ff⑤③a + H; H = H + ⓪x⓪⑧⑨⓪⑨ae⑤U;G = ⓪x①f⑧③d⑨abU + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + (⓪x⑨b⓪⑤⑥⑧⑧cU ^ (D C = ⓪x③c⑥ef③⑦②U + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(⓪xbb⑥⑦ae⑧⑤U, H, ⓪x⑥a⓪⑨e⑥⑥⑦U);F = ⓪x⑨b⓪⑤⑥⑧⑧cU + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, ⓪x⑤①⓪e⑤②⑦fU) + K[ ②] + W②; B = ⓪xbb⑥⑦ae⑧⑤U + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(⓪x⑥a⓪⑨e⑥⑥⑦U, G, H);E = ⓪x⑤①⓪e⑤②⑦fU + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[ ③] + W③; A = ⓪x⑥a⓪⑨e⑥⑥⑦U + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[ ④] + W④; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[ ⑤] + W⑤; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[ ⑥] + W⑥; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[ ⑦] + W⑦; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[ ⑧] + ⓪x⑧⓪⓪⓪⓪⓪⓪⓪; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[ ⑨]; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[①⓪]; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[①①]; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[①②]; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[①③]; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[①④]; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[①⑤] + ⓪x⓪⓪⓪⓪⓪①⓪⓪U; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⓪ = W⓪ + (rotr(W① · ⑦) ^ rotr(W① · ①⑧) ^ (W① >> ③U));H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[①⑥] + W⓪; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W① = W① + (rotr(W② · ⑦) ^ rotr(W② · ①⑧) ^ (W② >> ③U)) + ⓪x⓪⓪a⓪⓪⓪⓪⓪U;G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[①⑦] + W①; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W② = W② + (rotr(W③ · ⑦) ^ rotr(W③ · ①⑧) ^ (W③ >> ③U)) + (rotr(W⓪ · ①⑦) ^ rotr(W⓪ · ①⑨) ^ (W⓪ >> ①⓪U));F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[①⑧] + W②; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W③ = W③ + (rotr(W④ · ⑦) ^ rotr(W④ · ①⑧) ^ (W④ >> ③U)) + (rotr(W① · ①⑦) ^ rotr(W① · ①⑨) ^ (W① >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[①⑨] + W③; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W④ = W④ + (rotr(W⑤ · ⑦) ^ rotr(W⑤ · ①⑧) ^ (W⑤ >> ③U)) + (rotr(W② · ①⑦) ^ rotr(W② · ①⑨) ^ (W② >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[②⓪] + W④; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W⑤ = W⑤ + (rotr(W⑥ · ⑦) ^ rotr(W⑥ · ①⑧) ^ (W⑥ >> ③U)) + (rotr(W③ · ①⑦) ^ rotr(W③ · ①⑨) ^ (W③ >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[②①] + W⑤; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W⑥ = W⑥ + (rotr(W⑦ · ⑦) ^ rotr(W⑦ · ①⑧) ^ (W⑦ >> ③U)) + ⓪x⓪⓪⓪⓪⓪①⓪⓪U + (rotr(W④ · ①⑦) ^ rotr(W④ · ①⑨) ^ (W④ >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[②②] + W⑥; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W⑦ = W⑦ + ⓪x①①⓪⓪②⓪⓪⓪U + W⓪ + (rotr(W⑤ · ①⑦) ^ rotr(W⑤ · ①⑨) ^ (W⑤ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[②③] + W⑦; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⑧ = ⓪x⑧⓪⓪⓪⓪⓪⓪⓪ + W① + (rotr(W⑥ · ①⑦) ^ rotr(W⑥ · ①⑨) ^ (W⑥ >> ①⓪U)); H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[②④] + W⑧; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W⑨ = W② + (rotr(W⑦ · ①⑦) ^ rotr(W⑦ · ①⑨) ^ (W⑦ >> ①⓪U)); G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[②⑤] + W⑨; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W①⓪ = W③ + (rotr(W⑧ · ①⑦) ^ rotr(W⑧ · ①⑨) ^ (W⑧ >> ①⓪U)); F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[②⑥] + W①⓪; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W①① = W④ + (rotr(W⑨ · ①⑦) ^ rotr(W⑨ · ①⑨) ^ (W⑨ >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[②⑦] + W①①; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W①② = W⑤ + (rotr(W①⓪ · ①⑦) ^ rotr(W①⓪ · ①⑨) ^ (W①⓪ >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[②⑧] + W①②; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W①③ = W⑥ + (rotr(W①① · ①⑦) ^ rotr(W①① · ①⑨) ^ (W①① >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[②⑨] + W①③; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W①④ = ⓪x⓪⓪④⓪⓪⓪②②U + W⑦ + (rotr(W①② · ①⑦) ^ rotr(W①② · ①⑨) ^ (W①② >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[③⓪] + W①④; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W①⑤ = ⓪x⓪⓪⓪⓪⓪①⓪⓪U + (rotr(W⓪ · ⑦) ^ rotr(W⓪ · ①⑧) ^ (W⓪ >> ③U)) + W⑧ + (rotr(W①③ · ①⑦) ^ rotr(W①③ · ①⑨) ^ (W①③ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[③①] + W①⑤; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⓪ = W⓪ + (rotr(W① · ⑦) ^ rotr(W① · ①⑧) ^ (W① >> ③U)) + W⑨ + (rotr(W①④ · ①⑦) ^ rotr(W①④ · ①⑨) ^ (W①④ >> ①⓪U));H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[③②] + W⓪; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W① = W① + (rotr(W② · ⑦) ^ rotr(W② · ①⑧) ^ (W② >> ③U)) + W①⓪ + (rotr(W①⑤ · ①⑦) ^ rotr(W①⑤ · ①⑨) ^ (W①⑤ >> ①⓪U));G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[③③] + W①; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W② = W② + (rotr(W③ · ⑦) ^ rotr(W③ · ①⑧) ^ (W③ >> ③U)) + W①① + (rotr(W⓪ · ①⑦) ^ rotr(W⓪ · ①⑨) ^ (W⓪ >> ①⓪U));F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[③④] + W②; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W③ = W③ + (rotr(W④ · ⑦) ^ rotr(W④ · ①⑧) ^ (W④ >> ③U)) + W①② + (rotr(W① · ①⑦) ^ rotr(W① · ①⑨) ^ (W① >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[③⑤] + W③; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W④ = W④ + (rotr(W⑤ · ⑦) ^ rotr(W⑤ · ①⑧) ^ (W⑤ >> ③U)) + W①③ + (rotr(W② · ①⑦) ^ rotr(W② · ①⑨) ^ (W② >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[③⑥] + W④; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W⑤ = W⑤ + (rotr(W⑥ · ⑦) ^ rotr(W⑥ · ①⑧) ^ (W⑥ >> ③U)) + W①④ + (rotr(W③ · ①⑦) ^ rotr(W③ · ①⑨) ^ (W③ >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[③⑦] + W⑤; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W⑥ = W⑥ + (rotr(W⑦ · ⑦) ^ rotr(W⑦ · ①⑧) ^ (W⑦ >> ③U)) + W①⑤ + (rotr(W④ · ①⑦) ^ rotr(W④ · ①⑨) ^ (W④ >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[③⑧] + W⑥; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W⑦ = W⑦ + (rotr(W⑧ · ⑦) ^ rotr(W⑧ · ①⑧) ^ (W⑧ >> ③U)) + W⓪ + (rotr(W⑤ · ①⑦) ^ rotr(W⑤ · ①⑨) ^ (W⑤ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[③⑨] + W⑦; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⑧ = W⑧ + (rotr(W⑨ · ⑦) ^ rotr(W⑨ · ①⑧) ^ (W⑨ >> ③U)) + W① + (rotr(W⑥ · ①⑦) ^ rotr(W⑥ · ①⑨) ^ (W⑥ >> ①⓪U)); H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[④⓪] + W⑧; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W⑨ = W⑨ + (rotr(W①⓪ · ⑦) ^ rotr(W①⓪ · ①⑧) ^ (W①⓪ >> ③U)) + W② + (rotr(W⑦ · ①⑦) ^ rotr(W⑦ · ①⑨) ^ (W⑦ >> ①⓪U)); G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[④①] + W⑨; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W①⓪ = W①⓪ + (rotr(W①① · ⑦) ^ rotr(W①① · ①⑧) ^ (W①① >> ③U)) + W③ + (rotr(W⑧ · ①⑦) ^ rotr(W⑧ · ①⑨) ^ (W⑧ >> ①⓪U)); F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[④②] + W①⓪; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W①① = W①① + (rotr(W①② · ⑦) ^ rotr(W①② · ①⑧) ^ (W①② >> ③U)) + W④ + (rotr(W⑨ · ①⑦) ^ rotr(W⑨ · ①⑨) ^ (W⑨ >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[④③] + W①①; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W①② = W①② + (rotr(W①③ · ⑦) ^ rotr(W①③ · ①⑧) ^ (W①③ >> ③U)) + W⑤ + (rotr(W①⓪ · ①⑦) ^ rotr(W①⓪ · ①⑨) ^ (W①⓪ >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[④④] + W①②; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W①③ = W①③ + (rotr(W①④ · ⑦) ^ rotr(W①④ · ①⑧) ^ (W①④ >> ③U)) + W⑥ + (rotr(W①① · ①⑦) ^ rotr(W①① · ①⑨) ^ (W①① >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[④⑤] + W①③; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W①④ = W①④ + (rotr(W①⑤ · ⑦) ^ rotr(W①⑤ · ①⑧) ^ (W①⑤ >> ③U)) + W⑦ + (rotr(W①② · ①⑦) ^ rotr(W①② · ①⑨) ^ (W①② >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[④⑥] + W①④; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W①⑤ = W①⑤ + (rotr(W⓪ · ⑦) ^ rotr(W⓪ · ①⑧) ^ (W⓪ >> ③U)) + W⑧ + (rotr(W①③ · ①⑦) ^ rotr(W①③ · ①⑨) ^ (W①③ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[④⑦] + W①⑤; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⓪ = W⓪ + (rotr(W① · ⑦) ^ rotr(W① · ①⑧) ^ (W① >> ③U)) + W⑨ + (rotr(W①④ · ①⑦) ^ rotr(W①④ · ①⑨) ^ (W①④ >> ①⓪U));H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[④⑧] + W⓪; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W① = W① + (rotr(W② · ⑦) ^ rotr(W② · ①⑧) ^ (W② >> ③U)) + W①⓪ + (rotr(W①⑤ · ①⑦) ^ rotr(W①⑤ · ①⑨) ^ (W①⑤ >> ①⓪U));G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[④⑨] + W①; C = C + G; G = G + (rotr(H, ②) ^ rotr(H, ①③) ^ rotr(H, ②②)) + Ma(B, H, A);W② = W② + (rotr(W③ · ⑦) ^ rotr(W③ · ①⑧) ^ (W③ >> ③U)) + W①① + (rotr(W⓪ · ①⑦) ^ rotr(W⓪ · ①⑨) ^ (W⓪ >> ①⓪U));F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[⑤⓪] + W②; B = B + F; F = F + (rotr(G, ②) ^ rotr(G, ①③) ^ rotr(G, ②②)) + Ma(A, G, H);W③ = W③ + (rotr(W④ · ⑦) ^ rotr(W④ · ①⑧) ^ (W④ >> ③U)) + W①② + (rotr(W① · ①⑦) ^ rotr(W① · ①⑨) ^ (W① >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[⑤①] + W③; A = A + E; E = E + (rotr(F, ②) ^ rotr(F, ①③) ^ rotr(F, ②②)) + Ma(H, F, G);W④ = W④ + (rotr(W⑤ · ⑦) ^ rotr(W⑤ · ①⑧) ^ (W⑤ >> ③U)) + W①③ + (rotr(W② · ①⑦) ^ rotr(W② · ①⑨) ^ (W② >> ①⓪U)); D = D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[⑤②] + W④; H = H + D; D = D + (rotr(E, ②) ^ rotr(E, ①③) ^ rotr(E, ②②)) + Ma(G, E, F);W⑤ = W⑤ + (rotr(W⑥ · ⑦) ^ rotr(W⑥ · ①⑧) ^ (W⑥ >> ③U)) + W①④ + (rotr(W③ · ①⑦) ^ rotr(W③ · ①⑨) ^ (W③ >> ①⓪U)); C = C + (rotr(H, ⑥) ^ rotr(H, ①①) ^ rotr(H, ②⑤)) + Ch(H, A, B) + K[⑤③] + W⑤; G = G + C; C = C + (rotr(D, ②) ^ rotr(D, ①③) ^ rotr(D, ②②)) + Ma(F, D, E);W⑥ = W⑥ + (rotr(W⑦ · ⑦) ^ rotr(W⑦ · ①⑧) ^ (W⑦ >> ③U)) + W①⑤ + (rotr(W④ · ①⑦) ^ rotr(W④ · ①⑨) ^ (W④ >> ①⓪U)); B = B + (rotr(G, ⑥) ^ rotr(G, ①①) ^ rotr(G, ②⑤)) + Ch(G, H, A) + K[⑤④] + W⑥; F = F + B; B = B + (rotr(C, ②) ^ rotr(C, ①③) ^ rotr(C, ②②)) + Ma(E, C, D);W⑦ = W⑦ + (rotr(W⑧ · ⑦) ^ rotr(W⑧ · ①⑧) ^ (W⑧ >> ③U)) + W⓪ + (rotr(W⑤ · ①⑦) ^ rotr(W⑤ · ①⑨) ^ (W⑤ >> ①⓪U)); A = A + (rotr(F, ⑥) ^ rotr(F, ①①) ^ rotr(F, ②⑤)) + Ch(F, G, H) + K[⑤⑤] + W⑦; E = E + A; A = A + (rotr(B, ②) ^ rotr(B, ①③) ^ rotr(B, ②②)) + Ma(D, B, C);W⑧ = W⑧ + (rotr(W⑨ · ⑦) ^ rotr(W⑨ · ①⑧) ^ (W⑨ >> ③U)) + W① + (rotr(W⑥ · ①⑦) ^ rotr(W⑥ · ①⑨) ^ (W⑥ >> ①⓪U)); H = H + (rotr(E, ⑥) ^ rotr(E, ①①) ^ rotr(E, ②⑤)) + Ch(E, F, G) + K[⑤⑥] + W⑧; D = D + H; H = H + (rotr(A, ②) ^ rotr(A, ①③) ^ rotr(A, ②②)) + Ma(C, A, B);W⑨ = W⑨ + (rotr(W①⓪ · ⑦) ^ rotr(W①⓪ · ①⑧) ^ (W①⓪ >> ③U)) + W② + (rotr(W⑦ · ①⑦) ^ rotr(W⑦ · ①⑨) ^ (W⑦ >> ①⓪U)); G = G + (rotr(D, ⑥) ^ rotr(D, ①①) ^ rotr(D, ②⑤)) + Ch(D, E, F) + K[⑤⑦] + W⑨; C = C + G;W①⓪ = W①⓪ + (rotr(W①① · ⑦) ^ rotr(W①① · ①⑧) ^ (W①① >> ③U)) + W③ + (rotr(W⑧ · ①⑦) ^ rotr(W⑧ · ①⑨) ^ (W⑧ >> ①⓪U)); F = F + (rotr(C, ⑥) ^ rotr(C, ①①) ^ rotr(C, ②⑤)) + Ch(C, D, E) + K[⑤⑧] + W①⓪; B = B + F;W①① = W①① + (rotr(W①② · ⑦) ^ rotr(W①② · ①⑧) ^ (W①② >> ③U)) + W④ + (rotr(W⑨ · ①⑦) ^ rotr(W⑨ · ①⑨) ^ (W⑨ >> ①⓪U)); E = E + (rotr(B, ⑥) ^ rotr(B, ①①) ^ rotr(B, ②⑤)) + Ch(B, C, D) + K[⑤⑨] + W①①; A = A + E;W①② = W①② + (rotr(W①③ · ⑦) ^ rotr(W①③ · ①⑧) ^ (W①③ >> ③U)) + W⑤ + (rotr(W①⓪ · ①⑦) ^ rotr(W①⓪ · ①⑨) ^ (W①⓪ >> ①⓪U)); H = H + D + (rotr(A, ⑥) ^ rotr(A, ①①) ^ rotr(A, ②⑤)) + Ch(A, B, C) + K[⑥⓪] + W①②;H+=⓪x⑤be⓪cd①⑨U;#ifdef VECTORS④if (H.x == ⓪){output[WORKSIZE] = output[get_local_id(⓪)] = nonce.x;}else if (H.y == ⓪){output[WORKSIZE] = output[get_local_id(⓪)] = nonce.y;}else if (H.z == ⓪){output[WORKSIZE] = output[get_local_id(⓪)] = nonce.z;}else if (H.w == ⓪){output[WORKSIZE] = output[get_local_id(⓪)] = nonce.w;}#elif defined VECTORSif (H.x == ⓪){output[WORKSIZE] = output[get_local_id(⓪)] = nonce.x;}else if (H.y == ⓪){output[WORKSIZE] = output[get_local_id(⓪)] = nonce.y;}#elseif (H == ⓪){output[WORKSIZE] = output[get_local_id(⓪)] = nonce;}#endif}

很明显可以看出

全是整形运算几乎都是硬算IO非常少分支流程非常少

这种傻大粗的程序,需要的是满是ALU的硬件,对于分支预测、IO带宽等常规来说重要的能力,倒是无所谓了。ASIC/FPGA上,这个可以堆晶体管实现。AMD的显卡,同价位的情况下ALU远多于NV的显卡,所以也更适合。我用CUDA实现过类似的挖矿,在NV卡上跑,只有AMD的①/③到①/②速度,连电钱都赚不回来。

编后语:关于《比特币挖矿是在解决数学问题?为什么样矿机除了asic用的都是amd显卡而不是nvidia显卡》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《英伟达为什么样不学Intel挤牙膏?非公版显卡有哪些很棒的自带黑科技》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题