在上一篇文章中,小编为您详细介绍了关于《如何评价最新曝光的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挤牙膏?非公版显卡有哪些很棒的自带黑科技》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器