Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Marketing dev docs review #602

Merged
merged 285 commits into from
Sep 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
285 commits
Select commit Hold shift + click to select a range
2b4a4c2
vec ops size i32->u64
yshekel May 30, 2024
eb5a6f9
removed field specific APIs from shared headers. Will move the field …
yshekel May 30, 2024
fe12616
extension field vector ops and ntt APIs
yshekel May 30, 2024
6d0b326
curve lib and test
yshekel Jun 2, 2024
874ebf5
icicle and backends are now shared libs
yshekel Jun 2, 2024
87323a6
msm api with issue for result type
yshekel Jun 2, 2024
0e0470d
api to load backend libraries
yshekel Jun 2, 2024
e5b12bb
fix mac linkage issue due to missing linkage to icicle_device
yshekel Jun 2, 2024
4f8fe83
format files
yshekel Jun 2, 2024
aab5d0d
macro for unique identifiers
yshekel Jun 4, 2024
4faace4
small refactor to curve headers to avoid linkage errors with external…
yshekel Jun 4, 2024
87f725d
msm API now returns projective type
yshekel Jun 4, 2024
d55dc49
curve tests should only be built for curves, not field
yshekel Jun 4, 2024
53d73d3
disable NTT for unsupported fields
yshekel Jun 4, 2024
b435181
fix symbol redefinition when registering an API for multiple backends…
yshekel Jun 4, 2024
d3d2966
missing ext in msm config
yshekel Jun 4, 2024
e524db3
introduce log mechanism
yshekel Jun 4, 2024
3c028bf
msm precompute bases API
yshekel Jun 4, 2024
212068c
icicle_device links to dl
yshekel Jun 4, 2024
954b0e1
ffi extern curve methods
yshekel Jun 4, 2024
bd436f2
missing matrix transpose for ext field and moved generate scalars api
yshekel Jun 4, 2024
632fb91
missing G2 ifdef
yshekel Jun 4, 2024
729d1c0
montgomery conversion G1
yshekel Jun 4, 2024
4318aa1
MSM G2
yshekel Jun 6, 2024
e2237ec
montgomery conversion G2
yshekel Jun 6, 2024
c04a3ab
github workflow bug fix
yshekel Jun 6, 2024
5b5fbfb
avoid template specialization for curves where g2_affine is same type…
yshekel Jun 6, 2024
4e7b886
ecntt api
yshekel Jun 6, 2024
6671c3b
define options in main cmake
yshekel Jun 6, 2024
c94bcad
CUDA vector ops
yshekel Jun 9, 2024
0390650
transpose and montgomery CUDA apis
yshekel Jun 9, 2024
0e4af8f
montgomery conversion CUDA
yshekel Jun 9, 2024
aea2dba
CUDA ntt
yshekel Jun 9, 2024
42490af
fix order of loaded libs
yshekel Jun 10, 2024
41962b6
icicle curve links to icicle_field
yshekel Jun 10, 2024
091c9ba
montgomery conversion for cuda
yshekel Jun 13, 2024
6fe6916
CUDA ecntt
yshekel Jun 13, 2024
77eb89f
get_device_properties() added to device api
yshekel Jun 13, 2024
59843ee
no ECNTT for grumpkin
yshekel Jun 13, 2024
baae668
fixed cuda ntt headers
yshekel Jun 13, 2024
3309044
rust runtime crate
yshekel Jun 13, 2024
da007d1
mac compilation fix and api to query device availability
yshekel Jun 14, 2024
3b92f60
rust runtime crate progress
yshekel Jun 16, 2024
83cdf41
rust runtime crate copy to/from device test
yshekel Jun 17, 2024
9ae8d44
rust runtime crate streams
yshekel Jun 17, 2024
acb49eb
rust runtime crate async ops
yshekel Jun 17, 2024
ff6306c
rust ci
yshekel Jun 17, 2024
42f774a
fix identification of changed files
yshekel Jun 17, 2024
c5b75f7
minor rust ci fix
yshekel Jun 17, 2024
25d53e8
small cmake refactor, and install target
yshekel Jun 18, 2024
a86ebb4
simple v3 rust example
yshekel Jun 19, 2024
15abeb9
rust v3 icicle-core crate
yshekel Jun 19, 2024
5c85599
rust v3 babybear crate
yshekel Jun 19, 2024
754f7bc
ConfigExtension is now pointer in config for easier bindings
yshekel Jun 19, 2024
d8115c0
ConfigExtension rust wrapper
yshekel Jun 19, 2024
a1c0c8e
rust icicle-core vec_ops config and default device API
yshekel Jun 20, 2024
ca4281d
refactored device class to own the type string
yshekel Jun 20, 2024
59ff2d9
refactored rust vec_ops config to avoid taking ownership of stream bu…
yshekel Jun 20, 2024
ffc68c2
wrap() errors and install icicle into the deps cargo build dir
yshekel Jun 23, 2024
df290c0
rust v3 vec ops, api to list registered devices and config-extension …
yshekel Jun 23, 2024
e67ac86
rust matrix transpose
yshekel Jun 23, 2024
de650b8
rust v3 ntt
yshekel Jun 24, 2024
29c83c7
eplaced runtime_errors with icicle macro for throwing exceptions
yshekel Jun 25, 2024
3072f6c
test utilities to facilitate loading backends and choosing devices at…
yshekel Jun 25, 2024
6627b7b
rust missing ntt tests
yshekel Jun 25, 2024
86b757a
stark252 rust crate
yshekel Jun 25, 2024
d9248b7
bn254 curve crate
yshekel Jun 26, 2024
e14be6f
rust ecntt
yshekel Jun 26, 2024
6578125
rust bls curves
yshekel Jun 26, 2024
0cdfb84
bw6-761 rust crate
yshekel Jun 26, 2024
2da454a
rust grumpkin curve
yshekel Jun 27, 2024
45c0e3e
rust bls12-377 build.rs fix
yshekel Jun 27, 2024
f223656
rust msm
yshekel Jun 27, 2024
763b736
msm for cuda backend
yshekel Jun 30, 2024
7ed3cc7
matrix ops consolidated to vec ops, some TODO fixed
yshekel Jun 30, 2024
f230519
missing MSM cuda test
yshekel Jun 30, 2024
48269e3
bit reverse api and test, including cpu and cuda backends
yshekel Jul 1, 2024
401b5b8
bit reverse in rust
yshekel Jul 1, 2024
1146f56
rust ci merge build and test for faster ci
yshekel Jul 1, 2024
fe28f8f
reintroduced ntt tests against risc0 and lambdaworks
yshekel Jul 2, 2024
3e50854
field and curve host arithmetic tests
yshekel Jul 2, 2024
8a6cf02
msm test multi-device bug fix: allocate stream on correct device
yshekel Jul 2, 2024
b8e9f90
fix field tests compilation and find nvcc via cmake
yshekel Jul 2, 2024
6b095e6
track memory allocations via MemoryTracker and query pointer to devic…
yshekel Jul 3, 2024
40693a0
polynomial API V3
yshekel Jul 3, 2024
ef85fcc
ecntt bug fix from v2
yshekel Jul 4, 2024
be7cbba
polynomial tests fix regarding msm
yshekel Jul 4, 2024
ec596c3
rust polynomials
yshekel Jul 4, 2024
5a7c0cc
print domain size when ntt fails on that. same domain size for ntt an…
yshekel Jul 4, 2024
76cf23d
ecntt bug fix from V2
yshekel Jul 4, 2024
ca7fb84
switch device when releasing memory of inactive device
yshekel Jul 7, 2024
36c8799
NTT simple cpu backend (#533)
ShanieWinitz Jul 15, 2024
74f7a3c
move tracking logic to runtime.cpp rather than device API
yshekel Jul 8, 2024
e49540d
polynomial refactor to be multi-device
yshekel Jul 8, 2024
caf3b4f
add generic copy and copy_async with auto device inference
yshekel Jul 15, 2024
9b46b84
api for memset and tests for copy() and memset()
yshekel Jul 15, 2024
de88ad1
minor: CPU_REF reuse device_api class like CPU
yshekel Jul 15, 2024
4d0b1a0
removed device_id from polynomial view
yshekel Jul 15, 2024
87a25af
use icicle runtime apis in polynomial implementation instead of cuda …
yshekel Jul 16, 2024
0c8a849
move default polynomial context from cuda backend to icicle FE
yshekel Jul 16, 2024
091a193
add slice api to vec ops
yshekel Jul 16, 2024
61af965
add api for mul scalar and use in poly backend
yshekel Jul 16, 2024
028f59c
use vec_mul in polynomial api insted of another kernel
yshekel Jul 16, 2024
f13f24c
add vec_div api
yshekel Jul 16, 2024
6f8c480
use vector_div in polynomial backend
yshekel Jul 16, 2024
0885195
add vec_ops apis for scalar+-vector and use in polynomial backend
yshekel Jul 16, 2024
749d3f9
add vec_op api for find highest non zero idx of vector, and CUDA backend
yshekel Jul 16, 2024
8ade7ef
use vector_add in polynomial backend to add monomial inplace
yshekel Jul 16, 2024
06243e5
add polynomial evaluation api and cuda backend. Use it in poly backend
yshekel Jul 16, 2024
db19c38
split default poly backend from cuda and support CPU too
yshekel Jul 17, 2024
9c35aaa
add doxygen comments to frontend APIs
yshekel Jul 17, 2024
0409c6f
replace msm config bases_size with boolean flag indicating bases are …
yshekel Jul 17, 2024
d3b27a7
randomize device for C++ polynomial tests
yshekel Jul 17, 2024
7de94ff
fix bug in cuda MSM when scalars are in montgomery form
yshekel Jul 17, 2024
afe4831
skip fast twiddles for domains smaller than 16
yshekel Jul 18, 2024
cd33533
move cuda backend to private repo and clone it in ci
yshekel Jul 18, 2024
934f934
pull cuda backend when building in ci
yshekel Jul 18, 2024
a8e794f
use ssh-key in ci workflows to pull cuda backend
yshekel Jul 18, 2024
1baabd9
add feature to rust crates to choose local/remote cuda backend
yshekel Jul 18, 2024
4f47c9d
remove redundant link to stdc++ in build.rs scripts
yshekel Jul 18, 2024
58780f0
fix compilation issues for mac
yshekel Jul 18, 2024
bdf3cd5
add info logs to NTT test to find the issue
yshekel Jul 21, 2024
05d918f
let PR choose the cuda-backend branch to use
yshekel Jul 21, 2024
b52191f
field generation update from V2
yshekel Jul 24, 2024
49beb32
add script for generating C apis
yshekel Jul 24, 2024
fc2ac41
refactor msm example
yshekel Jul 24, 2024
9618e6d
split backend registration part to backend headers to avoid dep on co…
yshekel Jul 24, 2024
99e5853
update readme of C++ msm example
yshekel Jul 25, 2024
454fe5b
update ntt-best-practice and msm examples to V3
yshekel Jul 25, 2024
b07d020
update ntt example for V3
yshekel Jul 25, 2024
c302aeb
refactor pedersen-commintment example to V3
yshekel Jul 28, 2024
63dcd4e
remove multiply c++ example and fixed some readme
yshekel Jul 28, 2024
68802bc
refactor C++ example polynomial-multiplication for V3
yshekel Jul 28, 2024
a5a8bf8
refactor C++ example poly-api
yshekel Jul 28, 2024
445eec8
refactor C++ example risc0
yshekel Jul 28, 2024
8d03fb6
trigger examples build in ci
yshekel Jul 28, 2024
2a3dcd7
fix format
yshekel Jul 28, 2024
10963fb
refactor rust example msm
yshekel Jul 28, 2024
131e22d
fix example C++ msm, missing G2 flag
yshekel Jul 28, 2024
5d821d3
refactor C++ examples to work with install-dir, or build from source …
yshekel Jul 28, 2024
f8661ac
update rust examples msm and ntt to support installed backend dir
yshekel Jul 28, 2024
65ca51c
update Rust examples to support installed backend
yshekel Jul 28, 2024
dc1b2fc
fix: bug where wrong polynomial factory is used to construct polynomi…
yshekel Jul 30, 2024
4a4b254
rename template files to not format them
yshekel Jul 30, 2024
a45746f
fix rust examples calling load_backend() with removed param
yshekel Jul 30, 2024
5332f4c
minor update to rust poly example
yshekel Jul 30, 2024
d08088a
add runtime api to load backend from default installdir and use it ev…
yshekel Jul 31, 2024
cccd6c1
add ntt benchmark for rust
yshekel Jul 31, 2024
e95b562
simplify C++ examples by loading backend from default install dir
yshekel Jul 31, 2024
389ce1c
fix rust bw761 curve missing ICICLE backend install path and fix exam…
yshekel Aug 1, 2024
0bd5854
add rust benchmark for msm
yshekel Aug 1, 2024
7734676
add rust ntt benchmark for fields too
yshekel Aug 1, 2024
7b833af
add rust ecntt benchmark
yshekel Aug 1, 2024
73dd80b
update ntt api to accept config by const
yshekel Aug 1, 2024
908a6c5
move backend-specific-config to open part to avoid installing it
yshekel Aug 1, 2024
0797cb2
add error enumeartion for license error
yshekel Aug 6, 2024
0712d79
Add tasks manager classes to ease multithreading for cpu (#573)
Koren-Brand Aug 11, 2024
b7d3108
add accumulate (vec_ops) for v3
emirsoyturk Aug 13, 2024
02cbe8a
add rust wrapper and ext field for accumulate
emirsoyturk Aug 13, 2024
e8a968f
CI ref and revision
emirsoyturk Aug 13, 2024
89ea2a5
clang-format fix
emirsoyturk Aug 13, 2024
b5c090c
CI ref
emirsoyturk Aug 13, 2024
c49033a
[FEAT] Add accumulation function in vec_ops for v3
emirsoyturk Aug 14, 2024
af5c92e
refacor docs structure for V3
yshekel Aug 13, 2024
5f6f61a
update introduction doc
yshekel Aug 13, 2024
704ea44
doc ICICLE overview
yshekel Aug 13, 2024
5cc4c37
backend doc
yshekel Aug 13, 2024
b844c92
multi device doc
yshekel Aug 13, 2024
d173d58
icicle libraries doc
yshekel Aug 13, 2024
b539750
tmp getting started doc
yshekel Aug 13, 2024
c27c2d0
getting started build install doc
yshekel Aug 15, 2024
d10a968
fix spelling
yshekel Aug 15, 2024
06bac2a
programmers guide
yshekel Aug 15, 2024
ada75ef
CPP programmers guide
yshekel Aug 15, 2024
6d2fa10
CPP programmer guide cont
yshekel Aug 15, 2024
42046db
Rust programmers guide
yshekel Aug 15, 2024
b77b06c
doc updates
yshekel Aug 18, 2024
aba3e97
msm doc
yshekel Aug 18, 2024
8943e57
polynomials update
yshekel Aug 18, 2024
aaf1894
ntt docs
yshekel Aug 18, 2024
2dfa66e
vec-ops docs
yshekel Aug 18, 2024
89f437a
docs update
yshekel Aug 18, 2024
ad26694
implement multithread CPU vec ops (#577)
mickeyasa Aug 19, 2024
424c28e
docs updates
yshekel Aug 19, 2024
b811ac5
typos
yshekel Aug 19, 2024
9759cef
allow tests to run on CPU only but fail in TearDownTestSuite to avoid…
yshekel Aug 19, 2024
0d447c9
make features (G2,ecntt) default on (#583)
yshekel Aug 21, 2024
a62ab2e
use ccache if available (#585)
yshekel Aug 22, 2024
e73cc60
Remove V2 files and rename V3 files (#586)
yshekel Aug 25, 2024
649a574
remove duplicate rust ci script
yshekel Aug 25, 2024
6672bf8
load with RTLD_GLOBAL to have license check symbol visible
yshekel Aug 25, 2024
7ac2132
fix github cpp changed files identification
yshekel Aug 25, 2024
b14edce
Update .github/workflows/check-changed-files.yml
yshekel Aug 26, 2024
f95e3b5
Update icicle/include/icicle/msm.h
yshekel Aug 26, 2024
dfe56a7
use 64b type for add/mul of field elements on CPU (#588)
yshekel Aug 26, 2024
9a0766a
[FEAT] Add Mersenne to v3 (#579)
emirsoyturk Aug 27, 2024
68fe909
Koren/v3 msm (#581)
Koren-Brand Aug 29, 2024
4e27a82
Nonam3e/mv icicle m31 (#590)
nonam3e Aug 29, 2024
56c605c
Release script and install docs (#589)
yshekel Aug 29, 2024
fb772a4
fix api (#592)
nonam3e Aug 29, 2024
7105132
updated docs
yshekel Aug 29, 2024
a65cab1
more docs update
yshekel Aug 29, 2024
2075f69
update MSM config struct field for shared bases(#562)
HadarIngonyama Aug 30, 2024
c551535
fix msm config comment
yshekel Aug 30, 2024
ec4190e
add rust test for batch-msm shared and non-shared points cases (#587)
nonam3e Aug 30, 2024
6cff54e
Fix typo for license error and updated docs (#593)
yshekel Sep 1, 2024
2772dca
Made getting started first section
Otsar-Raikou Sep 1, 2024
9f40278
Update getting_started.md
Otsar-Raikou Sep 1, 2024
dc0ee9c
getting started edits (#595)
Otsar-Raikou Sep 2, 2024
7dbc910
Update README (#596)
yshekel Sep 2, 2024
7334047
Edits on README (#599)
Otsar-Raikou Sep 2, 2024
2ae1815
edit intro doc(#601)
Otsar-Raikou Sep 2, 2024
6a43bde
parallel ntt on cpu (#591)
ShanieWinitz Sep 2, 2024
66a5133
pull cuda backend in release script
yshekel Sep 2, 2024
d8d9e2b
Rename extension field to complex and quatric extension(#598)
ChickenLover Sep 3, 2024
944ff9f
V3 golang bindings (#594)
nonam3e Sep 3, 2024
36737ef
[ci skip] fix docs build
jeremyfelder Sep 3, 2024
92ce4a0
Remove unused pages in sidebar
jeremyfelder Sep 3, 2024
08caf4f
overview page fix
Otsar-Raikou Sep 3, 2024
745abb0
Update getting_started.md
Otsar-Raikou Sep 3, 2024
8608daf
Update build_from_source.md
Otsar-Raikou Sep 3, 2024
7d564ef
Update arch_overview.md (1)
Otsar-Raikou Sep 3, 2024
c31f62a
Update build_from_source.md (2)
Otsar-Raikou Sep 3, 2024
d694219
Update arch_overview.md (2)
Otsar-Raikou Sep 3, 2024
da9cdc3
Update sidebars.js
Otsar-Raikou Sep 3, 2024
6e88b4a
Update install_cuda_backend.md
Otsar-Raikou Sep 3, 2024
7c5bc8b
Update sidebars.js
Otsar-Raikou Sep 3, 2024
741e9ff
Update multi-device.md
Otsar-Raikou Sep 3, 2024
32e025c
Update general.md
Otsar-Raikou Sep 3, 2024
929403e
Update cpp.md
Otsar-Raikou Sep 3, 2024
02da831
Update rust.md
Otsar-Raikou Sep 3, 2024
c13e57e
Update go.md
Otsar-Raikou Sep 3, 2024
aefd20a
Update overview.md
Otsar-Raikou Sep 3, 2024
227183d
Update migrate_from_v2.md
Otsar-Raikou Sep 3, 2024
266fb5e
Update sidebars.js
Otsar-Raikou Sep 3, 2024
1732b6c
Update docs/docs/icicle/install_cuda_backend.md
Otsar-Raikou Sep 3, 2024
3eadf4c
fixed dead header
Otsar-Raikou Sep 3, 2024
2c111c3
Update docs/docs/icicle/overview.md
Otsar-Raikou Sep 3, 2024
4d9b8d7
Update docs/docs/icicle/overview.md
Otsar-Raikou Sep 3, 2024
9e65807
removed the word 'open'
Otsar-Raikou Sep 3, 2024
e8201f5
Update docusaurus.config.js
Otsar-Raikou Sep 3, 2024
150095b
added annoucement bar 2
Otsar-Raikou Sep 3, 2024
3bf7d1a
fixed error
Otsar-Raikou Sep 3, 2024
d82ebf3
again...
Otsar-Raikou Sep 3, 2024
d513938
Fix docs build
jeremyfelder Sep 3, 2024
8717a28
Merge branch 'V3' into marketing-docs-edit
yshekel Sep 3, 2024
6908fed
replace V3 with main branch in docs and PR pull requests trigger
yshekel Sep 3, 2024
9913de5
fix bad links and remove multi-gpu page since it is not updated from V2
yshekel Sep 3, 2024
729358c
remove resolved TODOs
yshekel Sep 3, 2024
bf627d5
release action executes on self-hosted machine
yshekel Sep 3, 2024
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
1 change: 0 additions & 1 deletion .github/workflows/codespell.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ on:
branches:
- main
- V3
- yshekel/V3

jobs:
spelling-checker:
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/cpp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ on:
pull_request:
branches:
- V3
- yshekel/V3 # TODO remove when merged to V3
- main
push:
branches:
- V3
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- main
- V3
paths:
- 'docs/**'

Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ on:
pull_request:
branches:
- V3
- yshekel/V3 # TODO remove when merged to V3
- main
push:
branches:
- V3
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down
9 changes: 5 additions & 4 deletions .github/workflows/golang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ on:
pull_request:
branches:
- V3
- yshekel/V3 # TODO remove when merged to V3
- main
push:
branches:
- V3
- V3
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down Expand Up @@ -43,7 +44,7 @@ jobs:
needs: [check-changed-files, check-format, extract-cuda-backend-branch]
strategy:
matrix:
curve:
curve:
- name: bn254
build_args:
- name: bls12_381
Expand Down Expand Up @@ -82,7 +83,7 @@ jobs:
CURVE=$(echo ${{ matrix.curve.name }} | sed -e 's/_//g')
export ICICLE_BACKEND_INSTALL_DIR=/usr/local/lib
go test ./$CURVE/tests -count=1 -failfast -p 2 -timeout 60m -v

build-fields-linux:
name: Build and test fields on Linux
runs-on: [self-hosted, Linux, X64, icicle]
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ on:
jobs:
release:
name: Release
runs-on: ubuntu-latest
runs-on: [self-hosted, Linux, X64, icicle]
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ on:
pull_request:
branches:
- V3
- yshekel/V3 # TODO remove when merged to V3
- main
push:
branches:
- V3
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test-deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
pull_request:
branches:
- main
- V3
paths:
- 'docs/**'

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ This guide will help you get started with ICICLE in C++, Rust, and Go.
> **Developers**: We highly recommend reading our [documentation](https://dev.ingonyama.com/) for a comprehensive explanation of ICICLE’s capabilities.

> [!TIP]
> Try out ICICLE by running some [examples] available in C++, Rust, and Go bindings. Check out our install-and-use examples in [C++](https://github.com/ingonyama-zk/icicle/tree/yshekel/V3/examples/c%2B%2B/install-and-use-icicle), [Rust](https://github.com/ingonyama-zk/icicle/tree/yshekel/V3/examples/rust/install-and-use-icicle) and [Go](TODO)
> Try out ICICLE by running some [examples] available in C++, Rust, and Go bindings. Check out our install-and-use examples in [C++](https://github.com/ingonyama-zk/icicle/tree/main/examples/c%2B%2B/install-and-use-icicle), [Rust](https://github.com/ingonyama-zk/icicle/tree/main/examples/rust/install-and-use-icicle) and [Go](TODO)

### Prerequisites

Expand Down
23 changes: 8 additions & 15 deletions docs/docs/icicle/arch_overview.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,27 @@
# Architecture Overview

## Introduction

ICICLE V3 is designed with flexibility and extensibility in mind, offering a robust framework that supports multiple compute backends and accommodates various cryptographic needs. This section provides an overview of ICICLE's architecture, highlighting its open and closed components, multi-device support, and extensibility.
ICICLE v3 is designed with flexibility and extensibility in mind, offering a robust framework that supports multiple compute backends and accommodates various cryptographic needs. This section provides an overview of ICICLE's architecture, highlighting its open and closed components, multi-device support, and extensibility.

## Open Frontend and CPU Backend
### Frontend and CPU Backend

- **Frontend (FE):** The ICICLE frontend is open-source and designed to provide a unified API across different programming languages, including C++, Rust, and Go. This frontend abstracts the complexity of working with different backends, allowing developers to write backend-agnostic code that can be deployed across various platforms.
- **CPU Backend:** ICICLE includes an open-source CPU backend that allows for development and testing on standard hardware. This backend is ideal for prototyping and for environments where specialized hardware is not available.

## Closed CUDA Backend
## CUDA Backend

- **CUDA Backend:** ICICLE also includes a high-performance CUDA backend that is closed-source. This backend is optimized for NVIDIA GPUs and provides significant acceleration for cryptographic operations.
- **Installation and Licensing:** The CUDA backend needs to be downloaded and installed. Refer to the [installation guide](./install_cuda_backend.md) for detailed instructions.

## Extensible Design

ICICLE is designed to be extensible, allowing developers to integrate new backends or customize existing ones to suit their specific needs. The architecture supports:

- **Custom Backends:** Developers can create their own backends to leverage different hardware or optimize for specific use cases. The process of building and integrating a custom backend is documented in the [Build Your Own Backend](./build_your_own_backend.md) section.
- **Pluggable Components:** ICICLE's architecture allows for easy integration of additional cryptographic primitives or enhancements, ensuring that the framework can evolve with the latest advancements in cryptography and hardware acceleration.

## Multi-Device Support

- **Scalability:** ICICLE supports multi-device configurations, enabling the distribution of workloads across multiple GPUs or other hardware accelerators. This feature allows for scaling ZK proofs and other cryptographic operations across larger data centers or high-performance computing environments.

---

### Conclusion
## Build Your Own Backend

ICICLE is designed to be extensible, allowing developers to integrate new backends or customize existing ones to suit their specific needs. The architecture supports:

The architecture of ICICLE V3 is built to be flexible, scalable, and extensible, making it a powerful tool for developers working with zero-knowledge proofs and other cryptographic operations. Whether you're working with open-source CPU backends or closed-source CUDA backends, ICICLE provides the tools and flexibility needed to achieve high performance and scalability in cryptographic computations.
- **Custom Backends:** Developers can create their own backends to leverage different hardware or optimize for specific use cases. The process of building and integrating a custom backend is documented in the [Build Your Own Backend](./build_your_own_backend.md) section.
- **Pluggable Components:** ICICLE's architecture allows for easy integration of additional cryptographic primitives or enhancements, ensuring that the framework can evolve with the latest advancements in cryptography and hardware acceleration.

Explore the following sections to learn more about building your own backend, using ICICLE across multiple devices, and integrating it into your projects.
5 changes: 2 additions & 3 deletions docs/docs/icicle/build_from_source.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,5 @@ Make sure to install icicle libs when installing a library/application that depe

### Go: Build, Test, and Install (TODO)

## Install cuda backend

[Install CUDA Backend (and License)](./install_cuda_backend.md#installation)
---
**To install CUDA backend and license click [here](./install_cuda_backend.md#installation)**
18 changes: 8 additions & 10 deletions docs/docs/icicle/getting_started.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,19 @@ Future releases will also include support for macOS and other systems.

Each ICICLE release includes a tar file named `icicle30-<distribution>.tar.gz`, where `icicle30` indicates version 3.0. This tar file contains ICICLE frontend build artifacts and headers for a specific distribution. The tar file structure includes:

- **`./icicle/include/`**: This directory contains all the necessary header files for using the Icicle library from C++.
- **`./icicle/include/`**: This directory contains all the necessary header files for using the ICICLE library from C++.
- **`./icicle/lib/`**:
- **Icicle Libraries**: All the core Icicle libraries are located in this directory. Applications linking to Icicle will use these libraries.
- **Icicle Libraries**: All the core ICICLE libraries are located in this directory. Applications linking to ICICLE will use these libraries.
- **Backends**: The `./icicle/lib/backend/` directory houses backend libraries, including the CUDA backend (not included in this tar).

- **CUDA backend** comes as separate tar `icicle30-<distribution>-cuda122.tar.gz`
- per distribution, for icicle-frontend V3.0 and CUDA 12.2.
- per distribution, for ICICLE-frontend v3.0 and CUDA 12.2.

## installing and using icicle
## Installing and using ICICLE

- [Full C++ example](https://github.com/ingonyama-zk/icicle/tree/yshekel/V3/examples/c++/install-and-use-icicle)
- [Full Rust example](https://github.com/ingonyama-zk/icicle/tree/yshekel/V3/examples/rust/install-and-use-icicle)
- [Full Go example](https://github.com/ingonyama-zk/icicle/tree/yshekel/V3/examples/golang/install-and-use-icicle)

*(TODO update links to main branch when merged)
- [Full C++ example](https://github.com/ingonyama-zk/icicle/tree/main/examples/c++/install-and-use-icicle)
- [Full Rust example](https://github.com/ingonyama-zk/icicle/tree/main/examples/rust/install-and-use-icicle)
- [Full Go example](https://github.com/ingonyama-zk/icicle/tree/main/examples/golang/install-and-use-icicle)

1. **Extract and install the Tar Files**:
- [Download](https://github.com/ingonyama-zk/icicle/releases) the appropriate tar files for your distribution (Ubuntu 20.04, Ubuntu 22.04, or UBI 8,9 for RHEL compatible binaries).
Expand Down Expand Up @@ -106,7 +104,7 @@ Each ICICLE release includes a tar file named `icicle30-<distribution>.tar.gz`,

**Rust**
- When building the ICICLE crates, ICICLE frontend libs are built from source, along with the Rust bindings. They are installed to `target/<buildtype>/deps/icicle`, and Cargo will link them correctly. Note that you still need to install the CUDA backend if you have a CUDA GPU.
- Simply use `cargo build` or `cargo run` and it should link to icicle libs.
- Simply use `cargo build` or `cargo run` and it should link to ICICLE libs.

**Go** - TODO

Expand Down
2 changes: 1 addition & 1 deletion docs/docs/icicle/golang-bindings/multi-gpu.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Multi GPU APIs

To learn more about the theory of Multi GPU programming refer to [this part](../multi-gpu.md) of documentation.
To learn more about the theory of Multi GPU programming refer to [this part](../multi-device.md) of documentation.

Here we will cover the core multi GPU apis and an [example](#a-multi-gpu-example)

Expand Down
4 changes: 2 additions & 2 deletions docs/docs/icicle/install_cuda_backend.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

## Overview

The CUDA backend in ICICLE V3 is a high-performance, closed-source component designed to accelerate cryptographic computations using NVIDIA GPUs. This backend includes specialized libraries optimized for various cryptographic fields and curves, providing significant speedups for operations such as MSM, NTT, and elliptic curve operations.
The CUDA backend in ICICLE v3 is a high-performance, closed-source component designed to accelerate cryptographic computations using NVIDIA GPUs. This backend includes specialized libraries optimized for various cryptographic fields and curves, providing significant speedups for operations such as MSM, NTT, and elliptic curve operations.

## Installation

Expand All @@ -12,7 +12,7 @@ The CUDA backend is a closed-source component that requires a license. [To insta
### Licensing

:::note
Currently, the CUDA backend is free to use via Ingonyama’s icicle-cuda-backend-license server. By default, the CUDA backend will attempt to access this server. For more details, please contact support@ingonyama.com.
Currently, the CUDA backend is free to use via Ingonyama’s backend license server. By default, the CUDA backend will attempt to access this server. For more details, please contact support@ingonyama.com.
:::

The CUDA backend requires a valid license to function. There are two types of CUDA backend licenses:
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/icicle/libraries.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ ICICLE is composed of two main logical parts:

The ICICLE device library serves as an abstraction layer for interacting with various hardware devices. It provides a comprehensive interface for tasks such as setting the active device, querying device-specific information like free and total memory, determining the number of available devices, and managing memory allocation. Additionally, it offers functionality for copying data to and from devices, managing task queues (streams) for efficient device utilization, and abstracting the complexities of device management away from the user.

See programmers guide for more details. [C++](./programmers_guide/cpp#device-management), [Rust](./programmers_guide/rust#device-management), [Go TODO](./programmers_guide/go)
See programmers guide for more details. [C++](./programmers_guide/cpp#device-management), [Rust](./programmers_guide/rust#device-management), [Go](./programmers_guide/go)

## ICICLE Core

Expand Down
16 changes: 8 additions & 8 deletions docs/docs/icicle/migrate_from_v2.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

# Migration from Icicle V2 to V3
# Migration from ICICLE v2 to v3

Icicle V3 introduces a unified interface for high-performance computing across various devices, extending the functionality that was previously limited to GPUs in Icicle V2. This guide will assist you in transitioning from Icicle V2 to V3 by highlighting the key changes and providing examples for both C++ and Rust.
ICICLE v3 introduces a unified interface for high-performance computing across various devices, extending the functionality that was previously limited to GPUs in Icicle V2. This guide will assist you in transitioning from ICICLE v2 to v3 by highlighting the key changes and providing examples for both C++ and Rust.

## Key Conceptual Changes

Expand All @@ -10,20 +10,20 @@ Icicle V3 introduces a unified interface for high-performance computing across v
- **Unified API**: The APIs are now standardized across all devices, ensuring consistent usage and reducing the complexity of managing different hardware backends.

:::warning
When migrating from V2 to V3, it is important to note that, by default, your code now executes on the CPU. This contrasts with V2, which was exclusively a CUDA library. For details on installing and using CUDA GPUs, refer to the [CUDA backend guide](./install_cuda_backend.md).
When migrating from v2 to v3, it is important to note that, by default, your code now executes on the CPU. This contrasts with V2, which was exclusively a CUDA library. For details on installing and using CUDA GPUs, refer to the [CUDA backend guide](./install_cuda_backend.md).
:::

## Migration Guide for C++

### Replacing CUDA APIs with Icicle APIs

In Icicle V3, CUDA-specific APIs have been replaced with Icicle APIs that are designed to be backend-agnostic. This allows your code to run on different devices without requiring modifications.
In ICICLE v3, CUDA-specific APIs have been replaced with Icicle APIs that are designed to be backend-agnostic. This allows your code to run on different devices without requiring modifications.

- **Device Management**: Use Icicle's device management APIs instead of CUDA-specific functions. For example, instead of `cudaSetDevice()`, you would use `icicle_set_device()`.
- **Device Management**: Use ICICLE's device management APIs instead of CUDA-specific functions. For example, instead of `cudaSetDevice()`, you would use `icicle_set_device()`.

- **Memory Management**: Replace CUDA memory management functions such as `cudaMalloc()` and `cudaFree()` with Icicle's `icicle_malloc()` and `icicle_free()`.
- **Memory Management**: Replace CUDA memory management functions such as `cudaMalloc()` and `cudaFree()` with ICICLE's `icicle_malloc()` and `icicle_free()`.

- **Stream Management**: Replace `cudaStream_t` with `icicleStreamHandle` and use Icicle's stream management functions.
- **Stream Management**: Replace `cudaStream_t` with `icicleStreamHandle` and use ICICLE's stream management functions.

For a detailed overview and examples, please refer to the [Icicle C++ Programmer's Guide](./programmers_guide/cpp.md) for full API details.

Expand Down Expand Up @@ -55,7 +55,7 @@ icicle_free(device_ptr);

### Replacing `icicle_cuda_runtime` with `icicle_runtime`

In Icicle V3, the `icicle_cuda_runtime` crate is replaced with the `icicle_runtime` crate. This change reflects the broader support for different devices beyond just CUDA-enabled GPUs.
In ICICLE v3, the `icicle_cuda_runtime` crate is replaced with the `icicle_runtime` crate. This change reflects the broader support for different devices beyond just CUDA-enabled GPUs.

- **Device Management**: Use `icicle_runtime`'s device management functions instead of those in `icicle_cuda_runtime`. The `Device` struct remains central, but it's now part of a more generalized runtime.

Expand Down
6 changes: 4 additions & 2 deletions docs/docs/icicle/multi-device.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ There are many [different strategies](https://github.com/NVIDIA/multi-gpu-progra

This approach typically involves a single or multiple CPUs managing threads that read from and write to multiple devices, such as GPUs, CPUs, or accelerators. You can think of it as a scaled-up HOST-Device model.

![Multi-Device Server Approach](image.png)
<p align="center">
<img src="image.png" alt="Multi-Device Server Approach"/>
</p>

This approach doesn't necessarily allow for tackling larger computation sizes, but it does enable the simultaneous computation of tasks that wouldn't fit on a single device.

Expand All @@ -33,7 +35,7 @@ This approach requires redesigning the algorithm at the software level to be com

Currently, ICICLE adopts a Device Server approach, where we assume you have a machine with multiple devices (GPUs, CPUs, etc.) and wish to run computations on each device.

Each thread needs to set a device. Following api calls (including memory management and compute apis) will execute on that device, for this thread.
Each thread needs to set a device. Following API calls (including memory management and compute APIs) will execute on that device, for this thread.

### C++
```cpp
Expand Down
Loading
Loading