Filecoin – Precommit2计算介绍 -

Filecoin – Precommit2计算介绍 New

摘要:Sector计算的部分分为Precommit1和Precommit2两部分。两部分合在一起,称为SDR算法。整个SDR算法的相关计算在之前的文章介绍过。本文着重介绍一下Precommit2的计算逻辑。

Sector计算的部分分为Precommit1和Precommit2两部分。两部分合在一起,称为SDR算法。整个SDR算法的相关计算在之前的文章介绍过。本文着重介绍一下Precommit2的计算逻辑。Precommit2计算分为两部分:1/ Column Hash计算以及Merkle树构造 2/ Replica计算以及Merkle树的构造。相关的逻辑请查看rust-fil-proofs/storage-proofs/porep/src/stacked/vanilla/proof.rs中的transform_and_replicate_layers函数。

1 Column Hash计算

Column Hash计算的实现在generate_tree_c函数。具体的实现分为两个版本:CPU和GPU版本。

if settings::SETTINGS.lock().unwrap().use_gpu_column_builder {
       Self::generate_tree_c_gpu::(
           layers,
           nodes_count,
           tree_count,
           configs,
           labels,
        )
} else {
       Self::generate_tree_c_cpu::(
           layers,
           nodes_count,
           tree_count,
           configs,
           labels,
       )
}

GPU版本的逻辑相对复杂一些,讲讲GPU的逻辑:

进行column计算,需要从硬盘读取11层layer的数据,并整合成column排布。GPU版本,一批批的进行处理,将一部分column读取排序后,通过channel送给GPU处理(Column Hash以及构造Merkle树)。代码逻辑大体上就是两个线程,一个读取layer的数据,column排序,另外一个GPU处理。每次batch的节点个数默认是400000,也就是135M左右。在column计算完成后,GPU构造Merkle树。

2 Replica计算

Replica是最后一层layer的数据和原始数据编码之后的结果。每次Encoding一部分Replica,通过channel送给GPU(构造Merkle树)。每次batch的节点个数默认是700000,也就是22M左右。注意,batch的是Encoding的结果。

3 Merkle树的构造

Merkle树的构造都是采用merkletree库。这个库实现通用的Merkle树的结构和计算。通用的Merkle树,指的是Merkle并不只是通常我们理解的二叉树,而是分成3层:top,sub和base。

如上图的示例,top是1叉,sub是3叉,base是4叉。在Precommit2计算中,tree_c和tree_r_last都是8叉树:

type Tree = storage_proofs::merkle::OctMerkleTree;
pub type OctMerkleTree= DiskTree;

4 GPU加速

在Precommit2计算中,Column Hash的计算以及Merkle树的构造是采用GPU加速。相关的代码在neptune代码库中。有意思的是,这部分的代码并不是用cuda或者opencl实现的,而是一种新的更高层的语言:Futhark。

5 相关宏定义

FIL_PROOFS_USE_GPU_COLUMN_BUILDER – 使用GPU,进行column hash的计算

FIL_PROOFS_MAX_GPU_COLUMN_BATCH_SIZE – 每次计算Column的batch大小,默认400000

FIL_PROOFS_COLUMN_WRITE_BATCH_SIZE – 每次刷Column数据的batch大小,默认262144

FIL_PROOFS_USE_GPU_TREE_BUILDER – 使用GPU,构造Merkle树

FIL_PROOFS_MAX_GPU_TREE_BATCH_SIZE – 每次Encoding计算的batch大小,默认700000

总结:

Precommit2阶段,主要是计算Column Hash以及生成Replica,并构造相应的Merkle树。其中,Column Hash的计算以及Merkle树的构造可以采用GPU加速。GPU的实现采用一种新的高层语言:Futhark。

来源:Star Li

声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。

本文转载自互联网,如有侵权,联系删除

下一篇:没有了

相关推荐

Filecoin – Precommit2计算介绍 -

Filecoin – Precommit2计算介绍 -

Filecoin – Precommit2计算介绍 New 摘要:Sector计算的部分分为Precommit1和Precommit2两部分。两部分合在一起,称为SDR算法。整个SDR算法的相关计算在之前的文章介绍过。本文着重介绍一下Pre

2021-09-06 138

吉比特倒下暴露矿圈涉币大坑

吉比特倒下暴露矿圈涉币大坑

作者|凯尔 编辑|文刀 一日之内, LTG 暴跌超过 60% ,吉比特矿池客户端无法登录, 这 两个项目 的 实控人 “ 雷总 ” 被拘留的消息 广传于圈内。 1年来,号称“在吉尔吉斯斯坦拥有政府

2021-09-06 183

以太坊挖矿DAG文件成隐忧,矿工该如何解决?

以太坊挖矿DAG文件成隐忧,矿工该如何解决?

本文来源:彩云区块链 近期以太坊涨势喜人,吸引了很多人的关注,由于以太坊挖矿的利润较高,因此很多比特币矿工都开启了以太坊的挖矿之路,市面上的显卡现在又显得比较紧俏了

2021-09-06 144

加拿大比特币矿业公司Hut 8第二季度收入下滑28%

加拿大比特币矿业公司Hut 8第二季度收入下滑28%

律动 BlockBeats 消息,加拿大比特币矿商 Hut 8 公布了其 2020 年第二季度收益,收入大幅下滑。该公司因为所持比特币升值,从而帮助 Hut 8 实现了本季度的盈利。上个季度,这家上市公司

2021-09-06 72

发布评论

点击我更换图片