Giter VIP home page Giter VIP logo

bladebit's Introduction

Bladebit Chia Plotter

Release Builds

A high-performance k32-only, Chia (XCH) plotter.

Bladebit supports 3 plotting modes:

  • Fully In-RAM (no drives required), CPU-based mode.
  • GPU (CUDA-based) mode. Both fully in-RAM or disk-hybrid mode.
  • Disk-based mode

Usage

Run bladebit --help to see general help. For command-specific help, use bladebit help <command_name>.

Requirements

CUDA

An NVIDIA GPU is required for this mode. This mode is exposed via the cudaplot command in a separate executable "bladebit_cuda". This mode has mainly been tested on consumer cards from the 10xx series and up.

Mode OS DRAM VRAM CUDA capability
In-RAM Linux, Windows 256G 8G 5.2 and up
Disk-hybrid 128G Linux, Windows 128G 8G 5.2 and up
Disk-hybrid 16G (WIP) Linux 16G 8G 5.2 and up

NOTE: 16G mode currently a work in progress and at this stage it only works in Linux and direct I/O is unavailable in this mode.

CPU RAM-Only

Available on Linux, Windows and macOS. Requires at least 416G of system DRAM.

Disk

Available on Linux, Windows and macOS.

A minimum of 4 GiB of RAM is required, with lower bucket counts requiring up to 12 GiB of RAM. Roughly 480 GiB of disk space is required in the default mode, or around 390 GiB of disk space with --alternate mode enabled.

The exact amounts of RAM and disk space required may vary slightly depending on the system's page size and the target disk file system block size (block-alignment is required for direct I/O).

SSDs are highly recommended for disk-based plotting.

Compressed Plots

Compressed plots are supported in CUDA mode and in RAM-only mode. CPU Disk-based mode does NOT currently support compressed plots.

Compressed plots are currently supported for compression levels from C1 to C7. Note that bladebit compression levels are not compatible with other plotter compression levels. These compression levels are based on the number of bits dropped from an entry excluding the minimum bits required to fully drop a table. At k=32 a the first table is fully excluded from the plot at 16 bits dropped.

NOTE: Although higher compression levels are available, support for farming them has not been currently implemented and are therefore disabled. They will be implemented in the future.

Compression levels are currently roughly equivalent to the following plot sizes.

Compression Level Plot Size
C1 87.5 GiB
C2 86.0 GiB
C3 84.4 GiB
C4 82.8 GiB
C5 81.2 GiB
C6 79.6 GiB
C7 78.0 GiB

These might be optimized in the future with further compression optimizations.

Requirements

GPU (CUDA) Plotter Requirements

Supported system configurations for alpha:

OS Windows and Linux
Memory 256GB of system DRAM
GPUs NVIDIA GPUs with CUDA capability 5.2 and up with at least 8GB of vRAM

See https://developer.nvidia.com/cuda-gpus for compatible GPUs.


In-RAM

416 GiB of RAM are required to run it, and a few more megabytes for stack space and small allocations.

64-bit is supported only, for obvious reasons.

Disk-based

A minimum of 4 GiB of RAM is required, with lower bucket counts requiring up to 12 GiB of RAM.

Around 480 GiB of total temporary space is required when plotting to disk in the default mode, or around 390 GiB with --alternate mode enabled.

The exact amounts of RAM and disk space required may vary slightly depending on the system's page size and the target disk file system block size (block-alignment is required for direct I/O).

SSDs are highly recommended for disk-based plotting.

Prerequisites

Linux, Windows and macOS (both Intel and ARM) are supported.

Linux

Install the following packages:

# CentOS or RHEL-based
sudo yum group install -y "Development Tools"
sudo yum install -y cmake gmp-devel numactl-devel

# Ubuntu or Debian-based
sudo apt install -y build-essential cmake libgmp-dev libnuma-dev

Windows

Must have at least Visual Studio 2019 or its build tools installed.

macOS

Must have Xcode or Xcode build tools installed. brew install cmake

Optionally install gmp: brew install gmp

Building

# Clone the repo & its submodules
git clone https://github.com/Chia-Network/bladebit.git && cd bladebit

# Create a build directory for cmake and cd into it
mkdir -p build && cd build

# Generate config files & build
cmake ..
cmake --build . --target bladebit --config Release

The resulting binary will be found under the build/ directory. On Windows it will be under build/Release/.

For bladebit_cuda, the CUDA toolkit must be installed. The target name is bladebit_cuda.

For simplicity the build.sh or build-cuda.sh scripts can be used to build. On Windows this requires gitbash or similar bash-based shell to run.

Usage

Run bladebit (or bladebit_cuda) with the -h for complete usage and command line options:

# Linux & macOS
build/bladebit -h

# Windows
build/Release/bladebit.exe -h

The bladebit CLI uses the format bladebit <GLOBAL_OPTIONS> <command> <COMMAND_OPTIONS>.

Use the aforementioned -h parameter to get the full list of commands and GLOBAL_OPTIONS. The command-specific COMMAND_OPTIONS can be obtained by using the help sub command with the desired command as the parameter:

bladebit help cudaplot
bladebit help ramplot
bladebit help diskplot

CUDA

Basic cudaplot usage:

# OG plots
./bladebit_cuda -f <farmer_public_key> -p <pool_public_key> cudaplot <output_directory>

# Portable plots
./bladebit_cuda -f <farmer_public_key> -c <pool_contract_address> cudaplot <output_directory>

# Compressed plots
./bladebit_cuda -z <copression_level> -f <farmer_public_key> -c <pool_contract_address> cudaplot <output_directory>

# 128G disk-hybrid mode
./bladebit_cuda -z <copression_level> -f <farmer_public_key> -c <pool_contract_address> cudaplot --disk-128 -t1 <temp_dir> <output_directory>

In-RAM

Basic ramplot usage:

# OG plots
./bladebit -f <farmer_public_key> -p <pool_public_key> ramplot <output_directory>

# Portable plots
./bladebit -f <farmer_public_key> -c <pool_contract_address> ramplot <output_directory>

# Compressed plots
./bladebit -z <copression_level> -f <farmer_public_key> -c <pool_contract_address> ramplot <output_directory>

Disk-Based

Basic diskplot usage:

# OG plots
./bladebit -f <farmer_public_key> -p <pool_public_key> diskplot -t1 <temp_directory> <output_directory>

# Portable plots
./bladebit -f <farmer_public_key> -c <pool_contract_address> diskplot -t1 <temp_directory> <output_directory>

# Differing temp directories:
./bladebit -f ... -c ... diskplot -t1 /path/to/temp_1 -t2 /path/to/temp2 /my/output/dir

# With a 100 GiB temp2 cache and alternating mode
./bladebit -f ... -c ... diskplot -a --cache 100G -t1 /path/to/temp_1 -t2 /path/to/temp2 /my/output/dir

# With fine-grained thread control depending on the workload
./bladebit -f ... -c ... diskplot --f1-threads 12 --fp-threads 32 -t1 /path/to/temp_1  /my/output/dir

License

Licensed under the Apache 2.0 license. See LICENSE.

Copyright 2023 Harold Brenes, Chia Network Inc

bladebit's People

Contributors

