icicle-core
defines all interfaces, macros and common methods.
icicle-cuda-runtime
defines DeviceContext
which can be used to manage a specific GPU as well as wrapping common CUDA methods.
icicle-curves
implements all interfaces and macros from icicle-core
for each curve. For example icicle-bn254
implements curve bn254
. Each curve has its own build script which will build the CUDA libraries for that curve as part of the rust-toolchain build.
Enter a curve implementation.
cd icicle-curves/icicle-bn254
To build
cargo build --release
The build may take a while because we are also building the CUDA libraries for the selected curve.
To run benchmarks
cargo bench
To run test
cargo test -- --test-threads=1
The flag --test-threads=1
is needed because currently some tests might interfere with one another inside the GPU.