Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
760 changes: 452 additions & 308 deletions Cargo.lock

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,9 @@ num-traits = { version = "0.2.19", default-features = false }
ff = { version = "0.13.1", default-features = false }
sha2 = { version = "0.10", default-features = false }

# specific to CUDA and GPU
cuda-runtime-sys = "0.3.0-alpha.1"

# For local development. Add to your `.cargo/config.toml`
# [patch."https://github.com/Plonky3/Plonky3.git"]
# p3-field = { path = "../Plonky3/field" }
Expand Down
15 changes: 14 additions & 1 deletion crates/circuits/mod-builder/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,16 @@ rand.workspace = true
num-bigint.workspace = true
num-traits.workspace = true
tracing.workspace = true

itertools.workspace = true

# CUDA dependencies (only included when cuda feature is enabled)
openvm-cuda-backend = { workspace = true, optional = true }
openvm-cuda-common = { workspace = true, optional = true }
cuda-runtime-sys = { workspace = true, optional = true }

[build-dependencies]
openvm-cuda-builder.workspace = true

[dev-dependencies]
openvm-circuit-primitives = { workspace = true }
openvm-pairing-guest = { workspace = true, features = ["halo2curves"] }
Expand All @@ -32,6 +39,12 @@ openvm-circuit = { workspace = true, features = ["test-utils"] }

