Skip to content
VeriBlock CUDA PoW Miner
Branch: master
Clone or download
Latest commit a6e46b9 Jan 11, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
reference Added vBlake Reference File for OpenCL dev. Sep 16, 2018
.clang-format Adds and applies clang-format configuration. Dec 12, 2018
.gitattributes Preliminary Auto-Reconnect Support Dec 31, 2018
BUILD no abseil for now Jan 4, 2019
BUILD.cuda-local Fixes headers glob. Dec 17, 2018
Constants.h Revert "Preliminary Auto-Reconnect Support" Dec 31, 2018
LICENSE Create LICENSE Oct 10, 2018
Log.h Revert "Preliminary Auto-Reconnect Support" Dec 31, 2018
Miner.cpp linux compatible Jan 4, 2019
Miner.h misc cleanup Jan 4, 2019 Update Nov 6, 2018
UCPClient.h fix for multi packets Jan 10, 2019
WORKSPACE no abseil for now Jan 4, 2019 Updated linux build script: Jan 4, 2019 Preliminary Auto-Reconnect Support Dec 31, 2018
main.cpp linux compatible Jan 4, 2019
picojson.h Initial Commit Sep 15, 2018
run.bat Add template run.bat and files Nov 16, 2018 Update Jan 7, 2019

Latest downloads



NodeCore PoW CUDA Miner



Getting Started

Command Line Arguments

Performance Tuning

Compiling on Linux

Compiling on Windows


This is a CUDA GPU miner which mines the vBlake algorithm (for the VeriBlock blockchain). It connects using the new UCP protocol supported by the built-in pool software of the VeriBlock NodeCore software.

Running this software requires the latest (398.xx or 399.xx on Windows, 396.xx on Linux) NVidia drivers, as well as one or more Maxwell-series, Pascal-series, Volta-series, or Turing-series GPUs.

Currently, each instance of the GPU miner supports mining on a single card.

Getting Started

Download (or Compile Linux or Windows) the latest NodeCore NVidia CUDA Miner, and configure a .bat (Windows) or .sh (Linux) file to start up the miner with appropriate command line arguments that, at a minimum, specify the pool you want to mine to (IP:port), and the username (generally an address) that you would like to mine with.

Command Line Arguments

Required Arguments:
-o <poolAddress>           The pool address to mine to in the format host:port
-u <username>              The username (often an address) used at the pool

Optional Arguments:
-p <password>              The miner/worker password to use on the pool
-d <deviceNum>             The ordinal of the device to use (default 0)
-tpb <threadPerBlock>      The threads per block to use with the Blake kernel (default 1024)
-bs <blockSize>            The blocksize to use with the vBlake kernel (default 512)
-l <enableLogging>         Whether to log to a file (default true)
-v <enableVerboseOutput>   Whether to enable verbose output for debugging (default false)

Example command line:

VeriBlock-NodeCore-PoW-CUDA -u VHT36jJyoVFN7ap5Gu77Crua2BMv5j -o -l false

Performance Tuning

This GPU miner lets the user change their "Threads per Block" and "Block Size" parameters to tune the program's kernel launch dimensions to their specific hardware. The default values are a block-size of 512 and a threads-per-block of 1024. Generally higher values represent more load on the card and higher hashrates up to a saturation point (at which point larger numbers will generally decrease performance). The default parameters are a good starting point for most modern mid- and high-range cards. If you want to change these parameters, they can be specified as startup arguments:

VeriBlock-NodeCore-PoW-CUDA -u VHT36jJyoVFN7ap5Gu77Crua2BMv5j -o -l false -bs 512 -tpb 1024

Selecting Parameters

When you start-up your GPU miner, it will print out the details of all available CUDA devices on your computer:

Device #0 (TITAN V):
    Clock Rate:              1420 MHz
    Is Integrated:           false
    Compute Capability:      7.0
    Kernel Concurrency:      1
    Max Grid Size:           2147483647 x 65535 x 65535
    Max Threads per Block:   1024
    Registers per Block:     65536
    Registers per SM:        65536
    Processor Count:         80
    Shared Memory/Block:     49152
    Shared Memory/Proc:      98304
    Warp Size:               32