alexguo1998 avatar altendky avatar chiaautomation avatar cmmarslender avatar dependabot[bot] avatar haorldbchi avatar harold-b avatar mocksoul avatar nirajpathak13 avatar wallentx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bladebit's Issues

Random deadlock/freeze during plotting at phrase 3

It really happens randomly and I have not find a solid way to reproduce.

I have been testing Bladebit using a dual AMD EPYC 64 Core (total 256 threads) with 512G RAM with following setting:

./bladebit -f aeXXX -c xchYYY -n 10 -w -v /mnt/t10/

Exporting to a SSD

The phrase 3 will randomly freeze at any part of compression tables, I don't see any pattern there either.
During the frozen, the CPU will keep nearly 100% usage.

Compile error - Threadripper Pro

src/platform/linux/SysHost_Linux.cpp:9:10: fatal error: numa.h: No such file or directory
9 | #include <numa.h>
| ^~~~~~~~
compilation terminated.

plz, help a noob with install cmnds on ubuntu

i am sorry for my noob question as i am totally new to Linux (using ubuntu 20.04).

i would like to know which commands to use to install all needed packets/files on ubuntu.

plz, provide full commands. not some parts of it.

thanks in advance

Crashing in Phase 4

Here's the code I'm getting:

Running Phase 4
Writing P7.
Finished writing P7 in 0.41 seconds.
Writing C1 table.
Finished writing C1 table in 0.00 seconds.
Writing C2 table.
Finished writing C2 table in 0.00 seconds.
Writing C3 table.
*** Crashed! ***
./bladebit(+0x13b54)[0x5615194e9b54]
/lib/x86_64-linux-gnu/libc.so.6(+0x46210)[0x7effd02af210]
./bladebit(+0xe2ed)[0x5615194e42ed]
./bladebit(+0x14160)[0x5615194ea160]
./bladebit(+0x12a95)[0x5615194e8a95]
./bladebit(+0x10389)[0x5615194e6389]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x9609)[0x7effd0464609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7effd038b293]

Bladebit 1.2.2 closing without errors - Windows Server 2019

I'm trying to get bladebit running on an R720 with 768GB of RAM and Windows server 2019. When I run bladebit it shows allocating buffers for ~10 seconds then just closes with no errors. I was hoping someone might be able to point me in the right direction.

Here's what I'm seeing:

D:\Chia_Plotter\bladebit-v1.2.2-windows-x86-64>bladebit.exe -t 36 -n 1 -v -c xch[TRUNCATED] -f 948[TRUNCATED] F:\Chia
Creating 1 plots:
Output path : F:\Chia
Thread count : 36
Warm start enabled : false
Farmer public key : 948[TRUNCATED]
Pool contract address : xch[TRUNCATED]
System Memory: 543/767 GiB.
Memory required: 416 GiB.
Allocating buffers.
D:\Chia_Plotter\bladebit-v1.2.2-windows-x86-64>

Tracking performance discrepancies on Windows vs Linux

User Reythia on reddit provided timings for several timings for tests he ran, showing severe performance deficiencies, especially during Phase 1 sort, when running on windows as compared to Linux (even on WSL better results were obtained):

Time - seconds Windows (v1.2.0) WSL (v1.2.0) WSL (v1.1.0 control)
Phase 1 954 324 324
of which sorting 848 194 191
Phase 2 32 32 32
Phase 3 372 175 175
Phase 4 0.7 0.7 0.7
Total 1363 560 560
    -m --no-cpu... -m --no-cpu WSL WSL -m
Phase 1 954 468 604 649 295 302
sorting 848 358 481 525 172 177
other 106 110 123 124 123 125
Phase 2 32 32 32 32 32 32
Phase 3 372 228 177 176 172 172
Phase 4 0.7 0.7 0.7 0.7 0.7 0.7
Total 1363 730 817 860 526 533

Tests performed on:

Threadripper 3995wx with RAM @ 3200MHz. Output drive is an NVME RAID 0. Windows Enterprise.

Start creating new Plot regardless of the transfer process to HDD.

I can create PLOTS within 400sec on my system but it takes longer to transfer to HDD due to HDD speed.
Is there a way for it to do like MADMAX and start the creation of a new PLOT but the transfer/copy process keeps running on the background until is done?
Please advise.
A temp HDD/SSD for it as suggested before would be a good solution too.

plot file permissions do not match other plotters

other plotters create the final file with 664 for the file permissions which allow for access via samba/cifs from windows. The files produced by bladebit have the permissions set to 660 which requires intervention post creation to make them visible to the chia client from windows.

While compilation process .bin folder is not created

CMakeError.log
CMakeOutput.log
Hello!
During compilation process I got this errors in CmakeError.log as below. Something seems go wrong and .bin folder with bladebit bin files wasn't created.

Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output:
Change Dir: /home/r730xd/bladebit/modules/bls-signatures/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_c5cac/fast && /usr/bin/make -f CMakeFiles/cmTC_c5cac.dir/build.make CMakeFiles/cmTC_c5cac.dir/build
make[1]: Entering directory '/home/r730xd/bladebit/modules/bls-signatures/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_c5cac.dir/src.c.o
/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -fPIE -o CMakeFiles/cmTC_c5cac.dir/src.c.o -c /home/r730xd/bladebit/modules/bls-signatures/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_c5cac
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c5cac.dir/link.txt --verbose=1
/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -rdynamic CMakeFiles/cmTC_c5cac.dir/src.c.o -o cmTC_c5cac
/usr/bin/ld: CMakeFiles/cmTC_c5cac.dir/src.c.o: in function main': src.c:(.text+0x46): undefined reference to pthread_create'
/usr/bin/ld: src.c:(.text+0x52): undefined reference to pthread_detach' /usr/bin/ld: src.c:(.text+0x63): undefined reference to pthread_join'
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_c5cac.dir/build.make:87: cmTC_c5cac] Error 1
make[1]: Leaving directory '/home/r730xd/bladebit/modules/bls-signatures/build/CMakeFiles/CMakeTmp'
make: *** [Makefile:121: cmTC_c5cac/fast] Error 2

Source file was:
#include <pthread.h>

void* test_func(void* data)
{
return data;
}

int main(void)
{
pthread_t thread;
pthread_create(&thread, NULL, test_func, NULL);
pthread_detach(thread);
pthread_join(thread, NULL);
pthread_atfork(NULL, NULL, NULL);
pthread_exit(NULL);

return 0;
}

Determining if the function pthread_create exists in the pthreads failed with the following output:
Change Dir: /home/r730xd/bladebit/modules/bls-signatures/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/make cmTC_26df1/fast && /usr/bin/make -f CMakeFiles/cmTC_26df1.dir/build.make CMakeFiles/cmTC_26df1.dir/build
make[1]: Entering directory '/home/r730xd/bladebit/modules/bls-signatures/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_26df1.dir/CheckFunctionExists.c.o
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -fPIE -o CMakeFiles/cmTC_26df1.dir/CheckFunctionExists.c.o -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c
Linking C executable cmTC_26df1
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_26df1.dir/link.txt --verbose=1
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -rdynamic CMakeFiles/cmTC_26df1.dir/CheckFunctionExists.c.o -o cmTC_26df1 -lpthreads
/usr/bin/ld: cannot find -lpthreads
collect2: error: ld returned 1 exit status
make[1]: *** [CMakeFiles/cmTC_26df1.dir/build.make:87: cmTC_26df1] Error 1
make[1]: Leaving directory '/home/r730xd/bladebit/modules/bls-signatures/build/CMakeFiles/CMakeTmp'
make: *** [Makefile:121: cmTC_26df1/fast] Error 2

