Skip to content

Commit df01e24

Browse files
authored
feat: using plonky3 maybe-rayon instead of rayon for optional parallelism (#8)
* feat: using p3-maybe-rayon for mpcs and witness crates * feat: using p3-maybe-rayon for whir crate * feat: using p3-maybe-rayon for multilinear_extensions crate * refactor: removing unnecessary flags and fixing linting issues * refactor: remaining fixes in mpcs and whir crates * feat: changes in crate dependencies * correcting whir dependency in mpcs crate
1 parent a140b93 commit df01e24

35 files changed

Lines changed: 94 additions & 145 deletions

Makefile.toml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CARGO_MAKE_EXTEND_WORKSPACE_MAKEFILE = true
44
[tasks.tests]
55
args = [
66
"test",
7+
"--all-features",
78
# Run everything but 'benches'.
89
"--lib",
910
"--bins",
@@ -16,6 +17,14 @@ env = { RUST_MIN_STACK = "33554432" }
1617
workspace = false
1718

1819
[tasks.clippy]
19-
args = ["clippy", "--workspace", "--all-targets", "--", "-D", "warnings"]
20+
args = [
21+
"clippy",
22+
"--workspace",
23+
"--all-targets",
24+
"--all-features",
25+
"--",
26+
"-D",
27+
"warnings",
28+
]
2029
command = "cargo"
2130
workspace = false

crates/curves/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ serde = { workspace = true, features = ["derive"] }
2424
typenum = "1.17.0"
2525

2626
cfg-if.workspace = true
27-
ff_ext = { version = "0.1.0", path = "../ff_ext" }
28-
itertools = { workspace = true }
29-
multilinear_extensions = { version = "0.1.0", path = "../multilinear_extensions" }
27+
ff_ext.workspace = true
28+
itertools.workspace = true
29+
multilinear_extensions.workspace = true
3030
rug = { version = "1.26.1", optional = true }
3131

3232
[dev-dependencies]

crates/mpcs/Cargo.toml

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ bincode = "1.3.3"
1414
clap.workspace = true
1515
ff_ext.workspace = true
1616
itertools.workspace = true
17-
whir.workspace = true
17+
whir = { workspace = true, optional = true }
1818
multilinear_extensions.workspace = true
1919
num-integer = "0.1"
2020
p3.workspace = true
@@ -32,18 +32,9 @@ witness.workspace = true
3232
criterion.workspace = true
3333

3434
[features]
35-
benchmark = ["parallel"]
36-
default = ["parallel"] # Add "sanity-check" to debug
37-
nightly-features = [
38-
"p3/nightly-features",
39-
"ff_ext/nightly-features",
40-
"multilinear_extensions/nightly-features",
41-
"sumcheck/nightly-features",
42-
"transcript/nightly-features",
43-
"whir/nightly-features",
44-
"witness/nightly-features",
45-
]
46-
parallel = ["dep:rayon"]
35+
nightly-features = ["ff_ext/nightly-features"]
36+
parallel = ["p3/parallel", "dep:rayon"]
37+
whir = ["dep:whir"]
4738
print-trace = ["whir/print-trace"]
4839
sanity-check = []
4940

@@ -62,3 +53,4 @@ name = "interpolate"
6253
[[bench]]
6354
harness = false
6455
name = "whir"
56+
required-features = ["whir"]

crates/mpcs/benches/interpolate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ use itertools::Itertools;
77
use mpcs::util::arithmetic::interpolate_field_type_over_boolean_hypercube;
88

99
use multilinear_extensions::mle::{FieldType, MultilinearExtension};
10+
use p3::maybe_rayon::prelude::*;
1011
use rand::{SeedableRng, rngs::OsRng};
1112
use rand_chacha::ChaCha8Rng;
12-
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
1313

1414
type E = GoldilocksExt2;
1515

crates/mpcs/src/basefold/commit_phase.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ use multilinear_extensions::{
3838
mle::{IntoMLE, MultilinearExtension},
3939
virtual_poly::build_eq_x_r_vec,
4040
};
41-
use rayon::{
42-
iter::{IntoParallelIterator, IntoParallelRefMutIterator},
43-
prelude::{IndexedParallelIterator, ParallelIterator},
44-
slice::ParallelSlice,
45-
};
41+
use p3::maybe_rayon::prelude::*;
4642

4743
use super::structure::BasefoldCommitmentWithWitness;
4844

crates/mpcs/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ pub enum Error {
258258
PolynomialSizesNotEqual,
259259
MerkleRootMismatch,
260260
PointEvalMismatch(String),
261+
#[cfg(feature = "whir")]
261262
WhirError(whir_external::error::Error),
262263
}
263264

@@ -266,9 +267,12 @@ pub use basefold::{
266267
Basefold, BasefoldCommitment, BasefoldCommitmentWithWitness, BasefoldDefault, BasefoldParams,
267268
BasefoldRSParams, BasefoldSpec, EncodingScheme, RSCode, RSCodeDefaultSpec,
268269
};
270+
#[cfg(feature = "whir")]
269271
extern crate whir as whir_external;
272+
#[cfg(feature = "whir")]
270273
mod whir;
271274
use multilinear_extensions::mle::ArcMultilinearExtension;
275+
#[cfg(feature = "whir")]
272276
pub use whir::{Whir, WhirDefault, WhirDefaultSpec};
273277

274278
// TODO: Need to use some functions here in the integration benchmarks. But
@@ -379,7 +383,7 @@ pub mod test_util {
379383
}
380384
}
381385

382-
#[cfg(test)]
386+
#[cfg(all(test, feature = "whir"))]
383387
pub(super) fn run_simple_batch_commit_open_verify<E, Pcs>(
384388
num_vars_start: usize,
385389
num_vars_end: usize,

crates/mpcs/src/util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub(crate) fn codeword_fold_with_challenge<E: ExtensionField>(
101101
lo + challenge * (hi - lo)
102102
}
103103

104-
#[cfg(any(test, feature = "benchmark"))]
104+
#[cfg(test)]
105105
pub mod test {
106106
use ff_ext::FromUniformBytes;
107107
use rand::{

crates/multilinear_extensions/Cargo.toml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ log = "0.4"
2626
serde_json.workspace = true
2727

2828
[features]
29-
default = ["parallel"]
30-
nightly-features = ["p3/nightly-features", "ff_ext/nightly-features"]
31-
parallel = []
29+
nightly-features = ["ff_ext/nightly-features"]
30+
parallel = ["p3/parallel"]
3231

3332
[[bench]]
3433
harness = false

crates/multilinear_extensions/src/expression.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ use crate::{
99
};
1010
use ff_ext::{ExtensionField, SmallField};
1111
use itertools::{Either, Itertools, chain, izip};
12-
use p3::field::FieldAlgebra;
13-
use rayon::iter::{IntoParallelIterator, IntoParallelRefIterator, ParallelIterator};
12+
use p3::{field::FieldAlgebra, maybe_rayon::prelude::*};
1413
use serde::de::DeserializeOwned;
1514
use std::{
1615
cmp::max,

crates/multilinear_extensions/src/mle.rs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,13 @@ use crate::{
99
};
1010
use either::Either;
1111
use ff_ext::{ExtensionField, FromUniformBytes};
12-
use p3::field::{Field, FieldAlgebra};
13-
use rand::Rng;
14-
use rayon::{
15-
iter::{
16-
IndexedParallelIterator, IntoParallelIterator, IntoParallelRefIterator,
17-
IntoParallelRefMutIterator, ParallelIterator,
18-
},
19-
slice::ParallelSliceMut,
12+
#[cfg(not(feature = "parallel"))]
13+
use itertools::Itertools;
14+
use p3::{
15+
field::{Field, FieldAlgebra},
16+
maybe_rayon::prelude::*,
2017
};
18+
use rand::Rng;
2119
use serde::{Deserialize, Serialize, de::DeserializeOwned};
2220
use std::fmt::Debug;
2321

@@ -612,10 +610,8 @@ impl<'a, E: ExtensionField> MultilinearExtension<'a, E> {
612610
Cow::Owned(MultilinearExtension::from_evaluations_ext_vec(
613611
self.num_vars() - 1,
614612
evaluations
615-
.par_iter()
616-
.chunks(2)
617-
.with_min_len(64)
618-
.map(|buf| *point * (*buf[1] - *buf[0]) + *buf[0])
613+
.par_chunks(2)
614+
.map(|buf| *point * (buf[1] - buf[0]) + buf[0])
619615
.collect(),
620616
))
621617
});
@@ -645,10 +641,8 @@ impl<'a, E: ExtensionField> MultilinearExtension<'a, E> {
645641
match &mut self.evaluations {
646642
FieldType::Base(slice) => {
647643
let slice_ext = slice
648-
.par_iter()
649-
.chunks(2)
650-
.with_min_len(64)
651-
.map(|buf| *point * (*buf[1] - *buf[0]) + *buf[0])
644+
.par_chunks(2)
645+
.map(|buf| *point * (buf[1] - buf[0]) + buf[0])
652646
.collect();
653647
let _ = mem::replace(
654648
&mut self.evaluations,
@@ -658,10 +652,8 @@ impl<'a, E: ExtensionField> MultilinearExtension<'a, E> {
658652
FieldType::Ext(slice) => {
659653
let slice_mut = slice.to_mut();
660654
slice_mut
661-
.par_iter_mut()
662-
.chunks(2)
663-
.with_min_len(64)
664-
.for_each(|mut buf| *buf[0] = *buf[0] + (*buf[1] - *buf[0]) * *point);
655+
.par_chunks_mut(2)
656+
.for_each(|buf| buf[0] = buf[0] + (buf[1] - buf[0]) * *point);
665657

666658
// sequentially update buf[b1, b2,..bt] = buf[b1, b2,..bt, 0]
667659
for index in 0..1 << (max_log2_size - 1) {

0 commit comments

Comments
 (0)