Skip to content

v0.2.2 - streaming loads, +8-21% on CUDA

Choose a tag to compare

@blindrun blindrun released this 17 Aug 04:51
· 54 commits to main since this release

CUDA got 8-21% faster from a one-line change: the dataset reads now use
streaming loads (__ldcs) instead of the read-only data cache (__ldg).

The dataset is 7.27GB and any given element is reused about 0.5% of the time, so
caching each one only evicts others and starves the 33 random reads per nonce
that are the whole bottleneck. Telling the hardware the data will not be reused
stops the cache fighting itself.

Measured, interleaved, at the 7.27GB dataset:

GPU before after gain
RTX 4090 217.5 235.5 +8.3%
RTX 4080 120 140 +16.7%
RTX 4070 SUPER 97.9 117.6 +20%
RTX 4060 Ti 63.5 76.9 +21%

It helps more on smaller cards, where the cache is smaller relative to the
dataset. The 4090 now matches the fastest closed-source miner we can measure
like-for-like (SRBMiner ~235 at the same dataset size), with no dev fee.

Correctness is unchanged - a cache hint does not change the value loaded, and
make test still reproduces mainnet block 500012 through search()/verify() and
byte-for-byte on the Vulkan path. CUDA only; Vulkan (AMD, RTX 50-series) is
unchanged because GLSL has no clean non-temporal load qualifier. No dev fee.