From de0d759315ddb532893d01dc11f7a6b64cf6d4ff Mon Sep 17 00:00:00 2001 From: nixw <> Date: Thu, 25 Apr 2024 01:33:07 +0300 Subject: [PATCH 01/11] Add MSM --- depends/ffiasm | 2 +- src/CMakeLists.txt | 2 +- src/groth16.cpp | 18 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/depends/ffiasm b/depends/ffiasm index 6593fed..b0ed35c 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit 6593fedbf183ebbaa62cbb295963ee8765f89fb0 +Subproject commit b0ed35c0db398a3b60188f23f683d2915bbb31c1 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2714cba..bdcd94f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -134,7 +134,7 @@ endif() enable_testing() add_executable(test_public_size test_public_size.c) -target_link_libraries(test_public_size rapidsnarkStaticFrFq) +target_link_libraries(test_public_size rapidsnarkStaticFrFq pthread) add_test(NAME test_public_size COMMAND test_public_size circuit_final.zkey 86 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/testdata) diff --git a/src/groth16.cpp b/src/groth16.cpp index e7eda1f..655712e 100644 --- a/src/groth16.cpp +++ b/src/groth16.cpp @@ -50,28 +50,28 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_TRACE("Start Multiexp A"); uint32_t sW = sizeof(wtns[0]); typename Engine::G1Point pi_a; - E.g1.multiMulByScalar(pi_a, pointsA, (uint8_t *)wtns, sW, nVars); + E.g1.multiMulByScalarMSM(pi_a, pointsA, (uint8_t *)wtns, sW, nVars); std::ostringstream ss2; ss2 << "pi_a: " << E.g1.toString(pi_a); LOG_DEBUG(ss2); LOG_TRACE("Start Multiexp B1"); typename Engine::G1Point pib1; - E.g1.multiMulByScalar(pib1, pointsB1, (uint8_t *)wtns, sW, nVars); + E.g1.multiMulByScalarMSM(pib1, pointsB1, (uint8_t *)wtns, sW, nVars); std::ostringstream ss3; ss3 << "pib1: " << E.g1.toString(pib1); LOG_DEBUG(ss3); LOG_TRACE("Start Multiexp B2"); typename Engine::G2Point pi_b; - E.g2.multiMulByScalar(pi_b, pointsB2, (uint8_t *)wtns, sW, nVars); + E.g2.multiMulByScalarMSM(pi_b, pointsB2, (uint8_t *)wtns, sW, nVars); std::ostringstream ss4; ss4 << "pi_b: " << E.g2.toString(pi_b); LOG_DEBUG(ss4); LOG_TRACE("Start Multiexp C"); typename Engine::G1Point pi_c; - E.g1.multiMulByScalar(pi_c, pointsC, (uint8_t *)((uint64_t)wtns + (nPublic +1)*sW), sW, nVars-nPublic-1); + E.g1.multiMulByScalarMSM(pi_c, pointsC, (uint8_t *)((uint64_t)wtns + (nPublic +1)*sW), sW, nVars-nPublic-1); std::ostringstream ss5; ss5 << "pi_c: " << E.g1.toString(pi_c); LOG_DEBUG(ss5); @@ -80,25 +80,25 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement uint32_t sW = sizeof(wtns[0]); typename Engine::G1Point pi_a; auto pA_future = std::async([&]() { - E.g1.multiMulByScalar(pi_a, pointsA, (uint8_t *)wtns, sW, nVars); + E.g1.multiMulByScalarMSM(pi_a, pointsA, (uint8_t *)wtns, sW, nVars); }); LOG_TRACE("Start Multiexp B1"); typename Engine::G1Point pib1; auto pB1_future = std::async([&]() { - E.g1.multiMulByScalar(pib1, pointsB1, (uint8_t *)wtns, sW, nVars); + E.g1.multiMulByScalarMSM(pib1, pointsB1, (uint8_t *)wtns, sW, nVars); }); LOG_TRACE("Start Multiexp B2"); typename Engine::G2Point pi_b; auto pB2_future = std::async([&]() { - E.g2.multiMulByScalar(pi_b, pointsB2, (uint8_t *)wtns, sW, nVars); + E.g2.multiMulByScalarMSM(pi_b, pointsB2, (uint8_t *)wtns, sW, nVars); }); LOG_TRACE("Start Multiexp C"); typename Engine::G1Point pi_c; auto pC_future = std::async([&]() { - E.g1.multiMulByScalar(pi_c, pointsC, (uint8_t *)((uint64_t)wtns + (nPublic +1)*sW), sW, nVars-nPublic-1); + E.g1.multiMulByScalarMSM(pi_c, pointsC, (uint8_t *)((uint64_t)wtns + (nPublic +1)*sW), sW, nVars-nPublic-1); }); #endif @@ -230,7 +230,7 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_TRACE("Start Multiexp H"); typename Engine::G1Point pih; - E.g1.multiMulByScalar(pih, pointsH, (uint8_t *)a, sizeof(a[0]), domainSize); + E.g1.multiMulByScalarMSM(pih, pointsH, (uint8_t *)a, sizeof(a[0]), domainSize); std::ostringstream ss1; ss1 << "pih: " << E.g1.toString(pih); LOG_DEBUG(ss1); From 114ca1b66ffab1dde415ab74c74f04bf04d35137 Mon Sep 17 00:00:00 2001 From: nixw <> Date: Fri, 24 May 2024 13:42:57 +0300 Subject: [PATCH 02/11] Add NAF to MSM --- depends/ffiasm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/ffiasm b/depends/ffiasm index b0ed35c..fb13886 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit b0ed35c0db398a3b60188f23f683d2915bbb31c1 +Subproject commit fb138867d324ecec2f57d968c8e898e17812ccc7 From d36bba2ead177f3958d73bd095adefe2b3ccfb09 Mon Sep 17 00:00:00 2001 From: Oleg Lomaka Date: Thu, 30 May 2024 11:36:47 -0400 Subject: [PATCH 03/11] add ability to skip build test executables --- .github/workflows/build.yml | 10 +++++----- src/CMakeLists.txt | 15 +++++++++------ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 01b9b26..065bf09 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -42,13 +42,13 @@ jobs: - name: Build prover Android ARM64 run: | mkdir -p build_prover_android && cd build_prover_android - cmake .. -DTARGET_PLATFORM=ANDROID -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android + cmake .. -DTARGET_PLATFORM=ANDROID -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android -DBUILD_TESTS=OFF make -j4 && make install - name: Build prover Android x86_64 run: | mkdir -p build_prover_android_x86_64 && cd build_prover_android_x86_64 - cmake .. -DTARGET_PLATFORM=ANDROID_x86_64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android_x86_64 + cmake .. -DTARGET_PLATFORM=ANDROID_x86_64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../package_android_x86_64 -DBUILD_TESTS=OFF make -j4 && make install - name: Build prover Linux @@ -154,13 +154,13 @@ jobs: if [[ ! -d "depends/gmp/package_macos_arm64" ]]; then ./build_gmp.sh macos_arm64; fi mkdir -p build_prover_ios && cd build_prover_ios - cmake .. -GXcode -DTARGET_PLATFORM=IOS -DCMAKE_INSTALL_PREFIX=../package_ios + cmake .. -GXcode -DTARGET_PLATFORM=IOS -DCMAKE_INSTALL_PREFIX=../package_ios -DBUILD_TESTS=OFF xcodebuild -destination 'generic/platform=iOS' -scheme rapidsnarkStatic -project rapidsnark.xcodeproj -configuration Release cp ../depends/gmp/package_ios_arm64/lib/libgmp.a src/Release-iphoneos cd ../ - mkdir -p build_prover_ios_simulator && cd build_prover_ios_simulator - cmake .. -GXcode -DTARGET_PLATFORM=IOS -DCMAKE_INSTALL_PREFIX=../package_ios_simulator -DUSE_ASM=NO + mkdir -p build_prover_ios_simulator && cd build_prover_ios_simulator + cmake .. -GXcode -DTARGET_PLATFORM=IOS -DCMAKE_INSTALL_PREFIX=../package_ios_simulator -DUSE_ASM=NO -DBUILD_TESTS=OFF xcodebuild -destination 'generic/platform=iOS Simulator' -scheme rapidsnarkStatic -project rapidsnark.xcodeproj cp ../depends/gmp/package_iphone_simulator/lib/libgmp.a src/Debug-iphonesimulator cd ../ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bdcd94f..0774a67 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -131,12 +131,15 @@ if(USE_SODIUM) target_link_libraries(prover sodium) endif() - -enable_testing() -add_executable(test_public_size test_public_size.c) -target_link_libraries(test_public_size rapidsnarkStaticFrFq pthread) -add_test(NAME test_public_size COMMAND test_public_size circuit_final.zkey 86 - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/testdata) +option(BUILD_TESTS "Build the tests" ON) + +if(BUILD_TESTS) + enable_testing() + add_executable(test_public_size test_public_size.c) + target_link_libraries(test_public_size rapidsnarkStaticFrFq pthread) + add_test(NAME test_public_size COMMAND test_public_size circuit_final.zkey 86 + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/testdata) +endif() if(OpenMP_CXX_FOUND) From edbdc4d0e8c2e0939a4817c814b3f6fd44f5c201 Mon Sep 17 00:00:00 2001 From: Oleg Lomaka Date: Thu, 30 May 2024 11:22:09 -0400 Subject: [PATCH 04/11] measure time of proof/validate execution --- .github/workflows/build.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 065bf09..00c19e3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,12 +62,12 @@ jobs: run: | set -x set -e - package/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json - package/bin/verifier testdata/verification_key.json public.json proof.json + time package/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json + time package/bin/verifier testdata/verification_key.json public.json proof.json # make a wrong public.json by decrementing the first element by 1 (value_0=$(jq '.[0]' public.json | tr -d '"') && value_0=$(echo "$value_0 - 1" | BC_LINE_LENGTH=100 bc) && jq --arg value_0 "$value_0" '.[0] = $value_0' public.json) > public_bad.json set +e - package/bin/verifier testdata/verification_key.json public_bad.json proof.json + time package/bin/verifier testdata/verification_key.json public_bad.json proof.json exit_code=$? set -e [ $exit_code -ne 0 ] @@ -174,12 +174,12 @@ jobs: run: | set -x set -e - package_macos_arm64/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json - package_macos_arm64/bin/verifier testdata/verification_key.json public.json proof.json + time package_macos_arm64/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json + time package_macos_arm64/bin/verifier testdata/verification_key.json public.json proof.json # make a wrong public.json by decrementing the first element by 1 (value_0=$(jq '.[0]' public.json | tr -d '"') && value_0=$(echo "$value_0 - 1" | BC_LINE_LENGTH=100 bc) && jq --arg value_0 "$value_0" '.[0] = $value_0' public.json) > public_bad.json set +e - package_macos_arm64/bin/verifier testdata/verification_key.json public_bad.json proof.json + time package_macos_arm64/bin/verifier testdata/verification_key.json public_bad.json proof.json exit_code=$? set -e [ $exit_code -ne 0 ] @@ -276,12 +276,12 @@ jobs: run: | set -x set -e - package_macos_x86_64/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json - package_macos_x86_64/bin/verifier testdata/verification_key.json public.json proof.json + time package_macos_x86_64/bin/prover testdata/circuit_final.zkey testdata/witness.wtns proof.json public.json + time package_macos_x86_64/bin/verifier testdata/verification_key.json public.json proof.json # make a wrong public.json by decrementing the first element by 1 (value_0=$(jq '.[0]' public.json | tr -d '"') && value_0=$(echo "$value_0 - 1" | BC_LINE_LENGTH=100 bc) && jq --arg value_0 "$value_0" '.[0] = $value_0' public.json) > public_bad.json set +e - package_macos_x86_64/bin/verifier testdata/verification_key.json public_bad.json proof.json + time package_macos_x86_64/bin/verifier testdata/verification_key.json public_bad.json proof.json exit_code=$? set -e [ $exit_code -ne 0 ] From ec90ad50a381e3e8bf39f2029e8e69bf01fa230e Mon Sep 17 00:00:00 2001 From: nixw <> Date: Sun, 9 Jun 2024 19:03:17 +0300 Subject: [PATCH 05/11] Add BITS_PER_CHUNK build parameter --- CMakeLists.txt | 1 + depends/ffiasm | 2 +- src/CMakeLists.txt | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e982464..1f81971 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ project(rapidsnark LANGUAGES CXX C ASM) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +message("BITS_PER_CHUNK=" ${BITS_PER_CHUNK}) message("USE_ASM=" ${USE_ASM}) message("USE_OPENMP=" ${USE_OPENMP}) message("CMAKE_CROSSCOMPILING=" ${CMAKE_CROSSCOMPILING}) diff --git a/depends/ffiasm b/depends/ffiasm index fb13886..ec3dd66 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit fb138867d324ecec2f57d968c8e898e17812ccc7 +Subproject commit ec3dd66e691dad96b273959bf8ea6cb2eac7fdca diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bdcd94f..fe77fda 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,6 +10,10 @@ if(USE_ASM) endif() endif() +if(DEFINED BITS_PER_CHUNK) + add_definitions(-DMSM_BITS_PER_CHUNK=${BITS_PER_CHUNK}) +endif() + if(USE_ASM AND ARCH MATCHES "x86_64") if (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") From 6d853e5550636a1ca1602f02722246bc3b9c48f6 Mon Sep 17 00:00:00 2001 From: nixw <> Date: Tue, 2 Jul 2024 15:44:52 +0300 Subject: [PATCH 06/11] Replace openMP with std::thread --- depends/ffiasm | 2 +- src/groth16.cpp | 162 ++++++++++++++++++++---------------------------- 2 files changed, 67 insertions(+), 97 deletions(-) diff --git a/depends/ffiasm b/depends/ffiasm index ec3dd66..75a6a28 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit ec3dd66e691dad96b273959bf8ea6cb2eac7fdca +Subproject commit 75a6a28c0f035a90c14a82b09ded9ea9b7123352 diff --git a/src/groth16.cpp b/src/groth16.cpp index 655712e..2a046ee 100644 --- a/src/groth16.cpp +++ b/src/groth16.cpp @@ -1,6 +1,8 @@ #include "random_generator.hpp" #include "logging.hpp" -#include +#include "misc.hpp" +#include +#include namespace Groth16 { @@ -46,7 +48,8 @@ std::unique_ptr> makeProver( template std::unique_ptr> Prover::prove(typename Engine::FrElement *wtns) { -#ifdef USE_OPENMP + unsigned int nThreads = threadCount(); + LOG_TRACE("Start Multiexp A"); uint32_t sW = sizeof(wtns[0]); typename Engine::G1Point pi_a; @@ -75,85 +78,54 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement std::ostringstream ss5; ss5 << "pi_c: " << E.g1.toString(pi_c); LOG_DEBUG(ss5); -#else - LOG_TRACE("Start Multiexp A"); - uint32_t sW = sizeof(wtns[0]); - typename Engine::G1Point pi_a; - auto pA_future = std::async([&]() { - E.g1.multiMulByScalarMSM(pi_a, pointsA, (uint8_t *)wtns, sW, nVars); - }); - - LOG_TRACE("Start Multiexp B1"); - typename Engine::G1Point pib1; - auto pB1_future = std::async([&]() { - E.g1.multiMulByScalarMSM(pib1, pointsB1, (uint8_t *)wtns, sW, nVars); - }); - - LOG_TRACE("Start Multiexp B2"); - typename Engine::G2Point pi_b; - auto pB2_future = std::async([&]() { - E.g2.multiMulByScalarMSM(pi_b, pointsB2, (uint8_t *)wtns, sW, nVars); - }); - - LOG_TRACE("Start Multiexp C"); - typename Engine::G1Point pi_c; - auto pC_future = std::async([&]() { - E.g1.multiMulByScalarMSM(pi_c, pointsC, (uint8_t *)((uint64_t)wtns + (nPublic +1)*sW), sW, nVars-nPublic-1); - }); -#endif LOG_TRACE("Start Initializing a b c A"); auto a = new typename Engine::FrElement[domainSize]; auto b = new typename Engine::FrElement[domainSize]; auto c = new typename Engine::FrElement[domainSize]; - #pragma omp parallel for - for (u_int32_t i=0; i locks(NLOCKS); + + parallelFor(0, nCoefs, nThreads, [&] (int begin, int end, int numThread) { + for (u_int64_t i=begin; i guard(locks[coefs[i].c % NLOCKS]); + + E.fr.add( + ab[coefs[i].c], + ab[coefs[i].c], + aux + ); + } + }); LOG_TRACE("Calculating c"); - #pragma omp parallel for - for (u_int32_t i=0; ilog2(domainSize); @@ -164,10 +136,12 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(a[0]).c_str()); LOG_DEBUG(E.fr.toString(a[1]).c_str()); LOG_TRACE("Start Shift A"); - #pragma omp parallel for - for (u_int64_t i=0; iroot(domainPower+1, i)); - } + parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + for (u_int64_t i=begin; iroot(domainPower+1, i)); + } + }); + LOG_TRACE("a After shift:"); LOG_DEBUG(E.fr.toString(a[0]).c_str()); LOG_DEBUG(E.fr.toString(a[1]).c_str()); @@ -182,10 +156,11 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(b[0]).c_str()); LOG_DEBUG(E.fr.toString(b[1]).c_str()); LOG_TRACE("Start Shift B"); - #pragma omp parallel for - for (u_int64_t i=0; iroot(domainPower+1, i)); - } + parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + for (u_int64_t i=begin; iroot(domainPower+1, i)); + } + }); LOG_TRACE("b After shift:"); LOG_DEBUG(E.fr.toString(b[0]).c_str()); LOG_DEBUG(E.fr.toString(b[1]).c_str()); @@ -201,10 +176,11 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(c[0]).c_str()); LOG_DEBUG(E.fr.toString(c[1]).c_str()); LOG_TRACE("Start Shift C"); - #pragma omp parallel for - for (u_int64_t i=0; iroot(domainPower+1, i)); - } + parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + for (u_int64_t i=begin; iroot(domainPower+1, i)); + } + }); LOG_TRACE("c After shift:"); LOG_DEBUG(E.fr.toString(c[0]).c_str()); LOG_DEBUG(E.fr.toString(c[1]).c_str()); @@ -215,12 +191,13 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(c[1]).c_str()); LOG_TRACE("Start ABC"); - #pragma omp parallel for - for (u_int64_t i=0; i> Prover::prove(typename Engine::FrElement randombytes_buf((void *)&(r.v[0]), sizeof(r)-1); randombytes_buf((void *)&(s.v[0]), sizeof(s)-1); -#ifndef USE_OPENMP - pA_future.get(); - pB1_future.get(); - pB2_future.get(); - pC_future.get(); -#endif - typename Engine::G1Point p1; typename Engine::G2Point p2; From 13a4dc97094ad2ba4b6592972ac88bf6d6c0ae82 Mon Sep 17 00:00:00 2001 From: nixw <> Date: Fri, 5 Jul 2024 15:50:50 +0300 Subject: [PATCH 07/11] Fix calcBitsPerChunk --- depends/ffiasm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/ffiasm b/depends/ffiasm index 75a6a28..985ed75 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit 75a6a28c0f035a90c14a82b09ded9ea9b7123352 +Subproject commit 985ed75e7edf16a9543a3fd82994e32ce1b706c9 From dd373cbf0f1fe2fbc524de7bba9714d313f9644a Mon Sep 17 00:00:00 2001 From: nixw <> Date: Wed, 17 Jul 2024 12:54:37 +0300 Subject: [PATCH 08/11] Use ThreadPool --- depends/ffiasm | 2 +- src/groth16.cpp | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/depends/ffiasm b/depends/ffiasm index 985ed75..4ff7251 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit 985ed75e7edf16a9543a3fd82994e32ce1b706c9 +Subproject commit 4ff72512111280857a791556482e9010fbca0ce8 diff --git a/src/groth16.cpp b/src/groth16.cpp index 2a046ee..761933e 100644 --- a/src/groth16.cpp +++ b/src/groth16.cpp @@ -48,7 +48,7 @@ std::unique_ptr> makeProver( template std::unique_ptr> Prover::prove(typename Engine::FrElement *wtns) { - unsigned int nThreads = threadCount(); + ThreadPool &threadPool = ThreadPool::defaultPool(); LOG_TRACE("Start Multiexp A"); uint32_t sW = sizeof(wtns[0]); @@ -84,7 +84,7 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement auto b = new typename Engine::FrElement[domainSize]; auto c = new typename Engine::FrElement[domainSize]; - parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + threadPool.parallelFor(0, domainSize, [&] (int begin, int end, int numThread) { for (u_int32_t i=begin; i> Prover::prove(typename Engine::FrElement #define NLOCKS 1024 std::vector locks(NLOCKS); - parallelFor(0, nCoefs, nThreads, [&] (int begin, int end, int numThread) { + threadPool.parallelFor(0, nCoefs, [&] (int begin, int end, int numThread) { for (u_int64_t i=begin; i> Prover::prove(typename Engine::FrElement } }); LOG_TRACE("Calculating c"); - parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + threadPool.parallelFor(0, domainSize, [&] (int begin, int end, int numThread) { for (u_int64_t i=begin; i> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(a[0]).c_str()); LOG_DEBUG(E.fr.toString(a[1]).c_str()); LOG_TRACE("Start Shift A"); - parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + + threadPool.parallelFor(0, domainSize, [&] (int begin, int end, int numThread) { for (u_int64_t i=begin; iroot(domainPower+1, i)); } @@ -156,7 +157,7 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(b[0]).c_str()); LOG_DEBUG(E.fr.toString(b[1]).c_str()); LOG_TRACE("Start Shift B"); - parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + threadPool.parallelFor(0, domainSize, [&] (int begin, int end, int numThread) { for (u_int64_t i=begin; iroot(domainPower+1, i)); } @@ -176,7 +177,7 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(c[0]).c_str()); LOG_DEBUG(E.fr.toString(c[1]).c_str()); LOG_TRACE("Start Shift C"); - parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + threadPool.parallelFor(0, domainSize, [&] (int begin, int end, int numThread) { for (u_int64_t i=begin; iroot(domainPower+1, i)); } @@ -191,7 +192,7 @@ std::unique_ptr> Prover::prove(typename Engine::FrElement LOG_DEBUG(E.fr.toString(c[1]).c_str()); LOG_TRACE("Start ABC"); - parallelFor(0, domainSize, nThreads, [&] (int begin, int end, int numThread) { + threadPool.parallelFor(0, domainSize, [&] (int begin, int end, int numThread) { for (u_int64_t i=begin; i Date: Thu, 5 Sep 2024 13:26:47 -0400 Subject: [PATCH 09/11] Update ffiasm submodule to latest master --- depends/ffiasm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/ffiasm b/depends/ffiasm index 4ff7251..f47c1cd 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit 4ff72512111280857a791556482e9010fbca0ce8 +Subproject commit f47c1cd603b97cfe5c4a38720cf0b01f4120b0d6 From 35dfe138ef83ce4b5333344a096fce294a04dae4 Mon Sep 17 00:00:00 2001 From: Sanjay S Kumar <35188255+Quantaindew@users.noreply.github.com> Date: Thu, 5 Sep 2024 22:58:01 +0530 Subject: [PATCH 10/11] fix: README.md hyperlinks interchanged (#22) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5abd42a..5bad0b9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # rapidsnark -Rapidsnark is a zkSnark proof generation written in C++ and intel/arm assembly. That generates proofs created in [circom](https://github.com/iden3/snarkjs) and [snarkjs](https://github.com/iden3/circom) very fast. +Rapidsnark is a zkSnark proof generation written in C++ and intel/arm assembly. That generates proofs created in [circom](https://github.com/iden3/circom) and [snarkjs](https://github.com/iden3/snarkjs) very fast. ## Dependencies From 76825e57e58644dd3099d5d06bfde3b51366ec97 Mon Sep 17 00:00:00 2001 From: Oleg Lomaka Date: Thu, 5 Sep 2024 13:37:12 -0400 Subject: [PATCH 11/11] Update ffiasm submodule to latest master --- depends/ffiasm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/depends/ffiasm b/depends/ffiasm index f47c1cd..2a851f9 160000 --- a/depends/ffiasm +++ b/depends/ffiasm @@ -1 +1 @@ -Subproject commit f47c1cd603b97cfe5c4a38720cf0b01f4120b0d6 +Subproject commit 2a851f90289ba06c03f2c1519615bacb919a71dd