For Maxwell, Pascal, Volta, and Turing, the maximum threads-per-block that can be set is 1024 (as you can see in the above device info).

There is no (practical) limit to the block-size, but most cards will not run with a block-size larger than 8192.

Threads-per-block should generally be a multiple of the warp size (shown above). Suggested Values: 256, 512, 1024.

Block-size should generally be a multiple of the processor count a power of 2 (128, 256, 512...), or a multiple of a power of 2 (5 * 128 = 640, 5 * 256 = 1280...).

Supported NVidia GPU Architectures

Use the following table to select the correct version of the miner to use (or compile) based on the card(s) you intend to mine on:

GPU Family Example GPUs Architecture Code Generation Architecture
Maxwell 750 Ti sm_50 compute_50;sm_50
980 Ti
Titan X(M)
sm_52 compute_52;sm_52
Pascal 1050 Ti
1080 Ti
Titan X(p)
sm_60 compute_61;sm_61
Volta V100
Titan V
sm_70 compute_70;sm_70
Turing 2060, 2070, 2080, 2080 Ti sm_80 compute_75;sm_75

Compiling on Linux (Ubuntu 16.04)

1. Install CUDA 9.2 Toolkit

Get the latest version of the CUDA toolkit for your system here: (note: installation examples below are using CUDA 9.2.148; you may need to change them to a different version in the future).

If you already have a version of CUDA installed, ensure that the compiler version is 9.2:

max@ubuntu ~ # nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Tue_Jun_12_23:07:04_CDT_2018
Cuda compilation tools, release 9.2, V9.2.148

If you do not have 9.2, install 9.2 with the instructions below.

sudo apt-get update

# Get the latest .deb installation file; you should update the URL to the latest version of CUDA 9.2

# Install the official NVidia CUDA Repo
sudo dpkg -i cuda-repo-ubuntu1604_9.2.148-1_amd64.deb

# Install Keys Required to Use the Repo
sudo apt-key adv --fetch-keys

# Install CUDA (includes compiler and library metapackages)
sudo apt-get update
sudo apt-get -y install cuda

# Default installation doesn't create soft-links to NVCC
ln -s /usr/local/cuda-9.2/bin/nvcc /usr/bin/nvcc

2. Compile

After cloning the git repository and cd'ing into it, you can (optionally) edit and remove/add gencode architectures and other compilation parameters (like the maximum register count allowed, or specifying an alternate directory for resources for the linker). When you're ready to build:

chmod a+x

If you don't see any errors, then the build was successful and you can run the newly-made nodecore_pow_cuda binary.

3. (Optional) Install

If you want to be able to run the CUDA miner from any directory on your system, copy the compiled binary to your bin folder:

cp nodecore_pow_cuda /usr/bin/

Compiling on Windows (7, 10)

1. Install Visual Studio 2015

See for help with getting 2015 instead of 2017.

2. Install the CUDA 9.2 Toolkit

Downlaod and install the appropriate version of the CUDA 9.2 toolkit from and make sure to allow it to install the Visual Studio 2015 plugin.

3. Create a new CUDA 9.2 Runtime Project

File -> New -> Project... If you do not see the CUDA 9.2 Runtime project template, ensure that you installed the Visual Studio plugin as part of the 9.2 toolkit installer (and re-run the installer if you did not).


4. Import the CUDA miner Source Code

Add all .h and .cu files from this repo to the project:


5. Set the Appropriate Build Architecture

Set the project properties to compile for the correct architecture (see architecture table at top). The CUDA miner uses the lop3 PTX ISA instruction, so it cannot be compiled for any architecture previous to sm_50.



6. Set the Build Configuration to Release x64


7. Compile/Execute

Either click on "Local Windows Debugger" to build+run, or use another Build method and then navigate to the x64 binary output directory in your project structure and run the compiled .exe. If you run it without giving it any command-line arguments (the default if you just run the Local Windows Debugger), you should see:


This indicates that the program was built correctly. Try running it from the command line (or a .bat file) with arguments, or configure your project to pass in command line arguments for the pool IP:port, username, and any other additional optional command line arguments you would like to use.

You can’t perform that action at this time.