Asic

ASIC 礦工實際上在做什麼?

  • August 26, 2018

我試圖了解比特幣挖礦(軟體方面),我想知道 ASIC 礦工有什麼不同?我正在瀏覽這個最小的比特幣礦工 Github 儲存庫

Program.cs的哪一部分是 ASIC 優化的(我猜Program.cs 第 90 行)?我在哪裡可以閱讀更多關於礦工深入工作的資訊?有文件嗎?

從嘗試設計我自己的 ASIC——我得到了一個模擬但未完全調試的 Verilog 實現——我可以告訴你我的工作方式。雖然我沒有檢查過,但設計選擇對我來說似乎很明顯,我懷疑有人會以不同的方式做。

探勘過程的內部循環是數據的雙重 SHA-256 散列,其中只有一個 32 位字(本質上是計數器或“隨機數”)發生變化。它在第二個 SHA-256 之後的正確位置有足夠的零時查找特定結果,並且只需要輸出這種情況的計數器值(如果有的話)。

這個內部循環非常適合在硬體中實現:SHA-256 具有相當低的複雜性,它本身就是一個可以輕鬆展開和流水線化的循環(在我將描述的優化之後,兩個應用程序中的每一個都有 64 個相同的步驟稍後),如果計數器循環包含在硬體中,則所需的 IO 非常低,無論是在實際傳輸的數據方面,還是從某種意義上說它可能非常慢,但對整體性能的影響可以忽略不計。

在您引用的原始碼中,我所說的循環構成了整個函式FindShare(第 85 到 107 行)。但是,讓我解釋一下實際工作,在第 90 行中實現,FindShare由於Sha256(Sha256(Current))一個簡單且非常常見的優化,只執行了一半的初始函式呼叫。前半部分可以很容易地移到循環之外。

如果您真的想知道詳細資訊,那麼我應該添加兩個 SHA-256 執行的第一個部分,該部分應該為每個計數器值完成,對於所有計數器值都是相同的。自然應該優化它,刪除它會顯著降低硬體複雜性。它甚至從許多軟體探勘實現中刪除(用於礦池的一種協議實際上讓礦池解決了這個問題,只將中間 SHA-256 數據傳遞給礦工)。因此,ASIC 剩下的就是一些 I/O 邏輯來獲取中間 SHA-256 數據,然後在結果數據上完成 SHA-256 雜湊算法的 2 次應用,檢查輸出(如果它對應於找到,則輸出一個信號塊或解決礦池中的份額),並使用下一個計數器值迭代 2^32 次。

因為 ASIC 是一種真正定制的晶片,並且因為 SHA-256 是一種對硬體實現友好的算法,所以在每個時鐘週期從更小的矽片區域生成一個新的雙 SHA-256 雜湊是合理的比製造通用 CPU 所需的時間還要多,而通用 CPU 需要數百個時鐘週期來完成相同的計算。雖然原則上 FPGA 也是如此,但事實上它們的結構並不是完全展開的流水線 SHA-256(比特幣探勘的區域密集型更有效選擇方法,但不是典型的選擇)用於其他應用程序並為 SHA-256 預探勘 ASIC 核心)意味著在許多具有成本效益的 FPGA 中,很難適應單個完全展開的雙 SHA-256,而 ASIC 可以輕鬆容納許多。

引用自:https://bitcoin.stackexchange.com/questions/16940