I tried to install many packages related to "pthread" with no result.
Thx in advance.

No CPU affinity, logical cores low usage!

Hi,

It is my understanding that bladebit uses should have at "t" thread count the actual physical cores of the CPU, not also logical ones, so running say 4 concurrent instances of bladebit with the --no-cpu-affinity arg, but specifying -t 32 for example for my dual Epyc 7763 system, ends up using all physical cores and very few and rare logical core activity.

Shouldn't bladebit be able to use -t 64 and thus extent the work into the logical cores too?

My plots don't appear to count towards pool plots in the Chia GUI

Unsure if this is related to the issue(s) in #122 where I reported bladebit stopped respecting destination file path.

It no longer appears that bladebit respects the pool contract address via the -c flag, all of the plots I have made appear to be solo plots, and no longer count toward my pool total in the Chia GUI, although they still appear to be valid plots, but not associated to an NFT.

Plots created with MadMax still appear to increase the count of plots, leading me to believe it's not a Chia GUI issue.

I am unsure how to test or prove this further, but happy to help troubleshoot in any way that I can.

Cannot compile

src/platform/linux/SysHost_Linux.cpp:9:10: fatal error: numa.h: No such file or directory
9 | #include <numa.h>
| ^~~~~~~~
src/util/Log.cpp
compilation terminated.
make: *** [Makefile:190: .obj/platform/linux/SysHost_Linux.o] Error 1
make: *** Waiting for unfinished jobs....

fatal error: numa.h: No such file or directory

src/platform/linux/SysHost_Linux.cpp:9:10: fatal error: numa.h: No such file or directory
#include <numa.h>
^~~~~~~~
compilation terminated.
make: *** [Makefile:189: .obj/platform/linux/SysHost_Linux.o] Error 1
make: *** Waiting for unfinished jobs....

error: size of array element is not a multiple of its alignment

On Arch Linux have error:

[ 82%] Building C object _deps/relic-build/src/CMakeFiles/relic_s.dir/md/blake2s-ref.c.o
In file included from /home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2s-ref.c:18:
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:101:5: error: size of array element is not a multiple of its alignment
101 | blake2s_state S[8][1];
| ^~~~~~~~~~~~~
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:102:5: error: size of array element is not a multiple of its alignment
102 | blake2s_state R[1];
| ^~~~~~~~~~~~~
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:109:5: error: size of array element is not a multiple of its alignment
109 | blake2b_state S[4][1];
| ^~~~~~~~~~~~~
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:110:5: error: size of array element is not a multiple of its alignment
110 | blake2b_state R[1];
| ^~~~~~~~~~~~~
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2s-ref.c: В функции «blake2s»:
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2s-ref.c:329:3: error: size of array element is not a multiple of its alignment
329 | blake2s_state S[1];
| ^~~~~~~~~~~~~
[ 83%] Building C object _deps/relic-build/src/CMakeFiles/relic_s.dir/md/relic_md_blake2s.c.o
make[2]: *** [_deps/relic-build/src/CMakeFiles/relic_s.dir/build.make:2834: _deps/relic-build/src/CMakeFiles/relic_s.dir/md/blake2s-ref.c.o] Error 1
make[2]: *** Ожидание завершения заданий…
In file included from /home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/relic_md_blake2s.c:38:
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:101:5: error: size of array element is not a multiple of its alignment
101 | blake2s_state S[8][1];
| ^~~~~~~~~~~~~
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:102:5: error: size of array element is not a multiple of its alignment
102 | blake2s_state R[1];
| ^~~~~~~~~~~~~
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:109:5: error: size of array element is not a multiple of its alignment
109 | blake2b_state S[4][1];
| ^~~~~~~~~~~~~
/home/user/builds/bladebit/modules/bls-signatures/build/_deps/relic-src/src/md/blake2.h:110:5: error: size of array element is not a multiple of its alignment
110 | blake2b_state R[1];
| ^~~~~~~~~~~~~
make[2]: *** [_deps/relic-build/src/CMakeFiles/relic_s.dir/build.make:2848: _deps/relic-build/src/CMakeFiles/relic_s.dir/md/relic_md_blake2s.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:242: _deps/relic-build/src/CMakeFiles/relic_s.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

tiny typo

main.cpp
line 276

        else if( check( "-v" ) || check( "--verbose " ) )

extra space after --verbose

make on Arch Linux

in continuation of the issue #77

Give RELIC_MAIN=1 ./build-bls a try

$ make clean && make -j$(nproc --all)
src/algorithm/YSort.cpp
src/b3/blake3_avx2_x86-64_unix.S
src/b3/blake3_avx512_x86-64_unix.S
Compiling for linux with g++
src/b3/blake3_dispatch.c
src/b3/blake3_portable.c
src/b3/blake3_sse41_x86-64_unix.S
src/b3/blake3.c
src/bech32/segwit_addr.c
src/fse/debug.c
src/fse/entropy_common.c
src/fse/fse_compress.c
src/fse/fse_decompress.c
src/fse/hist.c
src/io/FileStream.cpp
src/main.cpp
src/memplot/DbgHelper.cpp
src/memplot/MemPhase1.cpp
src/memplot/MemPhase2.cpp
src/memplot/MemPhase3.cpp
src/memplot/MemPlotter.cpp
src/memplot/MemPhase4.cpp
src/pch.cpp
src/platform/linux/SysHost_Linux.cpp
src/platform/unix/FileStream_Unix.cpp
src/PlotContext.cpp
src/PlotWriter.cpp
src/pos/chacha8.cpp
src/SysHost.cpp
src/threading/Semaphore.cpp
src/threading/Thread.cpp
src/threading/ThreadPool.cpp
src/Util.cpp
src/util/Log.cpp
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_add_low.c.o): in function bn_addn_low': relic_bn_add_low.c:(.text+0x6f4): undefined reference to __gmpn_add_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_add_low.c.o): in function bn_subn_low': relic_bn_add_low.c:(.text+0xdd4): undefined reference to __gmpn_sub_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_mod_low.c.o): in function bn_modn_low': relic_bn_mod_low.c:(.text+0x1ce): undefined reference to __gmpn_addmul_1'
/usr/bin/ld: relic_bn_mod_low.c:(.text+0x1eb): undefined reference to __gmpn_addmul_1' /usr/bin/ld: relic_bn_mod_low.c:(.text+0x208): undefined reference to __gmpn_addmul_1'
/usr/bin/ld: relic_bn_mod_low.c:(.text+0x226): undefined reference to __gmpn_addmul_1' /usr/bin/ld: relic_bn_mod_low.c:(.text+0x240): undefined reference to __gmpn_addmul_1'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_mod_low.c.o):relic_bn_mod_low.c:(.text+0x25b): more undefined references to __gmpn_addmul_1' follow /usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_mod_low.c.o): in function bn_modn_low':
relic_bn_mod_low.c:(.text+0x294): undefined reference to __gmpn_add_n' /usr/bin/ld: relic_bn_mod_low.c:(.text+0x2cb): undefined reference to __gmpn_sub_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): in function bn_mula_low': relic_bn_mul_low.c:(.text+0xa): undefined reference to __gmpn_addmul_1'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): in function bn_mul1_low': relic_bn_mul_low.c:(.text+0x1a): undefined reference to __gmpn_mul_1'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): in function bn_muln_low': relic_bn_mul_low.c:(.text+0x24): undefined reference to __gmpn_mul_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): in function bn_muld_low': relic_bn_mul_low.c:(.text+0x37): undefined reference to __gmpn_mul'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): in function bn_lsh1_low': relic_bn_shift_low.c:(.text+0x9): undefined reference to __gmpn_lshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): in function bn_lshb_low': relic_bn_shift_low.c:(.text+0x14): undefined reference to __gmpn_lshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): in function bn_rsh1_low': relic_bn_shift_low.c:(.text+0x29): undefined reference to __gmpn_rshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): in function bn_rshb_low': relic_bn_shift_low.c:(.text+0x34): undefined reference to __gmpn_rshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fb_add_low.c.o): in function fb_addn_low': relic_fb_add_low.c:(.text+0x66): undefined reference to __gmpn_xor_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fb_add_low.c.o): in function fb_addd_low': relic_fb_add_low.c:(.text+0x74): undefined reference to __gmpn_xor_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): in function fb_lsh1_low': relic_fb_shift_low.c:(.text+0xb): undefined reference to __gmpn_lshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): in function fb_lshb_low': relic_fb_shift_low.c:(.text+0x18): undefined reference to __gmpn_lshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): in function fb_rsh1_low': relic_fb_shift_low.c:(.text+0x2b): undefined reference to __gmpn_rshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): in function fb_rshb_low': relic_fb_shift_low.c:(.text+0x38): undefined reference to __gmpn_rshift'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_addm_low': relic_fp_add_low.c:(.text+0x1ba): undefined reference to __gmpn_add_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_addc_low': relic_fp_add_low.c:(.text+0x22e): undefined reference to __gmpn_add_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_subm_low': relic_fp_add_low.c:(.text+0x43a): undefined reference to __gmpn_sub_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_subc_low': relic_fp_add_low.c:(.text+0x48a): undefined reference to __gmpn_sub_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_dblm_low': relic_fp_add_low.c:(.text+0x52d): undefined reference to __gmpn_add_n'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_hlvm_low': relic_fp_add_low.c:(.text+0x596): undefined reference to __gmpn_add_n'
/usr/bin/ld: relic_fp_add_low.c:(.text+0x5ae): undefined reference to __gmpn_rshift' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_hlvd_low':
relic_fp_add_low.c:(.text+0x625): undefined reference to __gmpn_add_n' /usr/bin/ld: relic_fp_add_low.c:(.text+0x6a1): undefined reference to __gmpn_rshift'
/usr/bin/ld: relic_fp_add_low.c:(.text+0x6b9): undefined reference to __gmpn_rshift' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_addn_low':
relic_fp_add_low.c:(.text+0x1a6): undefined reference to __gmpn_add_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_addm_low':
relic_fp_add_low.c:(.text+0x1f2): undefined reference to __gmpn_sub_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_addd_low':
relic_fp_add_low.c:(.text+0x216): undefined reference to __gmpn_add_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_addc_low':
relic_fp_add_low.c:(.text+0x266): undefined reference to __gmpn_sub_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_subn_low':
relic_fp_add_low.c:(.text+0x426): undefined reference to __gmpn_sub_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_subm_low':
relic_fp_add_low.c:(.text+0x45d): undefined reference to __gmpn_add_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_subd_low':
relic_fp_add_low.c:(.text+0x476): undefined reference to __gmpn_sub_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_subc_low':
relic_fp_add_low.c:(.text+0x4ae): undefined reference to __gmpn_add_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_negm_low':
relic_fp_add_low.c:(.text+0x50b): undefined reference to __gmpn_sub_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_dbln_low':
relic_fp_add_low.c:(.text+0x519): undefined reference to __gmpn_add_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_add_low.c.o): in function fp_hlvm_low':
relic_fp_add_low.c:(.text+0x5ea): undefined reference to __gmpn_rshift' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_inv_low.c.o): in function fp_invm_low':
relic_fp_inv_low.c:(.text+0x9d): undefined reference to __gmpn_gcdext' /usr/bin/ld: relic_fp_inv_low.c:(.text+0xfb): undefined reference to __gmpn_tdiv_qr'
/usr/bin/ld: relic_fp_inv_low.c:(.text+0x14e): undefined reference to __gmpn_sub_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_mul_low.c.o): in function fp_mula_low':
relic_fp_mul_low.c:(.text+0x9): undefined reference to __gmpn_addmul_1' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_mul_low.c.o): in function fp_mul1_low':
relic_fp_mul_low.c:(.text+0x19): undefined reference to __gmpn_mul_1' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_mul_low.c.o): in function fp_muln_low':
relic_fp_mul_low.c:(.text+0x26): undefined reference to __gmpn_mul_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_rdc_low.c.o): in function fp_rdcn_low':
relic_fp_rdc_low.c:(.text+0x5b8): undefined reference to __gmpn_addmul_1' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): in function fp_lsh1_low':
relic_fp_shift_low.c:(.text+0xb): undefined reference to __gmpn_lshift' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): in function fp_lshb_low':
relic_fp_shift_low.c:(.text+0x18): undefined reference to __gmpn_lshift' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): in function fp_rsh1_low':
relic_fp_shift_low.c:(.text+0x2b): undefined reference to __gmpn_rshift' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): in function fp_rshb_low':
relic_fp_shift_low.c:(.text+0x38): undefined reference to __gmpn_rshift' /usr/bin/ld: lib/linux/x86/libbls.a(relic_fp_sqr_low.c.o): in function fp_sqrn_low':
relic_fp_sqr_low.c:(.text+0x9): undefined reference to __gmpn_mul_n' /usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_div_low.c.o): in function bn_divn_low':
relic_bn_div_low.c:(.text+0x15): undefined reference to __gmpn_tdiv_qr' /usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_div_low.c.o): in function bn_div1_low':
relic_bn_div_low.c:(.text+0x2a): undefined reference to __gmpn_divrem_1' /usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_sqr_low.c.o): in function bn_sqra_low':
relic_bn_sqr_low.c:(.text+0x2c): undefined reference to __gmpn_addmul_1' /usr/bin/ld: relic_bn_sqr_low.c:(.text+0x50): undefined reference to __gmpn_addmul_1'
/usr/bin/ld: lib/linux/x86/libbls.a(relic_bn_sqr_low.c.o): in function bn_sqrn_low': relic_bn_sqr_low.c:(.text+0x77): undefined reference to __gmpn_mul_n'
collect2: error: ld returned 1 exit status
make: *** [Makefile:157: bladebit] Error 1

make error on Centos 7

[~/bladebit]: make clean && make -j$(nproc --all)
src/b3/blake3_avx2_x86-64_unix.S
Compiling for linux with g++
src/b3/blake3_avx512_x86-64_unix.S
src/b3/blake3_dispatch.c
src/b3/blake3_portable.c
src/b3/blake3_sse41_x86-64_unix.S
src/b3/blake3.c
src/bech32/segwit_addr.c
src/fse/debug.c
src/fse/entropy_common.c
src/fse/fse_compress.c
src/fse/fse_decompress.c
src/fse/hist.c
src/io/FileStream.cpp
src/main.cpp
src/memplot/DbgHelper.cpp
src/memplot/MemPhase1.cpp
src/memplot/MemPhase2.cpp
src/memplot/MemPhase3.cpp
src/memplot/MemPhase4.cpp
src/memplot/MemPlotter.cpp
src/pch.cpp
src/platform/linux/SysHost_Linux.cpp
src/platform/unix/FileStream_Unix.cpp
src/PlotContext.cpp
src/PlotWriter.cpp
src/pos/chacha8.cpp
src/SysHost.cpp
src/threading/Semaphore.cpp
src/threading/Thread.cpp
src/threading/ThreadPool.cpp
src/Util.cpp
src/util/Log.cpp
lib/linux/x86/libbls.a(relic_bn_add_low.c.o): In function bn_addn_low': relic_bn_add_low.c:(.text+0x414): undefined reference to __gmpn_add_n'
lib/linux/x86/libbls.a(relic_bn_add_low.c.o): In function bn_subn_low': relic_bn_add_low.c:(.text+0x844): undefined reference to __gmpn_sub_n'
lib/linux/x86/libbls.a(relic_bn_mod_low.c.o): In function bn_modn_low': relic_bn_mod_low.c:(.text+0x163): undefined reference to __gmpn_addmul_1'
relic_bn_mod_low.c:(.text+0x180): undefined reference to __gmpn_addmul_1' relic_bn_mod_low.c:(.text+0x19d): undefined reference to __gmpn_addmul_1'
relic_bn_mod_low.c:(.text+0x1bb): undefined reference to __gmpn_addmul_1' relic_bn_mod_low.c:(.text+0x1d5): undefined reference to __gmpn_addmul_1'
lib/linux/x86/libbls.a(relic_bn_mod_low.c.o):relic_bn_mod_low.c:(.text+0x1f0): more undefined references to __gmpn_addmul_1' follow lib/linux/x86/libbls.a(relic_bn_mod_low.c.o): In function bn_modn_low':
relic_bn_mod_low.c:(.text+0x229): undefined reference to __gmpn_add_n' relic_bn_mod_low.c:(.text+0x263): undefined reference to __gmpn_sub_n'
lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): In function bn_mula_low': relic_bn_mul_low.c:(.text+0xa): undefined reference to __gmpn_addmul_1'
lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): In function bn_mul1_low': relic_bn_mul_low.c:(.text+0x1a): undefined reference to __gmpn_mul_1'
lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): In function bn_muln_low': relic_bn_mul_low.c:(.text+0x24): undefined reference to __gmpn_mul_n'
lib/linux/x86/libbls.a(relic_bn_mul_low.c.o): In function bn_muld_low': relic_bn_mul_low.c:(.text+0x37): undefined reference to __gmpn_mul'
lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): In function bn_lsh1_low': relic_bn_shift_low.c:(.text+0x9): undefined reference to __gmpn_lshift'
lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): In function bn_lshb_low': relic_bn_shift_low.c:(.text+0x14): undefined reference to __gmpn_lshift'
lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): In function bn_rsh1_low': relic_bn_shift_low.c:(.text+0x29): undefined reference to __gmpn_rshift'
lib/linux/x86/libbls.a(relic_bn_shift_low.c.o): In function bn_rshb_low': relic_bn_shift_low.c:(.text+0x34): undefined reference to __gmpn_rshift'
lib/linux/x86/libbls.a(relic_fb_add_low.c.o): In function fb_addn_low': relic_fb_add_low.c:(.text+0x36): undefined reference to __gmpn_xor_n'
lib/linux/x86/libbls.a(relic_fb_add_low.c.o): In function fb_addd_low': relic_fb_add_low.c:(.text+0x44): undefined reference to __gmpn_xor_n'
lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): In function fb_lsh1_low': relic_fb_shift_low.c:(.text+0xb): undefined reference to __gmpn_lshift'
lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): In function fb_lshb_low': relic_fb_shift_low.c:(.text+0x18): undefined reference to __gmpn_lshift'
lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): In function fb_rsh1_low': relic_fb_shift_low.c:(.text+0x2b): undefined reference to __gmpn_rshift'
lib/linux/x86/libbls.a(relic_fb_shift_low.c.o): In function fb_rshb_low': relic_fb_shift_low.c:(.text+0x38): undefined reference to __gmpn_rshift'
lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_addm_low': relic_fp_add_low.c:(.text+0x11a): undefined reference to __gmpn_add_n'
lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_addc_low': relic_fp_add_low.c:(.text+0x18e): undefined reference to __gmpn_add_n'
lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_subm_low': relic_fp_add_low.c:(.text+0x31a): undefined reference to __gmpn_sub_n'
lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_subc_low': relic_fp_add_low.c:(.text+0x36a): undefined reference to __gmpn_sub_n'
lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_dblm_low': relic_fp_add_low.c:(.text+0x40d): undefined reference to __gmpn_add_n'
lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_hlvm_low': relic_fp_add_low.c:(.text+0x479): undefined reference to __gmpn_add_n'
relic_fp_add_low.c:(.text+0x491): undefined reference to __gmpn_rshift' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_hlvd_low':
relic_fp_add_low.c:(.text+0x515): undefined reference to __gmpn_add_n' relic_fp_add_low.c:(.text+0x58c): undefined reference to __gmpn_rshift'
relic_fp_add_low.c:(.text+0x5a4): undefined reference to __gmpn_rshift' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_addn_low':
relic_fp_add_low.c:(.text+0x106): undefined reference to __gmpn_add_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_addm_low':
relic_fp_add_low.c:(.text+0x152): undefined reference to __gmpn_sub_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_addd_low':
relic_fp_add_low.c:(.text+0x176): undefined reference to __gmpn_add_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_addc_low':
relic_fp_add_low.c:(.text+0x1c6): undefined reference to __gmpn_sub_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_subn_low':
relic_fp_add_low.c:(.text+0x306): undefined reference to __gmpn_sub_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_subm_low':
relic_fp_add_low.c:(.text+0x33d): undefined reference to __gmpn_add_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_subd_low':
relic_fp_add_low.c:(.text+0x356): undefined reference to __gmpn_sub_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_subc_low':
relic_fp_add_low.c:(.text+0x38e): undefined reference to __gmpn_add_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_negm_low':
relic_fp_add_low.c:(.text+0x3ea): undefined reference to __gmpn_sub_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_dbln_low':
relic_fp_add_low.c:(.text+0x3f9): undefined reference to __gmpn_add_n' lib/linux/x86/libbls.a(relic_fp_add_low.c.o): In function fp_hlvm_low':
relic_fp_add_low.c:(.text+0x4d1): undefined reference to __gmpn_rshift' lib/linux/x86/libbls.a(relic_fp_inv_low.c.o): In function fp_invm_low':
relic_fp_inv_low.c:(.text+0x81): undefined reference to __gmpn_gcdext' relic_fp_inv_low.c:(.text+0xe0): undefined reference to __gmpn_tdiv_qr'
relic_fp_inv_low.c:(.text+0x11e): undefined reference to __gmpn_sub_n' lib/linux/x86/libbls.a(relic_fp_mul_low.c.o): In function fp_mula_low':
relic_fp_mul_low.c:(.text+0x9): undefined reference to __gmpn_addmul_1' lib/linux/x86/libbls.a(relic_fp_mul_low.c.o): In function fp_mul1_low':
relic_fp_mul_low.c:(.text+0x19): undefined reference to __gmpn_mul_1' lib/linux/x86/libbls.a(relic_fp_mul_low.c.o): In function fp_muln_low':
relic_fp_mul_low.c:(.text+0x26): undefined reference to __gmpn_mul_n' lib/linux/x86/libbls.a(relic_fp_rdc_low.c.o): In function fp_rdcn_low':
relic_fp_rdc_low.c:(.text+0x527): undefined reference to __gmpn_addmul_1' lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): In function fp_lsh1_low':
relic_fp_shift_low.c:(.text+0xb): undefined reference to __gmpn_lshift' lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): In function fp_lshb_low':
relic_fp_shift_low.c:(.text+0x18): undefined reference to __gmpn_lshift' lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): In function fp_rsh1_low':
relic_fp_shift_low.c:(.text+0x2b): undefined reference to __gmpn_rshift' lib/linux/x86/libbls.a(relic_fp_shift_low.c.o): In function fp_rshb_low':
relic_fp_shift_low.c:(.text+0x38): undefined reference to __gmpn_rshift' lib/linux/x86/libbls.a(relic_fp_sqr_low.c.o): In function fp_sqrn_low':
relic_fp_sqr_low.c:(.text+0x9): undefined reference to __gmpn_mul_n' lib/linux/x86/libbls.a(relic_bn_div_low.c.o): In function bn_divn_low':
relic_bn_div_low.c:(.text+0x15): undefined reference to __gmpn_tdiv_qr' lib/linux/x86/libbls.a(relic_bn_div_low.c.o): In function bn_div1_low':
relic_bn_div_low.c:(.text+0x2a): undefined reference to __gmpn_divrem_1' lib/linux/x86/libbls.a(relic_bn_sqr_low.c.o): In function bn_sqra_low':
relic_bn_sqr_low.c:(.text+0x28): undefined reference to __gmpn_addmul_1' relic_bn_sqr_low.c:(.text+0x52): undefined reference to __gmpn_addmul_1'
lib/linux/x86/libbls.a(relic_bn_sqr_low.c.o): In function bn_sqrn_low': relic_bn_sqr_low.c:(.text+0x87): undefined reference to __gmpn_mul_n'
collect2: error: ld returned 1 exit status
make: *** [Makefile:157: bladebit] Error 1

Lower The RAM Capacity Requirement

This is a suggestion/request which is to lower the RAM capacity requirement from 416GIB to either 128GB or even lower to 64GB just because not many motherboards can support that much ram most of them the max limit is between 32GB and128GB it wouldn't make sense to make a plotter that requires that much of ram so that's my suggestion/request to lower the ram capacity requirement from 416GIB to 128GB or even lower to 64GB

k33

When will it be possible to create k-33 plots?

Precompiled bladebit-1.2.2 crashes with Illegal instruction on Haswell CPU .vs. AVX512

1) Problem description
Precompiled bladebit-1.2.2 crashes with Illegal instruction on Haswell CPU

2) Output when it crashes
Creating 1 plots:
 Output path           : /plot12/
 Thread count          : 64
 Warm start enabled    : false
 Farmer public key     : xxx
 Pool contract address : xxx

System Memory: 500/503 GiB.
Memory required: 416 GiB.
Allocating buffers.
Generating plot 1 / 1: xxx

Running Phase 1
Illegal instruction (core dumped)

3) Analysis

3a)
dmesg shows: 
traps: bladebit[28531] trap invalid opcode ip:405580 sp:7ffddce72300 error:0 in bladebit[400000+fe000]

3b) Look Up ip:405580
objdump -d bladebit |grep -C3 405580:
  405572:	41 b9 00 e6 6f 00    	mov    $0x6fe600,%r9d
  405578:	45 31 c0             	xor    %r8d,%r8d
  40557b:	bf 7f 00 00 00       	mov    $0x7f,%edi
  405580:	62 52 7d 48 7b c0    	vpbroadcastw %r8d,%zmm8 ---> HERE it crashes
  405586:	4c 89 ce             	mov    %r9,%rsi
  405589:	31 c9                	xor    %ecx,%ecx
  40558b:	89 c8                	mov    %ecx,%eax

3c) So that is related to AVX
"vpbroadcastw" with _register_ operand is AVX512 instruction
see https://www.felixcloutier.com/x86/vpbroadcastb:vpbroadcastw:vpbroadcastd:vpbroadcastq
and https://www.felixcloutier.com/x86/vpbroadcast

3d) The CPU (Haswell) can only do AVX2
Model name:          Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz

3e) Test if it runs on AVX512
Yes, on Skylake it runs fine:
Model name:          Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz

4) Conclusion
The precompiled binary probably was compiled on AVX512-capable CPU and
the "CMakeLists.txt" has compiler option "-march=native".
That causes "invalid opcode" on non-AVX512 CPUs.

@haroldb: Let me know if you confirm this analysis?
Also note Ivy Bridge (e.g. E5-2697v2) can only do AVX (not even AVX2),
so that should be taken into account if you decide to also support older CPUs
with the precompiled binary.

Error during installation

Hello!
I tried install Bladebit on r6g.metal and r6g.16xlarge instance (ARM), but I can't compile it. I try Ubuntu 20LTS, RedHat 8, Amazon-linux, but every time I have the next error:

make clean && make -j$(nproc --all) CONFIG=release.arm
....
....
src/util/Log.cpp
In function ‘memcpy’,
inlined from ‘compress_parents_parallel’ at src/b3/blake3.c:242:5,
inlined from ‘compress_subtree_to_parent_node’ at src/b3/blake3.c:355:9,
inlined from ‘blake3_hasher_update.part.0’ at src/b3/blake3.c:534:7:
/usr/include/aarch64-linux-gnu/bits/string_fortified.h:34:10: warning: ‘__builtin_memcpy’ writing 32 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
34 | return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
| ^

cmake --version
cmake version 3.16.3

gcc --version
gcc (Ubuntu 10.3.0-1ubuntu1~20.04) 10.3.0

Previously I tried gcc 9.

Thanks!

Pool plots invalid?

Just wondering if anyone had luck with pool plots.
I've plotted couple dozens but the farmer rejects every single proof-of-space from those plots. Keep getting errors like that:

2021-07-15T15:20:35.154 farmer farmer_server              : DEBUG    <- new_proof_of_space from peer <harvester-id> <harvester ip>
2021-07-15T15:20:35.155 farmer farmer_server              : DEBUG    <- farming_info from peer <harvester-id> <harvester ip>
2021-07-15T15:20:35.155 farmer chia.types.blockchain_format.proof_of_space: ERROR    New challenge is not challenge
2021-07-15T15:20:35.155 farmer chia.farmer.farmer         : ERROR    Invalid proof of space {'challenge': '0x6a0acd1b438102dd8baede36df56bc7ec5177bf1b22fac97b97c94bb6e406b73',
 'plot_public_key': '0x<plot key>',
 'pool_contract_puzzle_hash': '0x<correct puzzle hash>',
 'pool_public_key': None,
 'proof': '0x<long-long-proof>',
 'size': 32}

