Altcoin

Scrypt(萊特幣)記憶體/性能權衡

  • April 17, 2016

對於萊特幣,如果在處理 Scrypt 算法時記憶體大小增加,例如增加到 384 kB 而不是 128 kB(並且同樣假設 L2 記憶體大小為 384 kB),典型的 CPU 架構(x86、PPC 等)是否可能看到相應的性能提升?如果使用增加的記憶體大小,挖礦輸出是否會保持 100% 與萊特幣兼容(我相信答案是肯定的,但我也注意到幾乎所有 GPU 礦工都使用 N、r 和 p 的固定 Scrypt 參數)。

我意識到由於各種原因,通常不會在 GPU 架構上增加 BlockMix 記憶體大小。另外請注意,我的目標不是盈利的 Litecoin x86 CPU 挖礦——我只是想確保我了解記憶體/性能的權衡。

對於萊特幣,如果在處理 Scrypt 算法時增加記憶體大小,例如增加到 384 kB 而不是 128 kB (…),典型的 CPU 架構 (…) 是否可能會看到相應的性能提升?

不,它的作用正好相反。如果增加 scrypt 用來生成單個雜湊的記憶體,理論上生成它所需的時間會增加。如果處理單元可以在單個數據傳輸呼叫中充分使用其最快的現金,則時間可能不會增加。但是,您需要標準化的硬體,並且您可能希望為它特意調整 scrypt 記憶體大小。這在全球使用者規模上是不方便的。

此外,決定 scrypt 的記憶體大小並不取決於您個人。這是所有萊特幣使用者的普遍協議,即 scrypt 算法的記憶體大小必須為N字節。如果您想使用其他東西,您發出的任何交易將永遠不會得到任何其他使用者的驗證。

否。將塊大小增加到 384KB 對 scrypt 算法沒有幫助。scrypt參數N=1024,R=P=1的萊特幣,單次計算只需要128KB記憶體空間。而且它們已經完全對齊,而不是稀疏數組。在較大的記憶體空間中對小數據建模意味著局部性較差。

加速 scrypt 的關鍵是並行性,因為探勘過程是在非常大的解決方案空間中找到一個有效的隨機數。所以如果記憶體是瓶頸,CPU需要等待記憶體讀/寫操作完成才能繼續目前的雜湊計算,但實際上,CPU的ALU(或計算單元)可以繼續執行其他雜湊計算執行緒的其他指令不需要記憶體訪問或其數據現在已準備好。這就是引入 SIMD 的關鍵。所以 CPU AVX 性能優於 SSE/MMX,更新的 AVX-2 可以達到更好的性能。

在 GPU 中,有很多計算單元,它不像 CPU 只有 2/4/8/… 核心。GPU 有許多流處理器和調度硬體。當計算等待 GDDR VRAM 訪問完成時,它可以調度 ALU 硬體來執行其他計算。

事實上,目前GPU挖礦每一次scrypt hashing的記憶體塊大小配置是最好的,lookup-gap是2。也就是說每一次scrypt操作只有64KB。因為在 CPU 或 GPU 中,訪問全域記憶體非常廣泛,而 scrypt 沒有完全線性的記憶體訪問模式。(它隨機訪問索引 1 到 1024 之間的矢量化數據)。因此更少的記憶體訪問也可以加快總計算時間,但成本是 GPU 需要計算之前沒有保存到記憶體中的數據。比如GPU計算1到1024的向量化數據,但是只保存了1,3,5,7,… 所以當scrypt算法需要index=4的數據時,GPU需要檢索index=3的數據重新計算獲取 index=4 的數據。但是私有記憶體(GPR,通用寄存器,GPU 有很多)中 index=4 的計算非常快。但性能並不總是通過增加查找差距而得到改善。雖然顯著減少了記憶體訪問,但 GPU 需要做冗餘工作來頻繁地重新計算數據。比如lookup gap=3時,GPU只保存1,4,7,… 但是當scrypt需要index=6的數據時,需要檢索index=4的數據,計算兩次。

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