Skip to content

Commit ac71258

Browse files
Peder optimization #1 (#848)
* Pedersen * Add random in bench * Fix seed * Opt * Fix bench * Apply format * Change version in winerfell adapter * Fix clippy --------- Co-authored-by: Mariano Nicolini <[email protected]>
1 parent 019cfcf commit ac71258

File tree

6 files changed

+36
-9
lines changed

6 files changed

+36
-9
lines changed

crypto/Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ rayon = { version = "1.8.0", optional = true }
2020
criterion = "0.4"
2121
iai-callgrind.workspace = true
2222
rand = "0.8.5"
23+
rand_chacha = "0.3.1"
2324

2425
[features]
2526
default = ["std"]
@@ -39,3 +40,7 @@ harness = false
3940
[[bench]]
4041
name= "criterion_poseidon"
4142
harness=false
43+
44+
[[bench]]
45+
name= "criterion_pedersen"
46+
harness=false
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
use lambdaworks_crypto::hash::pedersen::Pedersen;
3+
use lambdaworks_math::field::element::FieldElement;
4+
use lambdaworks_math::field::fields::fft_friendly::stark_252_prime_field::Stark252PrimeField;
5+
use lambdaworks_math::traits::ByteConversion;
6+
use rand::{RngCore, SeedableRng};
7+
use rand_chacha::ChaCha8Rng;
8+
9+
fn pedersen_benchmarks(c: &mut Criterion) {
10+
let mut rng = ChaCha8Rng::seed_from_u64(2);
11+
let mut felt1: [u8; 32] = Default::default();
12+
rng.fill_bytes(&mut felt1);
13+
let mut felt2: [u8; 32] = Default::default();
14+
rng.fill_bytes(&mut felt2);
15+
16+
let x = FieldElement::<Stark252PrimeField>::from_bytes_be(&felt1).unwrap();
17+
let y = FieldElement::<Stark252PrimeField>::from_bytes_be(&felt2).unwrap();
18+
let mut group = c.benchmark_group("Pedersen Benchmark");
19+
let pedersen = black_box(Pedersen::default());
20+
21+
// Benchmark with black_box is 0.41% faster
22+
group.bench_function("Hashing with black_box", |bench| {
23+
bench.iter(|| black_box(pedersen.hash(&x, &y)))
24+
});
25+
}
26+
criterion_group!(pedersen, pedersen_benchmarks);
27+
criterion_main!(pedersen);

crypto/src/hash/pedersen/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use lambdaworks_math::{
2-
cyclic_group::IsGroup,
32
elliptic_curve::short_weierstrass::{
43
curves::stark_curve::StarkCurve, point::ShortWeierstrassProjectivePoint,
54
},
@@ -69,7 +68,7 @@ impl Pedersen {
6968
let offset = bools_to_usize_le(v);
7069
if offset > 0 {
7170
// Table lookup at 'offset-1' in table for chunk 'i'
72-
*acc = acc.operate_with(&prep[i * self.params.table_size + offset - 1]);
71+
*acc = acc.operate_with_affine(&prep[i * self.params.table_size + offset - 1]);
7372
}
7473
})
7574
}

examples/prove-miden/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ path = "src/main.rs"
1313
lambdaworks-crypto = { workspace = true }
1414
lambdaworks-math = { workspace = true, features = ["lambdaworks-serde-string"] }
1515
lambdaworks-winterfell-adapter = { workspace = true }
16-
stark-platinum-prover = { git = "https://github.com/lambdaclass/lambdaworks" , rev = "3da725de1e6f76c04ddbb3ccb67e6038a7663134", features = ["winter_compatibility"] }
16+
stark-platinum-prover = { git = "https://github.com/lambdaclass/lambdaworks" , branch = "miden-version", features = ["winter_compatibility"] }
1717

1818
serde = { version = "1.0" }
1919
serde_json = "1"

provers/cairo/src/wasm_wrappers.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,11 @@ use lambdaworks_math::field::fields::fft_friendly::stark_252_prime_field::Stark2
44
use serde::{Deserialize, Serialize};
55
use stark_platinum_prover::proof::options::ProofOptions;
66
use stark_platinum_prover::proof::options::SecurityLevel;
7-
use stark_platinum_prover::proof::stark::StarkProof;
87
use stark_platinum_prover::transcript::StoneProverTranscript;
98
use stark_platinum_prover::verifier::{IsStarkVerifier, Verifier};
109
use std::collections::HashMap;
1110
use wasm_bindgen::prelude::wasm_bindgen;
1211

13-
#[wasm_bindgen]
14-
pub struct Stark252PrimeFieldProof(StarkProof<Stark252PrimeField, Stark252PrimeField>);
15-
1612
#[wasm_bindgen]
1713
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Eq, PartialEq, Hash)]
1814
pub struct FE(FieldElement<Stark252PrimeField>);

provers/winterfell_adapter/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ edition.workspace = true
55
license.workspace = true
66

77
[dependencies]
8-
lambdaworks-math = { git = "https://github.com/lambdaclass/lambdaworks", rev = "3da725de1e6f76c04ddbb3ccb67e6038a7663134", features = ["winter_compatibility"] }
9-
stark-platinum-prover = { git = "https://github.com/lambdaclass/lambdaworks" , rev = "3da725de1e6f76c04ddbb3ccb67e6038a7663134", features = ["winter_compatibility"] }
8+
lambdaworks-math = { git = "https://github.com/lambdaclass/lambdaworks", branch = "miden-version", features = ["winter_compatibility"] }
9+
stark-platinum-prover = { git = "https://github.com/lambdaclass/lambdaworks" , branch = "miden-version", features = ["winter_compatibility"] }
1010
rand = "0.8.5"
1111
winter-air = { package = "winter-air", version = "0.6.4", default-features = false }
1212
winter-prover = { package = "winter-prover", version = "0.6.4", default-features = false }

0 commit comments

Comments
 (0)