Proof-of-Work
scrypt() 的哪些特性使 Tenebrix GPU 具有抗性?
有一個名為Tenebrix的比特幣分叉,它聲稱對 CPU 友好且對 GPU 有抵抗力(在挖礦方面)。他們說這是因為他們使用的是 scrypt 而不是 SHA256。從我正在閱讀的內容來看,scrypt 似乎與 bcrypt 或 PBKDF2 相似,因為它只是一個多輪方案。如果只是多輪的東西在 GPU 上已經比 CPU 更快,那麼 N 輪在 GPU 上不會比 CPU 更快,還是我錯過了 scrypt 固有的破壞 GPU 效率的東西?
scrypt() 算法的核心是一個名為 ROMmix 的常式。基本上,它定義了
V(1) = hash(message) V(2) = hash(hash(message)) V(3) = hash(hash(hash(message))) ...
它計算
V(V(V(V(...(message))))
由於計算 V(n+1) 需要首先計算 V(n),因此最有效的方法是記憶體所有先前計算的值。一旦生成了足夠大的表,V(V(V(…))) 就只是一堆查找。
記憶體所有先前計算的值需要大量記憶體,並且由於每次查找都依賴於前一次查找,因此它對記憶體延遲很敏感(儘管如果您正在探勘,您可以並行處理多個塊並通過管道處理請求以解決這個問題)。
GPU 每秒可以執行比普通 CPU 更多的整數運算,但記憶體頻寬/延遲與 CPU 大致相同。因此**,以記憶體為主導的算法應該在 CPU 和 GPU 之間“公平競爭”。**
我仍然不明白為什麼 Tenebrix 的人認為這是一個重要的目標。它只是“均衡”了 GPU 和 CPU,但您仍然可以建構執行 scrypt() 比 CPU 更快、更便宜的自定義硬體。所以它只是從“GPU 是最好的”到“記憶體匯流排覆蓋的定製印刷電路板是最好的”。沒有人能夠解釋為什麼這種改變值得所有的麻煩。