Skip to content

Commit 26119b8

Browse files
feat: migrate mod builder (#1980)
migrated `mod-builder` cuda tracegen
1 parent f4a9bf9 commit 26119b8

File tree

16 files changed

+549
-355
lines changed

16 files changed

+549
-355
lines changed

Cargo.lock

Lines changed: 452 additions & 308 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,9 @@ num-traits = { version = "0.2.19", default-features = false }
253253
ff = { version = "0.13.1", default-features = false }
254254
sha2 = { version = "0.10", default-features = false }
255255

256+
# specific to CUDA and GPU
257+
cuda-runtime-sys = "0.3.0-alpha.1"
258+
256259
# For local development. Add to your `.cargo/config.toml`
257260
# [patch."https://github.com/Plonky3/Plonky3.git"]
258261
# p3-field = { path = "../Plonky3/field" }

crates/circuits/mod-builder/Cargo.toml

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,16 @@ rand.workspace = true
2121
num-bigint.workspace = true
2222
num-traits.workspace = true
2323
tracing.workspace = true
24-
2524
itertools.workspace = true
2625

26+
# CUDA dependencies (only included when cuda feature is enabled)
27+
openvm-cuda-backend = { workspace = true, optional = true }
28+
openvm-cuda-common = { workspace = true, optional = true }
29+
cuda-runtime-sys = { workspace = true, optional = true }
30+
31+
[build-dependencies]
32+
openvm-cuda-builder.workspace = true
33+
2734
[dev-dependencies]
2835
openvm-circuit-primitives = { workspace = true }
2936
openvm-pairing-guest = { workspace = true, features = ["halo2curves"] }
@@ -32,6 +39,12 @@ openvm-circuit = { workspace = true, features = ["test-utils"] }
3239

3340
[features]
3441
default = []
42+
cuda = [
43+
"dep:openvm-cuda-backend",
44+
"dep:openvm-cuda-common",
45+
"dep:cuda-runtime-sys",
46+
"openvm-circuit-primitives/cuda",
47+
]
3548
parallel = ["openvm-stark-backend/parallel"]
3649
test-utils = [
3750
"dep:halo2curves-axiom",
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#[cfg(feature = "cuda")]
2+
use openvm_cuda_builder::{cuda_available, CudaBuilder};
3+
4+
#[cfg(feature = "cuda")]
5+
fn main() {
6+
if !cuda_available() {
7+
return; // Skip CUDA compilation
8+
}
9+
10+
let builder = CudaBuilder::new()
11+
.include_from_dep("DEP_CUDA_COMMON_INCLUDE") // Import headers
12+
.include("../primitives/cuda/include")
13+
.include("cuda/include")
14+
.include("../../../extensions/rv32-adapters/cuda/include")
15+
.include("../poseidon2-air/cuda/include")
16+
.include("../../../tracegen-gpu/cuda/src") // TODO[arayi]: change once system is migrated
17+
.watch("src/cuda_abi.rs")
18+
.watch("cuda")
19+
.watch("../primitives/cuda/include")
20+
.watch("../../../extensions/rv32-adapters/cuda/include")
21+
.watch("../poseidon2-air/cuda/include")
22+
.watch("../../../tracegen-gpu/cuda/src") // TODO[arayi]: change once system is migrated
23+
.library_name("tracegen_mod_builder")
24+
.file("cuda/src/field_expression.cu");
25+
26+
builder.emit_link_directives();
27+
builder.build();
28+
}
29+
30+
#[cfg(not(feature = "cuda"))]
31+
fn main() {}

crates/circuits/mod-builder/cuda/include/records.cuh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
#include "../../src/extensions/rv32_adapters/vec_heap.cuh"
3+
#include "vec_heap.cuh"
44

55
struct FieldExprCoreRecord {
66
uint8_t opcode;

crates/circuits/mod-builder/cuda/include/rv32_vec_heap_router.cuh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#pragma once
22

3-
#include "../../src/extensions/rv32_adapters/vec_heap.cuh"
4-
#include "mod_builder/meta.cuh"
3+
#include "vec_heap.cuh"
4+
#include "meta.cuh"
55
#include "trace_access.h"
66

77
struct Rv32VecHeapConfig {

tracegen-gpu/cuda/src/mod_builder/field_expression.cu renamed to crates/circuits/mod-builder/cuda/src/field_expression.cu

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#include "fp.h"
22
#include "launcher.cuh"
3-
#include "mod_builder/bigint_ops.cuh"
4-
#include "mod_builder/expr_codec.cuh"
5-
#include "mod_builder/meta.cuh"
6-
#include "mod_builder/overflow_ops.cuh"
7-
#include "mod_builder/records.cuh"
8-
#include "mod_builder/rv32_vec_heap_router.cuh"
3+
#include "bigint_ops.cuh"
4+
#include "expr_codec.cuh"
5+
#include "meta.cuh"
6+
#include "overflow_ops.cuh"
7+
#include "records.cuh"
8+
#include "rv32_vec_heap_router.cuh"
99
#include "trace_access.h"
1010
#include <cstdint>
1111

tracegen-gpu/src/mod_builder/field_expression/chip.rs renamed to crates/circuits/mod-builder/src/cuda/chip.rs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,26 @@ use cuda_runtime_sys::{cudaDeviceSetLimit, cudaLimit};
77
use num_bigint::BigUint;
88
use num_traits::{FromBytes, One};
99
use openvm_circuit::utils::next_power_of_two_or_zero;
10-
use openvm_mod_circuit_builder::{
11-
utils::biguint_to_limbs_vec, FieldExpressionCoreAir, SymbolicExpr,
10+
use openvm_circuit_primitives::{
11+
bitwise_op_lookup::cuda::BitwiseOperationLookupChipGPU,
12+
var_range::cuda::VariableRangeCheckerChipGPU,
1213
};
13-
use openvm_stark_backend::p3_air::BaseAir;
14-
use stark_backend_gpu::{
15-
base::DeviceMatrix,
16-
cuda::{
17-
copy::{MemCopyD2H, MemCopyH2D},
18-
d_buffer::DeviceBuffer,
19-
},
20-
prelude::F,
14+
use openvm_cuda_backend::{base::DeviceMatrix, types::F};
15+
use openvm_cuda_common::{
16+
copy::{MemCopyD2H, MemCopyH2D},
17+
d_buffer::DeviceBuffer,
2118
};
19+
use openvm_stark_backend::p3_air::BaseAir;
2220

23-
use super::{
24-
constants::*,
25-
cuda::field_expression::tracegen,
26-
types::{ExprMeta, ExprNode, FieldExprMeta, FieldExpressionChipGPU},
27-
};
2821
use crate::{
29-
mod_builder::expr_op::ExprOp,
30-
primitives::{
31-
bitwise_op_lookup::BitwiseOperationLookupChipGPU, var_range::VariableRangeCheckerChipGPU,
22+
cuda::{
23+
constants::{ExprType, LIMB_BITS, MAX_LIMBS},
24+
expr_op::ExprOp,
3225
},
26+
cuda_abi::field_expression::tracegen,
27+
utils::biguint_to_limbs_vec,
28+
ExprMeta, ExprNode, FieldExprMeta, FieldExpressionChipGPU, FieldExpressionCoreAir,
29+
SymbolicExpr,
3330
};
3431

3532
impl FieldExpressionChipGPU {
@@ -336,7 +333,6 @@ impl FieldExpressionChipGPU {
336333
}
337334

338335
fn calculate_ast_depth(expr: &SymbolicExpr) -> u32 {
339-
use openvm_mod_circuit_builder::SymbolicExpr;
340336
match expr {
341337
SymbolicExpr::Input(_) | SymbolicExpr::Var(_) | SymbolicExpr::Const(_, _, _) => 1,
342338
SymbolicExpr::Add(left, right)

tracegen-gpu/src/mod_builder/field_expression/constants.rs renamed to crates/circuits/mod-builder/src/cuda/constants.rs

File renamed without changes.

tracegen-gpu/src/mod_builder/expr_op.rs renamed to crates/circuits/mod-builder/src/cuda/expr_op.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::mod_builder::field_expression::ExprNode;
1+
use crate::ExprNode;
22

33
#[repr(C)]
44
#[derive(Debug, Clone, Copy)]

0 commit comments

Comments
 (0)