GithubHelp home page GithubHelp logo

victorjcarolino / cuda-barretenberg Goto Github PK

View Code? Open in Web Editor NEW

This project forked from talderei/cuda-barretenberg

0.0 0.0 0.0 181.98 MB

Aztec's Barretenberg Cryptographic Backend ported to the GPU using Cuda

License: GNU General Public License v2.0

Shell 0.05% C++ 85.46% Cuda 13.88% CMake 0.61%

cuda-barretenberg's Introduction

Barretenberg, an optimized elliptic curve library for the bn128 curve, and PLONK SNARK prover

This code is highly experimental, use at your own risk!

The structured reference string contains monomials up to x^{2^20}. This SRS was generated locally and is for testing and development purposes only!

Dependencies

  • cmake >= 3.16
  • clang >= 10 or gcc >= 10
  • clang-format
  • libomp (if multithreading is required. Multithreading can be disabled using the compiler flag -DMULTITHREADING 0)

Installing openMP (Linux)

RUN git clone -b release/10.x --depth 1 https://github.com/llvm/llvm-project.git \
  && cd llvm-project && mkdir build-openmp && cd build-openmp \
  && cmake ../openmp -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLIBOMP_ENABLE_SHARED=OFF \
  && make -j$(nproc) \
  && make install \
  && cd ../.. && rm -rf llvm-project

Getting started

Run the bootstrap script. (The bootstrap script will build both the native and wasm versions of barretenberg)

./bootstrap.sh

Parallelise the build

Make sure your MAKEFLAGS environment variable is set to run jobs equal to number of cores. e.g. MAKEFLAGS=-j$(nproc).

Formatting

Code is formatted using clang-format and the ./format.sh script which is called via a git pre-commit hook. If you've installed the C++ Vscode extension you should configure it to format on save.

Testing

Each module has its own tests. e.g. To build and run ecc tests:

make ecc_tests
./bin/ecc_tests

A shorthand for the above is:

make run_ecc_tests

Running the entire suite of tests using ctest:

make test

You can run specific tests, e.g.

./bin/ecc_tests --gtest_filter=scalar_multiplication.*

Benchmarks

Some modules have benchmarks. The build targets are named <module_name>_bench. To build and run, for example ecc benchmarks.

make ecc_bench
./src/aztec/ecc/ecc_bench

A shorthand for the above is:

make run_ecc_bench

CMake Build Options

CMake can be passed various build options on it's command line:

  • -DCMAKE_BUILD_TYPE=Debug | Release | RelWithAssert: Build types.
  • -DDISABLE_ASM=ON | OFF: Enable/disable x86 assembly.
  • -DDISABLE_ADX=ON | OFF: Enable/disable ADX assembly instructions (for older cpu support).
  • -DMULTITHREADING=ON | OFF: Enable/disable multithreading using OpenMP.
  • -DTESTING=ON | OFF: Enable/disable building of tests.
  • -DBENCHMARK=ON | OFF: Enable/disable building of benchmarks.
  • -DTOOLCHAIN=<filename in ./cmake/toolchains>: Use one of the preconfigured toolchains.

WASM build

To build:

mkdir build-wasm && cd build-wasm
cmake -DTOOLCHAIN=wasm-linux-clang ..
make barretenberg.wasm

The resulting wasm binary will be at ./src/aztec/barretenberg.wasm.

To run the tests, you'll need to install wasmtime.

curl https://wasmtime.dev/install.sh -sSf | bash

Tests can be built and run like:

make ecc_tests
wasmtime --dir=.. ./bin/ecc_tests

cuda-barretenberg's People

Contributors

talderei avatar victorjcarolino avatar critesjosh avatar arielgabizon avatar zac-williamson avatar iammichaelconnor avatar charlielye avatar codygunton avatar coder-256 avatar joeandrews avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.