v0.2.2 - streaming loads, +8-21% on CUDA
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.