I've double- and triple-checked the arguments (i.e. farmer key) and they are definitely correct.
I've done chia plots check with the keys imported and the test passed, no "missing key" warnings, proofs percentage is ok.
I've tried to downgrade harvester from 1.2.2 to 1.2.1 - no luck either.

So I want to know if anyone get accepted partials, or maybe the same errors as I have.

Other K-sizes ?

it seems there may be a demand to have a full ram plotter for chives coin ( they run k29-k31 ) there is funds available for projects it would seem that it would be great if k29 was possible with something like this as it would make ram plotting possible for everyone even with 64gb of ram the devs would be open to talking or i would be happy to deal with it

Is 416GiB really enough?

image
Why does Swp peak at 100GiB?
Before running the program, my memory usage was less than 1GiB
How much more memory do I need to use it? (32G * 14 or 32 * 16 or ... )

bladebit-v1.2.3-centos-x86-64.tar.gz reports wrong --version "1.2.0"

Hi,

  1. Problem:
    The precompiled asset "bladebit-v1.2.3-centos-x86-64.tar.gz" reports the wrong version:

user@x ~]$ tar tvfz bladebit-v1.2.3-centos-x86-64.tar.gz
-rwxr-xr-x root/root 3652112 2021-11-11 02:10 bladebit

[user@x ~]$ tar xvfz bladebit-v1.2.3-centos-x86-64.tar.gz
bladebit

[user@x ~]$ ./bladebit --version
1.2.0

-> Should be: 1.2.3

  1. Additional Info:
    The ubuntu asset shows the correct version:
    [user@x ~]$ tar tvfz bladebit-v1.2.3-ubuntu-x86-64.tar.gz
    -rwxr-xr-x runner/docker 4568040 2021-11-11 02:10 bladebit

[user@x ~]$ tar xvfz bladebit-v1.2.3-ubuntu-x86-64.tar.gz
bladebit

[user@x ~]$ ./bladebit --version
1.2.3

-> works as expected

  1. Conclusion: this problem only affects the centos build, but not the ubuntu build

Fatal Error: Failed to parse farmer public key

just compiled latest mast without error and set about running the same as before but for this error:
Fatal Error:
Failed to parse farmer public key

Running with -c and -f as before.
Has the format changed for the key? I am taking straight from chia keys show

Bladebit runs 7% slower on Fedora-35 and Ubuntu-21.10 compared to RHEL-8.4

1) Problem
Bladebit runs 7% slower on Fedora-35 and Ubuntu-21.10 compared to RHEL-8.4

2) Test description
I installed these 3 distributions on the SAME machine and run 5 plots. 
And I also used the same bladebit executable on all three (mounted from 2nd drive).
These are results:

2a) RHEL-8.4, Kernel 4.18.0-305.25.1.el8_4.x86_64
124044.12443.out:Finished plotting in 350.49 seconds (5.84 minutes).
124044.12443.out:Finished plotting in 344.27 seconds (5.74 minutes).
124044.12443.out:Finished plotting in 343.97 seconds (5.73 minutes).
124044.12443.out:Finished plotting in 345.64 seconds (5.76 minutes).
124044.12443.out:Finished plotting in 360.38 seconds (6.01 minutes).

2b) Fedora-35-server, Kernel 5.14.10-300.fc35.x86_64
2385.29416.out:Finished plotting in 384.14 seconds (6.40 minutes).
2385.29416.out:Finished plotting in 370.80 seconds (6.18 minutes).
2385.29416.out:Finished plotting in 370.82 seconds (6.18 minutes).
2385.29416.out:Finished plotting in 370.98 seconds (6.18 minutes).
2385.29416.out:Finished plotting in 385.65 seconds (6.43 minutes).

2c) Ubuntu-21.10-server, Kernel 5.13.0-21-generic
3603.14006.out:Finished plotting in 382.11 seconds (6.37 minutes).
3603.14006.out:Finished plotting in 367.04 seconds (6.12 minutes).
3603.14006.out:Finished plotting in 366.88 seconds (6.11 minutes).
3603.14006.out:Finished plotting in 367.07 seconds (6.12 minutes).
3603.14006.out:Finished plotting in 382.60 seconds (6.38 minutes).

3) Discussion of results:
- Fedora-35 and Ubuntu-21.10 have comparable performance, about 367-370 seconds
  (Looking into details I would say U21.20 is 3 seconds faster than F35, but that is not topic here).
- RHEL-8.4 runs in ~344 seconds, that is ~25 seconds faster (=7%) 

A performance loss of 7% is HUGE and I did not expect this as bladebit
should not put stress on the kernel.

That might explain conflicting benchmark results when comparing
same/different hardware/CPU configs. Until now it was assumed
the Linux distribution has only minor influence. But this proves
choosing a Linux distribution has a major influence on bladebit performance


4) Going further

I would be interested if this is also seen/confirmed by other bladebit users ?

What could be causing this performance regression?

I wish I can provide a list of final plot paths

Hello, I wished I could provide a list of final plot paths that are used by the plotter (maybe round robin) when -n greater 1 to store the final plot file. On my system the plotter finishes a plot every 5-7 minutes. Storing one K32 onto HDD takes longer than 5-7 minutes, which means the second plot created by bladebit is finished before the previous was stored to HDD. The plotter will now attempt to save the second file onto the HDD also, which makes things even slower.

If I can pass a list of final plots path, and the plotter uses a different one for new plot, the issue goes away. It also mitigates the need of buffer to store all newly created plots, from which then some kind of script is moving the plots from buffer to HDDs.

Add ".tmp" to plot file name until after final write to disk

I noticed that a 0 byte file is created at the beginning of the process and that is the final plot file name. It would be helpful if there was a way to differentiate between final/completed plots, and ones that were still in progress so that I can run rsync to migrate the finished plots.

Adding an extension like ".tmp" at the beginning of hte process and then removing it after the plot file is actually done would help this automated tiered storage move process.

��j (invalid encoding) for plot file name and destination path not respected

Unsure what or why this has started happening as I have changed nothing on my system. Also unsure why these problems appear to be interlinked.

bladebit dumps the plot it's creating into the same directory where bladebit resides, with "��j� (invalid encoding)" as the file name.
image

bladebit confirmed the output path when it started.
image

Happy to provide screenshots, system specs, etc.
OS: RHEL 8
Proc: 2x Epyc 7451 24c/48t (48c/96t total)
RAM: 704gb 2133 RDIMM
Destination drives are 4x SAS 900GB drives in Raid0.

K33 RAM only plotting? Feasible?

Is K33 possible with RAM only? Would it require double the RAM? or would there be other challenges?
A few K33s per disk would help to better utilise storage, but take to long to plot with standard plotter.

Fails to compile on Arm

I am trying to compile this on an Oracle Cloud Ampere instance and am getting the following error message:-

