什麼決定了不同類型硬體上的 SHA256 性能?
我知道這裡的許多問題的答案簡要地觸及了這一點,但我想得到一個綜合答案,它真正觸及不同類型硬體之間的關鍵差異,這使得 SHA256 能夠更好地執行,而不是不太相關的切線其他問題討論。雖然我最關心的是比特幣,但我知道其他一些加密貨幣使用不同的算法,所以如果它有助於說明你的觀點,請隨時參考它們。
- 為什麼比特幣雜湊算法 SHA256 在不同類型的硬體上表現更好?是什麼讓 ASIC/FPGA 能夠比 GPU 計算更多的 H/s,GPU 比 CPU 等等?
- 什麼是“核心的複雜性”?這是對核心數量的引用,還是對實際晶片複雜性的引用?在這兩種情況下,為什麼這不是 SHA256 性能的一個因素?在這裡引用大衛佩里的回答:
順便說一下,重要的是要注意,每秒不會為您購買更多雜湊的一件事是核心的複雜性。這就是為什麼 Nvidia 可能會為遊戲目的製作出色的卡,但它們在挖礦方面卻很糟糕 - 遊戲比 SHA256 更好地利用了異國情調的新指令。
- SHA256 是否可以完全優化以在每個架構的基礎上表現更好?可以對雙重雜湊過程進行任何優化嗎?
採礦性能可以被視為由兩個因素組成。一是可用的總資源。另一個是您可以將這些資源中的哪一部分有效地應用於採礦。
ASIC 和 FPGA 在挖礦方面表現出色,因為您可以有效地利用它們的大部分可用資源進行挖礦。CPU 在挖礦方面很糟糕,因為它們的很大一部分資源對挖礦毫無用處——它們針對記憶體訪問、決策制定、浮點數學以及許多其他對挖礦毫無幫助的事情進行了優化。
“核心的複雜性”是指核心可以執行的操作的複雜程度。這對採礦沒有幫助,採礦只需要非常簡單的操作,因此只會增加您不能用於採礦的可用資源的比例。
SHA256 可以針對每種架構進行大量優化。在挖礦的早期,為各種架構的微優化挖礦進行了一場巨大的“軍備競賽”。
如果可以的話,這可能有點偏離,但它是正確的想法。
繼續 Scwartz 先生的回答。
H/s 中的另一個重要角色是 OpenCL 和 CUDA。每個都提供製造商之間的通信方式/協議,因此不同的硬體可以更容易地互動。因此,正如施瓦茨所說,您需要利用晶片的計算能力(資源)才能使其發揮作用。OpenCL 和 CUDA 允許軟體一次使用許多不同的硬體。因此,進行探勘的某些步驟可能在 CPU 上執行,而其他步驟則在 GPU 上執行。多虧了 OpenCL,您可以輕鬆呼叫一個函式,它將利用它擁有的資源。(我不是說 OpenCL 有一個函式 doHash() 而是更多類似於 if(elegantWork) useCPU; else if(bruteWork) useGPU;)
電腦機器語言架構也將發揮重要作用。ISC(指令集電腦)是具有其處理器可以執行的定義的指令集的電腦。所以有很多種。RISC、ARM 等(我知道其中有很多,或者有很多差異)但是某些指令具有對挖礦有用的指令,而有些指令則沒有。一些晶片中的電路試圖猜測未來,所以如果它看到你正在執行分支語句,它可能會嘗試在每個分支上繼續工作,然後一旦它知道它會丟棄所有其他分支並繼續在正確的分支上. 好吧,在散列中可能不需要它,所以如果我們想要散列,晶片的部分對我們來說是無用的。
ASIC 和 FPGA 是專為採礦而設計的晶片(集成電路)。他們只有需要散列的電路,其中有很多,然後扔掉其餘的正常東西。這就是為什麼 ASIC 僅適用於其應用程序的散列(它只“知道”如何散列)。FPGA 是現場可程式門陣列,它是晶片上的一堆多用途門(電路),可以通過程式來執行特定任務(如散列),但它仍然有一些其他沒用的東西;其他東西在那裡,所以它可以是通用的。(人們編寫軟體是為了更好地利用資源,HardwareDescriptionLanguage HDL 描述了物理電路,它用來編寫對 FPGA 進行程式的程式碼;所以如果你得到一個 FPGA 並想挖礦,
因此,任何給定的晶片性能都可以通過它可以處理的指令、它對這些指令的處理能力以及它的效率(如果你關心的話)來確定。由於世界上有無數獨特的問題,這意味著我們試圖創造無數具有無數能力的獨特IC。