Avoid rayon in lighthouse block verification (#5992)

* Avoid rayon in lighthouse
This commit is contained in:
Pawan Dhananjay
2024-06-27 00:35:11 -07:00
committed by GitHub
parent a910a498a8
commit f106533ebc

View File

@@ -4,7 +4,6 @@ use super::signature_sets::{Error as SignatureSetError, *};
use crate::per_block_processing::errors::{AttestationInvalid, BlockOperationError};
use crate::{ConsensusContext, ContextError};
use bls::{verify_signature_sets, PublicKey, PublicKeyBytes, SignatureSet};
use rayon::prelude::*;
use std::borrow::Cow;
use types::{
AbstractExecPayload, BeaconState, BeaconStateError, ChainSpec, EthSpec, Hash256,
@@ -411,15 +410,10 @@ impl<'a> ParallelSignatureSets<'a> {
/// It is not possible to know exactly _which_ signature is invalid here, just that
/// _at least one_ was invalid.
///
/// Uses `rayon` to do a map-reduce of Vitalik's method across multiple cores.
/// Blst library spreads the signature verification work across multiple available cores, so
/// this function is already parallelized.
#[must_use]
pub fn verify(self) -> bool {
let num_sets = self.sets.len();
let num_chunks = std::cmp::max(1, num_sets / rayon::current_num_threads());
self.sets
.into_par_iter()
.chunks(num_chunks)
.map(|chunk| verify_signature_sets(chunk.iter()))
.reduce(|| true, |current, this| current && this)
verify_signature_sets(self.sets.iter())
}
}