Mining/miner/cuda/CLAUDE.md

120 lines
4.6 KiB
Markdown

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
miner-cuda (xmrig-cuda fork) is a CUDA plugin for XMRig cryptocurrency miner, providing NVIDIA GPU acceleration. It compiles to a shared library (`libminer-cuda.so` on Linux, `miner-cuda.dll` on Windows) that XMRig loads at runtime.
## Build Commands
```bash
# Standard build
mkdir build && cd build
cmake ..
cmake --build .
# Build with specific CUDA architectures (semicolon-separated compute capabilities)
cmake -DCUDA_ARCH="60;75;86" ..
# Build with specific algorithm selection
cmake -DWITH_RANDOMX=ON -DWITH_KAWPOW=ON -DWITH_CN_R=ON ..
# Disable Driver API (disables CN-R and KawPow which require NVRTC)
cmake -DWITH_DRIVER_API=OFF ..
# Custom CUDA toolkit path
cmake -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12 ..
# Debug build options
cmake -DCUDA_SHOW_REGISTER=ON .. # Show registers per kernel
cmake -DCUDA_KEEP_FILES=ON .. # Keep intermediate PTX files
cmake -DCUDA_SHOW_CODELINES=ON .. # Enable cuda-gdb/cuda-memcheck line info
# Use clang as CUDA compiler (if available)
cmake -DCUDA_COMPILER=clang ..
```
**Output:** `libminer-cuda.so` (Linux) or `miner-cuda.dll` + NVRTC DLLs (Windows)
## Architecture
### Plugin Interface (`src/xmrig-cuda.h`)
C-linkage API that XMRig calls. Key functions:
- `alloc()`/`release()` - GPU context lifecycle
- `deviceInfo()`/`deviceInit()` - GPU detection and initialization
- `setJob()` - Configure algorithm and job data
- `cnHash()` - CryptoNight family hashing
- `rxPrepare()`/`rxHash()` - RandomX hashing
- `kawPowPrepare_v2()`/`kawPowHash()` - KawPow hashing
### GPU Context (`nvid_ctx`)
Per-GPU state including device properties, memory pointers, and algorithm-specific resources. Defined in `src/cryptonight.h`.
### Algorithm Implementations
| Algorithm | Source Files | CMake Option |
|-----------|--------------|--------------|
| CryptoNight variants | `cuda_core.cu`, `cuda_extra.cu`, `CryptonightR.cu` | `WITH_CN_*` options |
| RandomX | `src/RandomX/` (per-coin subdirs) | `WITH_RANDOMX` |
| KawPow | `src/KawPow/raven/` | `WITH_KAWPOW` |
CN-R and KawPow use CUDA Driver API for runtime kernel compilation via NVRTC.
### CUDA Architecture Support
Automatically configured based on CUDA toolkit version:
- CUDA 8.x: Fermi (20), Kepler (30), Maxwell (50), Pascal (60)
- CUDA 9.x: Kepler+, adds Volta (70)
- CUDA 10.x: Kepler+, adds Turing (75)
- CUDA 11.x: Maxwell+ (Kepler partial), adds Ampere (80, 86, 87)
- CUDA 11.8+: Adds Ada/Hopper (89, 90)
## Key CMake Options
| Option | Default | Description |
|--------|---------|-------------|
| `WITH_DRIVER_API` | ON | Required for CN-R and KawPow (needs NVRTC) |
| `WITH_RANDOMX` | ON* | RandomX algorithms (*OFF if CUDA < 9.0) |
| `WITH_KAWPOW` | ON* | KawPow/RavenCoin (*requires Driver API) |
| `WITH_CN_R` | ON | CryptoNight-R (*requires Driver API) |
| `WITH_CN_LITE` | ON | CryptoNight-Lite family |
| `WITH_CN_HEAVY` | ON | CryptoNight-Heavy family |
| `WITH_CN_PICO` | ON | CryptoNight-Pico algorithm |
| `WITH_CN_FEMTO` | ON | CryptoNight-UPX2 algorithm |
| `WITH_ARGON2` | OFF | Argon2 family (unsupported) |
| `CUDA_ARCH` | auto | GPU compute capabilities to target |
| `XMRIG_LARGEGRID` | ON | Support >128 CUDA blocks |
| `CUDA_COMPILER` | nvcc | CUDA compiler (nvcc or clang) |
## File Layout
```
src/
├── xmrig-cuda.cpp # Main plugin implementation
├── xmrig-cuda.h # C API header (exported functions)
├── cryptonight.h # nvid_ctx struct and GPU context
├── cuda_core.cu # Core CUDA kernels
├── cuda_extra.cu # CUDA utilities and memory management
├── CryptonightR.cu # CN-R with runtime NVRTC compilation
├── cuda_*.hpp # Algorithm-specific kernel headers (aes, blake, jh, keccak, groestl, skein)
├── crypto/ # Algorithm definitions and common code
├── common/ # Shared utilities
├── RandomX/ # RandomX per-coin implementations (monero, wownero, arqma, graft, yada)
├── KawPow/ # KawPow with DAG support (raven)
└── 3rdparty/cub/ # NVIDIA CUB library
cmake/
├── CUDA.cmake # CUDA toolchain, arch detection, source lists
├── CUDA-Version.cmake # CUDA version detection and compiler selection
├── flags.cmake # Compiler flags
├── cpu.cmake # CPU architecture detection
└── os.cmake # OS detection
```
## Platform Notes
- **macOS:** Not supported (NVIDIA dropped CUDA support)
- **Windows:** Build auto-copies `nvrtc64*.dll` dependencies
- **Linux:** Requires CUDA toolkit and nvidia driver