src/threading/Thread.cpp
src/threading/ThreadPool.cpp
src/Util.cpp
src/util/Log.cpp
In function ‘compress_parents_parallel’,
inlined from ‘compress_subtree_to_parent_node’ at src/b3/blake3.c:355:9,
inlined from ‘blake3_hasher_update.part.0’ at src/b3/blake3.c:534:7:
src/b3/blake3.c:242:5: warning: ‘memcpy’ writing 32 bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
memcpy(&out[parents_array_len * BLAKE3_OUT_LEN],
^
In function ‘compress_subtree_to_parent_node’,
inlined from ‘blake3_hasher_update.part.0’ at src/b3/blake3.c:534:7:
src/b3/blake3.c:356:5: warning: ‘memcpy’ reading between 64 and 96 bytes from a region of size 32 [-Wstringop-overflow=]
memcpy(cv_array, out_array, num_cvs * BLAKE3_OUT_LEN);
^

Flush log output immediately

I am just now getting around to trying to add BladeBit support to plotman. Generally speaking the multiple-process scheduling features of plotman should be much less useful for BladeBit, but it makes it easier for people to experiment with configurations and still handle plotting and archiving from the single tool. Anyways...

When the output of BladeBit is redirected to a file it ends up buffering until the flush at the end (well, I didn't wait that long what with only 64GB of RAM at the moment but...). plotman would like to have regular updates so that it can track the progress of the plot. With the logging functions already being centralized it looks like this could be a straightforward change.

Does this seem like a good change for BladeBit?

Add temp directory for file transfer because of slow hdd write speed

Creating a plot takes 400 seconds on my system. 
Transferring the plot to an HDD also takes around 400 seconds.

Here is where the problem is.
When a new plot starts, during phase 1 table 2, the plotter waits for the old plot to be transferred.
Which increases the time for every subsequent plot by 400 seconds.

First plot finishes in 400 seconds.
Every other plot afterwards takes 800 seconds.

The request. Add an option for a temp directory. 
Instead of writing directly to the final directory, the plot first moves to the temp directory (which is preferably an SSD).
Then move the plot from the temp directory to the final directory.

Error installing on ubantu20.04

make clean && make -j$(nproc --all) #The echo of executing this command is as follows:

ubantu@ubantu-X99:~/bladebit$ make clean && make -j$(nproc --all)
Compiling for linux with g++
src/b3/blake3_avx2_x86-64_unix.S
src/b3/blake3_avx512_x86-64_unix.S
src/b3/blake3_dispatch.c
src/b3/blake3_portable.c
src/b3/blake3_sse41_x86-64_unix.S
src/b3/blake3.c
src/bech32/segwit_addr.c
src/fse/debug.c
src/fse/entropy_common.c
src/fse/fse_compress.c
src/fse/fse_decompress.c
src/fse/hist.c
src/io/FileStream.cpp
src/main.cpp
src/memplot/DbgHelper.cpp
src/memplot/MemPhase1.cpp
src/memplot/MemPhase2.cpp
src/memplot/MemPhase3.cpp
src/memplot/MemPhase4.cpp
src/memplot/MemPlotter.cpp
src/pch.cpp
src/platform/linux/SysHost_Linux.cpp
src/platform/unix/FileStream_Unix.cpp
src/PlotContext.cpp
src/PlotWriter.cpp
src/pos/chacha8.cpp
src/SysHost.cpp
src/threading/Semaphore.cpp
src/threading/Thread.cpp
src/threading/ThreadPool.cpp
src/Util.cpp
src/util/Log.cpp
src/platform/linux/SysHost_Linux.cpp:9:10: fatal error: numa.h: There is no file or directory
9 | #include <numa.h>
| ^~~~~~~~
compilation terminated.
make: *** [Makefile:190:.obj/platform/linux/SysHost_Linux.o] error 1
make: *** Waiting for unfinished tasks....

ERROR F ailed to open file /xxxxx.plot,Traceback (most recent call last): File “/home/chia/chia-blockchain/chia/plotting/manager.py”, line 290, in process_file prover = DiskProver(str(file_path)) ValueError: Invalid file /home/chia/plot/disk5/xxxxxx.plot

Dear guys, i used the bladebit chia plot tools from Step 29,i have got about 500 plots ,but when i start the harvester,i got the error log as below

2021-10-05T05:47:35.783 harvester chia.plotting.manager : ERROR F
ailed to open file /home/chia/plot/disk5/plot-k32-2021-10-05-05-31-b
49a3bb12074d8ebfd65a7ea3a5e46e81aeb4e18fa3f1b1511d1c7463cf60
605.plot. Invalid file /home/chia/plot/disk5/plot-k32-2021-10-05-05-31
-b49a3bb12074d8ebfd65a7ea3a5e46e81aeb4e18fa3f1b1511d1c7463cf
60605.plot Traceback (most recent call last):
File “/home/chia/chia-blockchain/chia/plotting/manager.py”, line 290,
in process_file
prover = DiskProver(str(file_path))
ValueError: Invalid file /home/chia/plot/disk5/plot-k32-2021-10-05-05-
31-b49a3bb12074d8ebfd65a7ea3a5e46e81aeb4e18fa3f1b1511d1c7463
cf60605.plot

below is the scrip i used to plot

./bladebit -p ${pool_key} -f ${farmer_key} -t 64 -n $plot_count_1 /mnt/hdd1/ >> /mnt/chialogs/chia_plot_1.log &

I am sure the pool_key and farmer_key is right.

Thanks,if you have any idea,pls discuss with me,Thank you again!

Use 32c64t (2.5GHz) and 36c72t (3.2GHz) the same speed

Question one:
e2683v4 x2(32c64t,2500Mhz), 16x32g ddr4 2133, total 11-12min
e2696v3 x2(36c72t,3200Mhz(I use the e5 bug)),16x32g ddr4 2133, also total 11-12min

Question two:
And I find when use 16x32g,the memry read and write have more then 100GB/s, when I use 14x32g,the memery read and write only have 50GB/s, bug the total time is the same 11-12min.....

Use same filename format for plots

I just did a quick run and it seems like the file name doesn't match chia's standard plot naming convention. Is it possible to match it? It would really help with some of the infra folks are building.

NUMA.h missing!?

Hi,
I got some error message as following :
===========================
Compiling for linux with g++
src/algorithm/YSort.cpp
src/b3/blake3_avx2_x86-64_unix.S
src/b3/blake3_avx512_x86-64_unix.S
src/b3/blake3_dispatch.c
src/b3/blake3_portable.c
src/b3/blake3_sse41_x86-64_unix.S
src/b3/blake3.c
src/bech32/segwit_addr.c
src/fse/debug.c
src/fse/entropy_common.c
src/fse/fse_compress.c
src/fse/fse_decompress.c
src/fse/hist.c
src/io/FileStream.cpp
src/main.cpp
src/memplot/DbgHelper.cpp
src/memplot/MemPhase1.cpp
src/memplot/MemPhase2.cpp
src/memplot/MemPhase3.cpp
src/memplot/MemPhase4.cpp
src/memplot/MemPlotter.cpp
src/pch.cpp
src/platform/linux/SysHost_Linux.cpp
src/platform/linux/SysHost_Linux.cpp:9:10: fatal error: numa.h: No such file or directory
9 | #include <numa.h>
| ^~~~~~~~
compilation terminated.
make: *** [Makefile:190: .obj/platform/linux/SysHost_Linux.o] Error 1

Could you give me some hint? because we did not use NUMA in our environment

Thanks and best regards,
James

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.