Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/core/executor/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ zkm-core-jit = { path = "../jit" }

# p3
p3-field = { workspace = true }
p3-maybe-rayon = { workspace = true, features = ["parallel"] }
p3-maybe-rayon = { workspace = true }
p3-koala-bear = { workspace = true }
p3-symmetric = { workspace = true }

Expand Down
18 changes: 9 additions & 9 deletions crates/core/executor/src/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@ use elf::{endian::LittleEndian, file::Class, ElfBytes};

use p3_field::BasedVectorSpace;
use p3_field::PrimeField32;
use p3_maybe_rayon::prelude::IndexedParallelIterator;
use p3_maybe_rayon::prelude::IntoParallelIterator;
use p3_maybe_rayon::prelude::IntoParallelRefIterator;
use p3_maybe_rayon::prelude::{ParallelBridge, ParallelIterator};
use p3_maybe_rayon::prelude::*;
use serde::{Deserialize, Serialize};
use zkm_pcs::air::MachineProgram;
use zkm_pcs::septic_curve::{SepticCurve, SepticCurveComplete};
Expand Down Expand Up @@ -382,10 +379,10 @@ impl<F: PrimeField32> MachineProgram<F> for Program {
}

fn initial_global_cumulative_sum(&self) -> SepticDigest<F> {
let mut digests: Vec<SepticCurveComplete<F>> = self
.image
.iter()
.par_bridge()
let image = self.image.iter();
#[cfg(not(target_os = "zkvm"))]
let image = image.par_bridge();
let mut digests: Vec<SepticCurveComplete<F>> = image
.map(|(&addr, &word)| {
let values = [
(LookupKind::Memory as u32) << 16,
Expand All @@ -404,7 +401,10 @@ impl<F: PrimeField32> MachineProgram<F> for Program {
.collect();
digests.push(SepticCurveComplete::Affine(SepticDigest::<F>::zero().0));
SepticDigest(
digests.into_par_iter().reduce(|| SepticCurveComplete::Infinity, |a, b| a + b).point(),
digests
.into_par_iter()
.par_fold_reduce(|| SepticCurveComplete::Infinity, |a, b| a + b, |a, b| a + b)
.point(),
)
}
}
Expand Down
6 changes: 2 additions & 4 deletions crates/core/executor/src/record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -749,9 +749,7 @@ impl MachineRecord for ExecutionRecord {
fn compute_global_cumulative_sum(events: &[GlobalLookupEvent]) -> SepticDigest<u32> {
use p3_field::BasedVectorSpace;
use p3_koala_bear::KoalaBear;
use p3_maybe_rayon::prelude::{
IndexedParallelIterator, IntoParallelRefIterator, ParallelIterator,
};
use p3_maybe_rayon::prelude::*;
type F = KoalaBear;

let acc = events
Expand All @@ -765,7 +763,7 @@ fn compute_global_cumulative_sum(events: &[GlobalLookupEvent]) -> SepticDigest<u
let point = if event.is_receive { point } else { point.neg() };
SepticCurveComplete::Affine(point)
})
.reduce(|| SepticCurveComplete::Infinity, |a, b| a + b);
.par_fold_reduce(|| SepticCurveComplete::Infinity, |a, b| a + b, |a, b| a + b);
let acc = SepticCurveComplete::Affine(SepticDigest::<F>::zero().0) + acc;
let final_digest = acc.point();
SepticDigest(SepticCurve::convert(final_digest, |x: F| x.as_canonical_u32()))
Expand Down
2 changes: 1 addition & 1 deletion crates/core/machine/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ p3-commit = { workspace = true }
p3-field = { workspace = true }
p3-keccak-air = { workspace = true }
p3-matrix = { workspace = true }
p3-maybe-rayon = { workspace = true, features = ["parallel"] }
p3-maybe-rayon = { workspace = true }
p3-poseidon2 = { workspace = true }
p3-uni-stark = { workspace = true }
p3-util = { workspace = true }
Expand Down
43 changes: 20 additions & 23 deletions crates/core/machine/src/alu/add_sub/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use itertools::Itertools;
use p3_air::{Air, AirBuilder, BaseAir, WindowAccess};
use p3_field::{Field, PrimeCharacteristicRing, PrimeField32};
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{ParallelBridge, ParallelIterator};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::{
events::{AluEvent, ByteRecord},
ExecutionRecord, Opcode, Program,
Expand Down Expand Up @@ -100,26 +100,24 @@ impl<F: PrimeField32> MachineAir<F> for AddSubChip {
let padded_nb_rows = <AddSubChip as MachineAir<F>>::num_rows(self, input).unwrap();
let mut values = zeroed_f_vec(padded_nb_rows * NUM_ADD_SUB_COLS);

values.chunks_mut(chunk_size * NUM_ADD_SUB_COLS).enumerate().par_bridge().for_each(
|(i, rows)| {
rows.chunks_mut(NUM_ADD_SUB_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut AddSubCols<F> = row.borrow_mut();

if idx < input.add_sub_events.len() {
let mut byte_lookup_events = Vec::new();
let event = &input.add_sub_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
},
);
values.par_chunks_mut(chunk_size * NUM_ADD_SUB_COLS).enumerate().for_each(|(i, rows)| {
rows.chunks_mut(NUM_ADD_SUB_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut AddSubCols<F> = row.borrow_mut();

if idx < input.add_sub_events.len() {
let mut byte_lookup_events = Vec::new();
let event = &input.add_sub_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
});

Ok(RowMajorMatrix::new(values, NUM_ADD_SUB_COLS))
}
Expand All @@ -133,8 +131,7 @@ impl<F: PrimeField32> MachineAir<F> for AddSubChip {

let blu_batches = input
.add_sub_events
.chunks(chunk_size)
.par_bridge()
.par_chunks(chunk_size)
.map(|events| {
let mut blu: zkm_core_executor::events::ByteLookupMap = Default::default();
events.iter().for_each(|event| {
Expand Down
7 changes: 3 additions & 4 deletions crates/core/machine/src/alu/add_sub_imm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use itertools::Itertools;
use p3_air::{Air, AirBuilder, BaseAir, WindowAccess};
use p3_field::{Field, PrimeCharacteristicRing, PrimeField32};
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{ParallelBridge, ParallelIterator};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::{
events::{AluEvent, ByteRecord},
ExecutionRecord, Opcode, Program,
Expand Down Expand Up @@ -99,7 +99,7 @@ impl<F: PrimeField32> MachineAir<F> for AddSubImmChip {
let padded_nb_rows = <AddSubImmChip as MachineAir<F>>::num_rows(self, input).unwrap();
let mut values = zeroed_f_vec(padded_nb_rows * NUM_ADD_SUB_IMM_COLS);

values.chunks_mut(chunk_size * NUM_ADD_SUB_IMM_COLS).enumerate().par_bridge().for_each(
values.par_chunks_mut(chunk_size * NUM_ADD_SUB_IMM_COLS).enumerate().for_each(
|(i, rows)| {
rows.chunks_mut(NUM_ADD_SUB_IMM_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
Expand Down Expand Up @@ -132,8 +132,7 @@ impl<F: PrimeField32> MachineAir<F> for AddSubImmChip {

let blu_batches = input
.add_sub_imm_events
.chunks(chunk_size)
.par_bridge()
.par_chunks(chunk_size)
.map(|events| {
let mut blu: zkm_core_executor::events::ByteLookupMap = Default::default();
events.iter().for_each(|event| {
Expand Down
38 changes: 18 additions & 20 deletions crates/core/machine/src/alu/lt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,26 +116,24 @@ impl<F: PrimeField32> MachineAir<F> for LtChip {
let mut values = zeroed_f_vec(padded_nb_rows * NUM_LT_COLS);
let chunk_size = std::cmp::max((input.lt_events.len() + 1) / num_cpus::get(), 1);

values.chunks_mut(chunk_size * NUM_LT_COLS).enumerate().par_bridge().for_each(
|(i, rows)| {
rows.chunks_mut(NUM_LT_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut LtCols<F> = row.borrow_mut();

if idx < input.lt_events.len() {
let mut byte_lookup_events = Vec::new();
let event = &input.lt_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
},
);
values.par_chunks_mut(chunk_size * NUM_LT_COLS).enumerate().for_each(|(i, rows)| {
rows.chunks_mut(NUM_LT_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut LtCols<F> = row.borrow_mut();

if idx < input.lt_events.len() {
let mut byte_lookup_events = Vec::new();
let event = &input.lt_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
});

Ok(RowMajorMatrix::new(values, NUM_LT_COLS))
}
Expand Down
38 changes: 18 additions & 20 deletions crates/core/machine/src/alu/lt_imm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,26 +116,24 @@ impl<F: PrimeField32> MachineAir<F> for LtImmChip {
let mut values = zeroed_f_vec(padded_nb_rows * NUM_LT_IMM_COLS);
let chunk_size = std::cmp::max((input.lt_imm_events.len() + 1) / num_cpus::get(), 1);

values.chunks_mut(chunk_size * NUM_LT_IMM_COLS).enumerate().par_bridge().for_each(
|(i, rows)| {
rows.chunks_mut(NUM_LT_IMM_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut LtImmCols<F> = row.borrow_mut();

if idx < input.lt_imm_events.len() {
let mut byte_lookup_events = Vec::new();
let event = &input.lt_imm_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
},
);
values.par_chunks_mut(chunk_size * NUM_LT_IMM_COLS).enumerate().for_each(|(i, rows)| {
rows.chunks_mut(NUM_LT_IMM_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut LtImmCols<F> = row.borrow_mut();

if idx < input.lt_imm_events.len() {
let mut byte_lookup_events = Vec::new();
let event = &input.lt_imm_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
});

Ok(RowMajorMatrix::new(values, NUM_LT_IMM_COLS))
}
Expand Down
38 changes: 18 additions & 20 deletions crates/core/machine/src/alu/mul/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ use zkm_pcs::air::BaseAirBuilder;
use p3_air::{Air, AirBuilder, BaseAir, WindowAccess};
use p3_field::{PrimeCharacteristicRing, PrimeField32};
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{ParallelBridge, ParallelIterator, ParallelSlice};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::{
events::{ByteLookupEvent, ByteRecord, CompAluEvent, MemoryAccessPosition, MemoryRecordEnum},
ByteOpcode, ExecutionRecord, Opcode, Program,
Expand Down Expand Up @@ -166,26 +166,24 @@ impl<F: PrimeField32> MachineAir<F> for MulChip {
let nb_rows = input.mul_events.len();
let chunk_size = std::cmp::max((nb_rows + 1) / num_cpus::get(), 1);

values.chunks_mut(chunk_size * NUM_MUL_COLS).enumerate().par_bridge().for_each(
|(i, rows)| {
rows.chunks_mut(NUM_MUL_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut MulCols<F> = row.borrow_mut();
values.par_chunks_mut(chunk_size * NUM_MUL_COLS).enumerate().for_each(|(i, rows)| {
rows.chunks_mut(NUM_MUL_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
let cols: &mut MulCols<F> = row.borrow_mut();

if idx < nb_rows {
let mut byte_lookup_events = Vec::new();
let event = &input.mul_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
},
);
if idx < nb_rows {
let mut byte_lookup_events = Vec::new();
let event = &input.mul_events[idx];
self.event_to_row(
event,
cols,
&mut byte_lookup_events,
&input.program,
input.public_values.execution_shard,
);
}
});
});

Ok(RowMajorMatrix::new(values, NUM_MUL_COLS))
}
Expand Down
4 changes: 2 additions & 2 deletions crates/core/machine/src/alu/sr/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ use itertools::Itertools;
use p3_air::{Air, AirBuilder, BaseAir, WindowAccess};
use p3_field::{PrimeCharacteristicRing, PrimeField32};
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{ParallelBridge, ParallelIterator, ParallelSlice};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::{
events::{AluEvent, ByteLookupEvent, ByteRecord},
ByteOpcode, ExecutionRecord, Opcode, Program,
Expand Down Expand Up @@ -171,7 +171,7 @@ impl<F: PrimeField32> MachineAir<F> for ShiftRightChip {
let mut values = zeroed_f_vec(padded_nb_rows * NUM_SHIFT_RIGHT_COLS);
let chunk_size = std::cmp::max((nb_rows + 1) / num_cpus::get(), 1);

values.chunks_mut(chunk_size * NUM_SHIFT_RIGHT_COLS).enumerate().par_bridge().for_each(
values.par_chunks_mut(chunk_size * NUM_SHIFT_RIGHT_COLS).enumerate().for_each(
|(i, rows)| {
rows.chunks_mut(NUM_SHIFT_RIGHT_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
Expand Down
4 changes: 2 additions & 2 deletions crates/core/machine/src/alu/sr_imm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ use itertools::Itertools;
use p3_air::{Air, AirBuilder, BaseAir, WindowAccess};
use p3_field::{PrimeCharacteristicRing, PrimeField32};
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{ParallelBridge, ParallelIterator, ParallelSlice};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::{
events::{AluEvent, ByteLookupEvent, ByteRecord},
ByteOpcode, ExecutionRecord, Opcode, Program,
Expand Down Expand Up @@ -169,7 +169,7 @@ impl<F: PrimeField32> MachineAir<F> for ShiftRightImmChip {
let mut values = zeroed_f_vec(padded_nb_rows * NUM_SHIFT_RIGHT_IMM_COLS);
let chunk_size = std::cmp::max((nb_rows + 1) / num_cpus::get(), 1);

values.chunks_mut(chunk_size * NUM_SHIFT_RIGHT_IMM_COLS).enumerate().par_bridge().for_each(
values.par_chunks_mut(chunk_size * NUM_SHIFT_RIGHT_IMM_COLS).enumerate().for_each(
|(i, rows)| {
rows.chunks_mut(NUM_SHIFT_RIGHT_IMM_COLS).enumerate().for_each(|(j, row)| {
let idx = i * chunk_size + j;
Expand Down
2 changes: 1 addition & 1 deletion crates/core/machine/src/memory/bump.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use p3_air::{Air, BaseAir, WindowAccess};
use p3_field::PrimeCharacteristicRing;
use p3_field::PrimeField32;
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{IndexedParallelIterator, ParallelIterator, ParallelSliceMut};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::events::{ByteLookupEvent, ByteRecord, MemoryBumpEvent, MemoryReadRecord};
use zkm_core_executor::{ByteOpcode, ExecutionRecord, Program, NUM_REGISTERS};
use zkm_derive::AlignedBorrow;
Expand Down
4 changes: 1 addition & 3 deletions crates/core/machine/src/memory/local.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ use p3_air::{Air, AirBuilder, BaseAir, WindowAccess};
use p3_field::PrimeCharacteristicRing;
use p3_field::PrimeField32;
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{
IndexedParallelIterator, IntoParallelRefMutIterator, ParallelIterator,
};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::events::{ByteRecord, GlobalLookupEvent, MemoryLocalEvent};
use zkm_core_executor::{ExecutionRecord, Program};
use zkm_derive::AlignedBorrow;
Expand Down
5 changes: 2 additions & 3 deletions crates/core/machine/src/misc/mov_cond/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use itertools::Itertools;
use p3_air::{Air, AirBuilder, BaseAir, WindowAccess};
use p3_field::{PrimeCharacteristicRing, PrimeField32};
use p3_matrix::dense::RowMajorMatrix;
use p3_maybe_rayon::prelude::{ParallelBridge, ParallelIterator};
use p3_maybe_rayon::prelude::*;
use zkm_core_executor::{
events::{ByteRecord, MovCondEvent},
ExecutionRecord, Opcode, Program,
Expand Down Expand Up @@ -104,9 +104,8 @@ impl<F: PrimeField32> MachineAir<F> for MovCondChip {
let mut values = zeroed_f_vec(padded_nb_rows * NUM_MOV_COND_COLS);

let blu_events = values
.chunks_mut(chunk_size * NUM_MOV_COND_COLS)
.par_chunks_mut(chunk_size * NUM_MOV_COND_COLS)
.enumerate()
.par_bridge()
.map(|(i, rows)| {
let mut blu: zkm_core_executor::events::ByteLookupMap = Default::default();
rows.chunks_mut(NUM_MOV_COND_COLS).enumerate().for_each(|(j, row)| {
Expand Down
Loading
Loading