Skip to content

okx/goldilocks

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Goldilocks

Setup

Dependencies

sudo apt-get install libgtest-dev libomp-dev libgmp-dev libbenchmark-dev

For CUDA 12.3:

sudo apt install nvidia-driver-535
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-3

Usage

Compile:

g++ tests/tests.cpp src/*.cpp -lgtest -lgmp -lomp -o test -g  -Wall -pthread -fopenmp -mavx2 -L$(find /usr/lib/llvm-* -name "libomp.so" | sed 's/libomp.so//')
g++ benchs/bench.cpp src/*.cpp -lbenchmark -lomp -lpthread -lgmp  -std=c++17 -Wall -pthread -fopenmp -mavx2 -L$(find /usr/lib/llvm-* -name "libomp.so" | sed 's/libomp.so//') -O3 -o bench

CUDA support

CUDA code is enabled with the flag __USE_CUDA__.

To build the tests running only on CPU: make testscpu.

To build the tests running on CPU+GPU: make testsgpu.

Similarly for benchmarks: make benchcpu and make benchgpu.

The script configure.sh finds the CUDA capability of the GPU installed on the host system and updates the file CudaArch.mk which is used by the Makefile.

Profiling and Timers

Timers (similar to those in zkProver) can be enabled with the flag GPU_TIMING.

Original Readme - Example of Usage

#include <iostream>

#include "src/goldilocks_base_field.hpp"

int main(int argc, char **argv)
{

    Goldilocks::Element a = Goldilocks::fromU64(0xFFFFFFFF00000005ULL);
    uint64_t b = Goldilocks::toU64(a);
    Goldilocks::Element c = Goldilocks::fromString("6277101731002175852863927769280199145829365870197997568000");

    std::cout << Goldilocks::toString(a) << " " << b << " " << Goldilocks::toString(c) << "\n";

    return 0;
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 82.2%
  • Cuda 15.5%
  • Makefile 2.2%
  • Shell 0.1%