120 lines
4.6 KiB
Markdown
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
|