Skip to main content

openvm_cpu_backend/
backend.rs

1//! Row-major [ProverBackend] implementation.
2
3use std::marker::PhantomData;
4
5use openvm_stark_backend::{prover::ProverBackend, StarkProtocolConfig};
6use p3_matrix::dense::RowMajorMatrix;
7
8use crate::pcs_data::CpuStackedPcsData;
9
10/// Row-major CPU prover backend.
11///
12/// Uses `RowMajorMatrix<SC::F>` as the matrix type for better cache locality
13/// during constraint evaluation.
14#[derive(Clone, Copy)]
15pub struct CpuBackend<SC: StarkProtocolConfig>(PhantomData<SC>);
16
17impl<SC: StarkProtocolConfig> CpuBackend<SC> {
18    pub fn new() -> Self {
19        Self(PhantomData)
20    }
21}
22
23impl<SC: StarkProtocolConfig> Default for CpuBackend<SC> {
24    fn default() -> Self {
25        Self::new()
26    }
27}
28
29impl<SC: StarkProtocolConfig> ProverBackend for CpuBackend<SC> {
30    const CHALLENGE_EXT_DEGREE: u8 = SC::D_EF as u8;
31
32    type Val = SC::F;
33    type Challenge = SC::EF;
34    type Commitment = SC::Digest;
35    type Matrix = RowMajorMatrix<SC::F>;
36    type OtherAirData = ();
37    type PcsData = CpuStackedPcsData<SC::F, SC::Digest>;
38}