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函数。
Column Hash计算
Column Hash计算的实现在generate_tree_c函数。具体的实现分为两个版本:CPU和GPU版本。
if settings::SETTINGS.lock().unwrap().use_gpu_column_builder {
Self::generate_tree_c_gpu::<ColumnArity, TreeArity>(
layers,
nodes_count,
tree_count,
configs,
labels,
)
} else {
Self::generate_tree_c_cpu::<ColumnArity, TreeArity>(
layers,
nodes_count,
tree_count,
configs,
labels,
)
}
GPU版本的逻辑相对复杂一些,讲讲GPU的逻辑: