Add AMD OpenCL kernel, runtime-loaded CUDA, mixed backend, portability
AMD GPU backend: - Add the GCN-tuned equihash192_7.cl kernel (clearCounter/blake/round1..7/ combine pipeline) and its host driver src/gpu_amd.rs. GpuSolver now dispatches AMD-vendor OpenCL devices to it and other devices to the existing kernel (force with ZCL_OPENCL_KERNEL=amd|legacy). Validated on an RX 9060 XT: GPU solutions match the CPU reference 1/1. - Expose BatchHasher::midstate() for the kernel's ulong8 hashState arg. Runtime-loaded GPU drivers (minimum host deps): - dlopen libcuda / libnvidia-ml via libloading instead of linking them (src/dylib.rs macro; cuda.rs, nvml.rs, gpu_probe.rs). The binary now builds and starts on hosts without an NVIDIA driver and reports no CUDA devices gracefully; remove build.rs (its only job was linking those libs). - Add Dockerfile.portable + build-portable.sh: build against Debian bullseye's glibc 2.31 for a binary that runs on older distros and drives both AMD (OpenCL) and NVIDIA (CUDA) cards. Document the build matrix in the README. Mixed backend (default): - Add --backend mixed (now the default): each card on its native backend (NVIDIA->CUDA, AMD/Intel->OpenCL), deduped so no card is mined twice. --devices indexes the unified list shown by --list-devices. Misc: - Stale-work timeout (--job-timeout) default 300s -> 600s (10 minutes). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
# Portable jackpotminer build.
|
||||
#
|
||||
# Links against Debian bullseye's glibc 2.31 (released 2020), so the resulting
|
||||
# binary runs on essentially any Linux from the last several years instead of
|
||||
# requiring the build host's (much newer) glibc. This is the real fix for the
|
||||
# "version `GLIBC_2.39' not found" class of errors — static linking can't solve
|
||||
# it for a GPU build, because the GPU driver libraries are glibc-only and load
|
||||
# at runtime.
|
||||
#
|
||||
# The CUDA driver and NVML are dlopen'd at runtime (see src/dylib.rs), so this
|
||||
# build needs NO NVIDIA toolkit — only the OpenCL ICD loader (to link libOpenCL).
|
||||
# The result is one binary that drives AMD cards (OpenCL) and NVIDIA cards (CUDA,
|
||||
# loaded if libcuda.so.1 is present at runtime).
|
||||
#
|
||||
# Build: DOCKER_BUILDKIT=1 docker build -f Dockerfile.portable \
|
||||
# --output type=local,dest=dist .
|
||||
# or just: ./build-portable.sh
|
||||
# Output: dist/jackpotminer
|
||||
|
||||
FROM debian:bullseye-slim AS build
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
# gcc/g++ for the linker; ocl-icd-opencl-dev provides libOpenCL.so for linking
|
||||
# (the runtime host supplies its own libOpenCL.so.1 via its GPU driver).
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates curl gcc g++ make pkg-config ocl-icd-opencl-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Minimal stable Rust toolchain.
|
||||
RUN curl -fsSL https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable
|
||||
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||
|
||||
WORKDIR /src
|
||||
COPY . .
|
||||
# Miner only (no GUI config tool, to avoid pulling X11/Wayland/GL into the
|
||||
# build): AMD OpenCL + dlopen'd CUDA. `--locked` keeps it reproducible.
|
||||
RUN cargo build --release --locked --no-default-features --features gpu,cuda \
|
||||
&& strip target/release/jackpotminer
|
||||
|
||||
# Export just the binary to the build output directory.
|
||||
FROM scratch AS export
|
||||
COPY --from=build /src/target/release/jackpotminer /jackpotminer
|
||||
Reference in New Issue
Block a user