為什麼SDR這麼慢?

買賣虛擬貨幣

Lotus的Sector處理的演算法,從window SDR切換到了SDR。所謂的SDR,就是Stacked DRG (Depth Robust Graph,深度魯棒圖)。重點,就在於演算法去掉了“window”。切換演算法後,在intel的CPU上,Sector處理(Precommit phase1)階段的時間非常長,超過了30個小時。Filecoin官方,推薦AMD的RX 3970x,Sector處理時間在4個小時左右。本文深入SDR的邏輯,分析Sector處理慢的原因。相關的邏輯實現在rust-fil-proof專案中,本文中使用的原始碼的最後一個提交資訊如下:

commit 14870d715f1f6019aba3f72772659e38184378bfAuthor: Rod Vagg <[email protected]>Date:  Fri Mar 20 22:30:18 2020 +1100  feat(filecoin-proofs): expose filecoin_proofs::pad_reader

01回顧window SDR演算法

window SDR演算法中的window,就是每個Sector的資料,先分割成一個個128M的window。

一個32G的Sector會劃分成256個window。window和window之間相互獨立。每個window,單獨進行SDR的計算(labeling encode)。總共需要做4層(layer)。也就是說,獨立的window之間,做4層運算。層與層之間滿足SDR的關係。

02SDR演算法

相對window SDR,SDR的演算法更加簡單和粗暴。一個Sector,再也不劃分window。整個Sector,進行SDR的計算,並且計算11層。相關原始碼從storage-proofs/src/porep/stacked/vanilla/proof.rs的generate_labels函式開始。

計算SDR的過程,可以拆分為三步。

在計算SDR之前,整個Sector,每32個位元組,分割成一個個的節點(node)。為什麼要分割成節點,因為DRG。有了節點,才能按照圖,確定節點和節點之間的關係。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;