[features]
default = []
cuda = [
"dep:openvm-cuda-backend",
"dep:openvm-cuda-common",
"dep:cuda-runtime-sys",
"openvm-circuit-primitives/cuda",
]
parallel = ["openvm-stark-backend/parallel"]
test-utils = [
"dep:halo2curves-axiom",
Expand Down
31 changes: 31 additions & 0 deletions crates/circuits/mod-builder/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#[cfg(feature = "cuda")]
use openvm_cuda_builder::{cuda_available, CudaBuilder};

#[cfg(feature = "cuda")]
fn main() {
if !cuda_available() {
return; // Skip CUDA compilation
}

let builder = CudaBuilder::new()
.include_from_dep("DEP_CUDA_COMMON_INCLUDE") // Import headers
.include("../primitives/cuda/include")
.include("cuda/include")
.include("../../../extensions/rv32-adapters/cuda/include")
.include("../poseidon2-air/cuda/include")
.include("../../../tracegen-gpu/cuda/src") // TODO[arayi]: change once system is migrated
.watch("src/cuda_abi.rs")
.watch("cuda")
.watch("../primitives/cuda/include")
.watch("../../../extensions/rv32-adapters/cuda/include")
.watch("../poseidon2-air/cuda/include")
.watch("../../../tracegen-gpu/cuda/src") // TODO[arayi]: change once system is migrated
.library_name("tracegen_mod_builder")
.file("cuda/src/field_expression.cu");

builder.emit_link_directives();
builder.build();
}

#[cfg(not(feature = "cuda"))]
fn main() {}
2 changes: 1 addition & 1 deletion crates/circuits/mod-builder/cuda/include/records.cuh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once

#include "../../src/extensions/rv32_adapters/vec_heap.cuh"
#include "vec_heap.cuh"

struct FieldExprCoreRecord {
uint8_t opcode;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#pragma once

#include "../../src/extensions/rv32_adapters/vec_heap.cuh"
#include "mod_builder/meta.cuh"
#include "vec_heap.cuh"
#include "meta.cuh"
#include "trace_access.h"

struct Rv32VecHeapConfig {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#include "fp.h"
#include "launcher.cuh"
#include "mod_builder/bigint_ops.cuh"
#include "mod_builder/expr_codec.cuh"
#include "mod_builder/meta.cuh"
#include "mod_builder/overflow_ops.cuh"
#include "mod_builder/records.cuh"
#include "mod_builder/rv32_vec_heap_router.cuh"
#include "bigint_ops.cuh"
#include "expr_codec.cuh"
#include "meta.cuh"
#include "overflow_ops.cuh"
#include "records.cuh"
#include "rv32_vec_heap_router.cuh"
#include "trace_access.h"
#include <cstdint>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,26 @@ use cuda_runtime_sys::{cudaDeviceSetLimit, cudaLimit};
use num_bigint::BigUint;
use num_traits::{FromBytes, One};
use openvm_circuit::utils::next_power_of_two_or_zero;
use openvm_mod_circuit_builder::{
utils::biguint_to_limbs_vec, FieldExpressionCoreAir, SymbolicExpr,
use openvm_circuit_primitives::{
bitwise_op_lookup::cuda::BitwiseOperationLookupChipGPU,
var_range::cuda::VariableRangeCheckerChipGPU,
};
use openvm_stark_backend::p3_air::BaseAir;
use stark_backend_gpu::{
base::DeviceMatrix,
cuda::{
copy::{MemCopyD2H, MemCopyH2D},
d_buffer::DeviceBuffer,
},
prelude::F,
use openvm_cuda_backend::{base::DeviceMatrix, types::F};
use openvm_cuda_common::{
copy::{MemCopyD2H, MemCopyH2D},
d_buffer::DeviceBuffer,
};
use openvm_stark_backend::p3_air::BaseAir;

use super::{
constants::*,
cuda::field_expression::tracegen,
types::{ExprMeta, ExprNode, FieldExprMeta, FieldExpressionChipGPU},
};
use crate::{
mod_builder::expr_op::ExprOp,
primitives::{
bitwise_op_lookup::BitwiseOperationLookupChipGPU, var_range::VariableRangeCheckerChipGPU,
cuda::{
constants::{ExprType, LIMB_BITS, MAX_LIMBS},
expr_op::ExprOp,
},
cuda_abi::field_expression::tracegen,
utils::biguint_to_limbs_vec,
ExprMeta, ExprNode, FieldExprMeta, FieldExpressionChipGPU, FieldExpressionCoreAir,
SymbolicExpr,
};

impl FieldExpressionChipGPU {
Expand Down Expand Up @@ -336,7 +333,6 @@ impl FieldExpressionChipGPU {
}

fn calculate_ast_depth(expr: &SymbolicExpr) -> u32 {
use openvm_mod_circuit_builder::SymbolicExpr;
match expr {
SymbolicExpr::Input(_) | SymbolicExpr::Var(_) | SymbolicExpr::Const(_, _, _) => 1,
SymbolicExpr::Add(left, right)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::mod_builder::field_expression::ExprNode;
use crate::ExprNode;

#[repr(C)]
#[derive(Debug, Clone, Copy)]
Expand Down
6 changes: 6 additions & 0 deletions crates/circuits/mod-builder/src/cuda/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
mod chip;
mod constants;
mod expr_op;
mod types;

pub use types::*;
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
use std::sync::Arc;

use stark_backend_gpu::cuda::d_buffer::DeviceBuffer;
use openvm_circuit_primitives::{
bitwise_op_lookup::cuda::BitwiseOperationLookupChipGPU,
var_range::cuda::VariableRangeCheckerChipGPU,
};
use openvm_cuda_common::d_buffer::DeviceBuffer;

use crate::{
mod_builder::{expr_op::ExprOp, field_expression::constants::LIMB_BITS},
primitives::{
bitwise_op_lookup::BitwiseOperationLookupChipGPU, var_range::VariableRangeCheckerChipGPU,
},
cuda::{constants::LIMB_BITS, expr_op::ExprOp},
FieldExpressionCoreAir,
};

#[repr(C)]
Expand Down Expand Up @@ -75,7 +77,7 @@ unsafe impl Send for FieldExprMeta {}
unsafe impl Sync for FieldExprMeta {}

pub struct FieldExpressionChipGPU {
pub air: openvm_mod_circuit_builder::FieldExpressionCoreAir,
pub air: FieldExpressionCoreAir,
pub records: Arc<DeviceBuffer<u8>>,
pub num_records: usize,
pub record_stride: usize,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#![allow(clippy::missing_safety_doc)]
#![allow(clippy::too_many_arguments)]

use stark_backend_gpu::cuda::{d_buffer::DeviceBuffer, error::CudaError};
use openvm_cuda_common::{d_buffer::DeviceBuffer, error::CudaError};

pub mod field_expression {

use super::*;
extern "C" {
fn _field_expression_tracegen(
Expand Down
8 changes: 8 additions & 0 deletions crates/circuits/mod-builder/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,11 @@ pub mod utils;

#[cfg(any(test, feature = "test-utils"))]
pub mod test_utils;

#[cfg(feature = "cuda")]
mod cuda;
#[cfg(feature = "cuda")]
mod cuda_abi;

#[cfg(feature = "cuda")]
pub use cuda::*;
8 changes: 0 additions & 8 deletions tracegen-gpu/src/mod_builder/field_expression/mod.rs

This file was deleted.

2 changes: 0 additions & 2 deletions tracegen-gpu/src/mod_builder/mod.rs

This file was deleted.

Loading