Skip to content
Open
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
27da694
Bump nightly to 2026-05-03
vedhavyas Jun 30, 2026
95bf7da
vendor abundance ab-proof-of-space (cpu) at fc8da99
vedhavyas Jul 7, 2026
0075497
vendor abundance ab-proof-of-space-gpu (gpu) at fc8da99
vedhavyas Jul 7, 2026
8dd51f7
bake little-endian s-bucket binning into vendored proof of space
vedhavyas Jul 7, 2026
9a880fe
add abundance-backed proof of space
vedhavyas Jul 7, 2026
a730328
add farm cutover point with in-place v0 upgrade
vedhavyas Jul 7, 2026
e23bb22
dispatch proof-of-space per sector by history size
vedhavyas Jul 7, 2026
df1e7fc
add tests and benches for the abundance proof of space
vedhavyas Jul 7, 2026
a2310f6
add wgpu GPU plotter backed by abundance proof of space
vedhavyas Jul 7, 2026
85339cb
add wgpu byte-identity test against CPU ChiaV2Table
vedhavyas Jul 7, 2026
102dad7
remove CUDA/ROCm + sppark; make wgpu the default GPU plotter
vedhavyas Jul 7, 2026
b03f9b1
add --cpu-only flag to skip GPU plotting
vedhavyas Jul 7, 2026
9193f54
prioritize discrete over integrated GPUs for wgpu plotting
vedhavyas Jul 9, 2026
a81d41e
add list-gpus command to enumerate wgpu plotting devices
vedhavyas Jul 12, 2026
c851252
skip Metal GPUs in wgpu plotter by default, opt in with --enable-metal
vedhavyas Jul 14, 2026
3021641
add --wgpu-record-encoding-concurrency to tune per-GPU encode concurr…
vedhavyas Jul 15, 2026
b96b147
rename user-facing wgpu CLI flags to gpu
vedhavyas Jul 23, 2026
90cbd05
Merge branch 'main' into feat/wgpu-plotter-gpu-clean
vedhavyas Jul 28, 2026
5d63a8c
version cluster plotter subjects to prevent old and new plotter overlap
vedhavyas Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 74 additions & 80 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ jobs:
name: cargo-clippy (${{ strategy.job-index == 0 && 'Linux x86-64' || (strategy.job-index == 1 && 'Windows x86-64' || 'macOS arm64') }})
strategy:
matrix:
os: ["ubuntu-22.04", "windows-2022", "macos-14"]
os: ["ubuntu-22.04", "windows-2022", "macos-26"]

runs-on: ${{ matrix.os }}

steps:
# Enable the sccache runs-on S3 backend for Linux runners, to cache C/C++/CUDA and Rust.
# Enable the sccache runs-on S3 backend for Linux runners, to cache C/C++ and Rust.
# On GitHub-hosted or fork runners, the runs-on action is ignored.
- uses: runs-on/action@d141ef83eb66d096ce8afc767e09115a65c63b60 # v2.1.2
with:
Expand Down Expand Up @@ -101,44 +101,6 @@ jobs:
run: brew install automake
if: runner.os == 'macOS'

# TODO: cache CUDA from Program Files on Windows, because it takes 6+ minutes to install.
- name: CUDA toolchain
uses: Jimver/cuda-toolkit@3d45d157f327c09c04b50ee6ccdea2d9d017ec76 # v0.2.35
with:
cuda: '12.4.1'
method: network
sub-packages: '["nvcc", "cudart"]'
if: runner.os == 'Linux'|| runner.os == 'Windows'

- name: Configure ROCm cache (Windows)
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
id: rocm-cache
with:
path: C:\Program Files\AMD\ROCm
key: ${{ runner.os }}-rocm
if: runner.os == 'Windows' && false

- name: ROCm toolchain
run: |
ROCM_VERSION=6.2.2
sudo mkdir -p --mode=0755 /etc/apt/keyrings
curl -L https://repo.radeon.com/rocm/rocm.gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/$ROCM_VERSION jammy main" | sudo tee /etc/apt/sources.list.d/rocm.list > /dev/null
echo -e "Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600" | sudo tee /etc/apt/preferences.d/rocm-pin-600 > /dev/null
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends rocm-hip-runtime-dev
echo "/opt/rocm/lib" | sudo tee /etc/ld.so.conf.d/rocm.conf > /dev/null
sudo ldconfig
if: runner.os == 'Linux'

- name: ROCm toolchain
run: |
$ErrorActionPreference = "Stop"
Invoke-WebRequest -Uri https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-24.Q3-WinSvr2022-For-HIP.exe -OutFile "${env:RUNNER_TEMP}\HIP-SDK-Installer.exe"
Start-Process "${env:RUNNER_TEMP}\HIP-SDK-Installer.exe" -ArgumentList '-install' -NoNewWindow -Wait
Remove-Item "${env:RUNNER_TEMP}\HIP-SDK-Installer.exe"
if: runner.os == 'Windows' && steps.rocm-cache.outputs.cache-hit != 'true'

- name: Configure source deps cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
Expand Down Expand Up @@ -169,26 +131,6 @@ jobs:
- name: cargo clippy
run: |
cargo -Zgitoxide -Zgit clippy --locked --all-targets --features runtime-benchmarks -- -D warnings
if: runner.os == 'macOS'

- name: cargo clippy
run: |
cargo -Zgitoxide -Zgit clippy --locked --all-targets --features runtime-benchmarks,cuda -- -D warnings
if: runner.os == 'Linux' || runner.os == 'Windows'

- name: cargo clippy (ROCm)
run: |
cargo -Zgitoxide -Zgit clippy --locked --all-targets --features rocm -- -D warnings
if: runner.os == 'Linux'

- name: cargo clippy (ROCm)
env:
# Why `PROGRA~1` instead of `Program Files`? Because Windows!
HIPCC: C:\PROGRA~1\AMD\ROCm\6.1\bin\hipcc.bin.exe
HIP_PLATFORM: amd
run: |
cargo -Zgitoxide -Zgit clippy --locked --all-targets --features rocm -- -D warnings
if: runner.os == 'Windows'

cargo-runtime-build:
name: cargo-runtime-build (Linux x86-64)
Expand Down Expand Up @@ -242,7 +184,7 @@ jobs:
name: cargo-test (${{ strategy.job-index == 0 && 'Linux x86-64' || (strategy.job-index == 1 && 'Windows x86-64' || 'macOS arm64') }})
strategy:
matrix:
os: ["ubuntu-22.04", "windows-2022", "macos-14"]
os: ["ubuntu-22.04", "windows-2022", "macos-26"]
runs-on: ${{ matrix.os }}
# Don't use the full 6 hours if a test hangs
timeout-minutes: 120
Expand Down Expand Up @@ -314,6 +256,77 @@ jobs:
run: echo "RUSTFLAGS=$env:RUSTFLAGS -C debuginfo=0 -C link-arg=/DEBUG:NONE" >> $env:GITHUB_ENV
if: runner.os == 'Windows'

# Software Vulkan (lavapipe) so the wgpu byte-identity test runs on the GPU-less runners;
# macOS uses the runner's native Metal adapter and needs nothing here.
- name: Install Vulkan runtime (Linux)
run: |
sudo apt-get update
sudo apt-get install --no-install-recommends --yes mesa-vulkan-drivers
if: runner.os == 'Linux'

- name: Install Vulkan runtime (Windows)
run: |
& {
# See https://vulkan.lunarg.com/sdk/home for updates
$sdkVersion = "1.4.341.0"
if ("${{ runner.arch }}" -eq "ARM64") {
$arch = "ARM64"
$urlPath = "warm"
$expectedHash = "4a350fbeec743683494f746e9cf7e2052494ca9ae618931afc2abb8985e072b0"
} else {
$arch = "X64"
$urlPath = "windows"
$expectedHash = "20571dcc8292b80a47d68bbbfa4094d87044041f50f4e2e1f326a01e3732b226"
}

$url = "https://sdk.lunarg.com/sdk/download/$sdkVersion/$urlPath/VulkanRT-$arch-$sdkVersion-Components.zip"
Invoke-WebRequest -Uri $url -OutFile VulkanRT.zip

$actualHash = (Get-FileHash VulkanRT.zip -Algorithm SHA256).Hash.ToLower()
if ($actualHash -ne $expectedHash.ToLower()) {
throw "SHA256 mismatch: expected $expectedHash, got $actualHash"
}

7z e VulkanRT.zip -o"${{ runner.temp }}\vulkan" -r "vulkan-1.*"
Remove-Item VulkanRT.zip

$vulkanPath = "${{ runner.temp }}\vulkan"
"$vulkanPath" >> $env:GITHUB_PATH
}

& {
# See https://github.com/mmozeiko/build-mesa/releases for updates
$version = "26.0.5"
if ("${{ runner.arch }}" -eq "ARM64") {
$arch = "arm64"
$archJson = "aarch64"
$expectedHash = "6980c51ce19cff6318d001d05a5fbd9c53cff64d29ea04b5e0285a09b6fe7ae4"
} else {
$arch = "x64"
$archJson = "x86_64"
$expectedHash = "289b283fd13a0029d0226d9695807e62343bb25da2499545bb5f973c97146262"
}

$url = "https://github.com/mmozeiko/build-mesa/releases/download/$version/mesa-lavapipe-$arch-$version.7z"
Invoke-WebRequest -Uri $url -OutFile mesa-lavapipe.7z

$actualHash = (Get-FileHash mesa-lavapipe.7z -Algorithm SHA256).Hash.ToLower()
if ($actualHash -ne $expectedHash.ToLower()) {
throw "SHA256 mismatch: expected $expectedHash, got $actualHash"
}

7z x mesa-lavapipe.7z -o"${{ runner.temp }}\mesa"
Remove-Item mesa-lavapipe.7z

$mesaPath = "${{ runner.temp }}\mesa"
"$mesaPath" >> $env:GITHUB_PATH

$icdPath = "$mesaPath\lvp_icd.$archJson.json"
New-Item -Path "HKLM:\SOFTWARE\Khronos\Vulkan\Drivers" -Force| Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Khronos\Vulkan\Drivers" -Name $icdPath -Value 0 -Type DWord
}
if: runner.os == 'Windows'

- name: cargo nextest run --locked
run: |
cargo -Zgitoxide -Zgit nextest run --locked
Expand Down Expand Up @@ -461,25 +474,6 @@ jobs:
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

- name: CUDA toolchain
uses: Jimver/cuda-toolkit@3d45d157f327c09c04b50ee6ccdea2d9d017ec76 # v0.2.35
with:
cuda: '12.4.1'
method: network
sub-packages: '["nvcc", "cudart"]'

- name: ROCm toolchain
run: |
ROCM_VERSION=6.2.2
sudo mkdir -p --mode=0755 /etc/apt/keyrings
curl -L https://repo.radeon.com/rocm/rocm.gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/rocm.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/$ROCM_VERSION jammy main" | sudo tee /etc/apt/sources.list.d/rocm.list > /dev/null
echo -e "Package: *\nPin: release o=repo.radeon.com\nPin-Priority: 600" | sudo tee /etc/apt/preferences.d/rocm-pin-600 > /dev/null
sudo apt-get update
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends rocm-hip-runtime-dev
echo "/opt/rocm/lib" | sudo tee /etc/ld.so.conf.d/rocm.conf > /dev/null
sudo ldconfig

- name: Install cargo-udeps
uses: taiki-e/install-action@7a79fe8c3a13344501c80d99cae481c1c9085912 # 2.81.10
with:
Expand Down
11 changes: 2 additions & 9 deletions .github/workflows/rustdoc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,9 @@ jobs:
restore-keys: |
${{ runner.os }}-cargo-

- name: CUDA toolchain
uses: Jimver/cuda-toolkit@3d45d157f327c09c04b50ee6ccdea2d9d017ec76 # v0.2.35
with:
cuda: '12.4.1'
method: network
sub-packages: '["nvcc", "cudart"]'

# Build the rust crate docs
# Build the rust crate docs (wgpu GPU plotting is a default feature)
- name: Build Documentation
run: cargo -Zgitoxide -Zgit doc --locked --all --no-deps --lib --features cuda
run: cargo -Zgitoxide -Zgit doc --locked --all --no-deps --lib
env:
RUSTDOCFLAGS: "-D rustdoc::broken-intra-doc-links -D rustdoc::private_intra_doc_links -Z unstable-options --enable-index-page"

Expand Down
52 changes: 1 addition & 51 deletions .github/workflows/snapshot-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -133,12 +133,6 @@ jobs:
# TODO: Pull is a workaround for https://github.com/moby/moby/issues/48197#issuecomment-2472265028
docker pull --platform linux/amd64/v2 $IMAGE
docker run --rm --platform linux/amd64/v2 --entrypoint /bin/cat $IMAGE /$ARTIFACT > $ARTIFACT-ubuntu-x86_64-v2-$SAFE_REF_NAME
if [ "${{ matrix.build.image }}" == "farmer" ]; then
docker run --rm --platform linux/amd64 --entrypoint /bin/cat $IMAGE /$ARTIFACT-rocm > $ARTIFACT-rocm-ubuntu-x86_64-skylake-$SAFE_REF_NAME
# TODO: Pull is a workaround for https://github.com/moby/moby/issues/48197#issuecomment-2472265028
docker pull --platform linux/amd64/v2 $IMAGE
docker run --rm --platform linux/amd64/v2 --entrypoint /bin/cat $IMAGE /$ARTIFACT-rocm > $ARTIFACT-rocm-ubuntu-x86_64-v2-$SAFE_REF_NAME
fi
docker run --rm --platform linux/arm64 --entrypoint /bin/cat $IMAGE /$ARTIFACT > $ARTIFACT-ubuntu-aarch64-$SAFE_REF_NAME
if: matrix.build.upload-executables

Expand All @@ -163,7 +157,7 @@ jobs:
strategy:
matrix:
build:
- os: macos-14
- os: macos-26
target: aarch64-apple-darwin
suffix: macos-aarch64-${{ github.ref_name }}
- os: windows-2022
Expand Down Expand Up @@ -223,30 +217,6 @@ jobs:
run: brew install automake
if: runner.os == 'macOS'

- name: CUDA toolchain
uses: Jimver/cuda-toolkit@3d45d157f327c09c04b50ee6ccdea2d9d017ec76 # v0.2.35
with:
cuda: '12.4.1'
method: network
sub-packages: '["nvcc", "cudart"]'
if: runner.os == 'Windows'

- name: Configure ROCm cache (Windows)
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
id: rocm-cache
with:
path: C:\Program Files\AMD\ROCm
key: ${{ runner.os }}-rocm
if: runner.os == 'Windows'

- name: ROCm toolchain
run: |
$ErrorActionPreference = "Stop"
Invoke-WebRequest -Uri https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-24.Q3-WinSvr2022-For-HIP.exe -OutFile "${env:RUNNER_TEMP}\HIP-SDK-Installer.exe"
Start-Process "${env:RUNNER_TEMP}\HIP-SDK-Installer.exe" -ArgumentList '-install' -NoNewWindow -Wait
Remove-Item "${env:RUNNER_TEMP}\HIP-SDK-Installer.exe"
if: runner.os == 'Windows' && steps.rocm-cache.outputs.cache-hit != 'true'

- name: Configure cache
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
Expand All @@ -260,24 +230,6 @@ jobs:
- name: Build farmer
run: |
cargo -Zgitoxide -Zgit build --locked -Z build-std --target ${{ matrix.build.target }} --profile production --bin subspace-farmer
if: runner.os == 'macOS' || !startsWith(matrix.build.target, 'x86_64')

# ROCm can't be enabled together with CUDA for now
- name: Build farmer (ROCm, Windows)
env:
# Why `PROGRA~1` instead of `Program Files`? Because Windows!
HIPCC: C:\PROGRA~1\AMD\ROCm\6.1\bin\hipcc.bin.exe
HIP_PLATFORM: amd
run: |
cargo -Zgitoxide -Zgit build --locked -Z build-std --target ${{ matrix.build.target }} --profile production --bin subspace-farmer --features rocm
move ${{ env.PRODUCTION_TARGET }}/subspace-farmer.exe ${{ env.PRODUCTION_TARGET }}/subspace-farmer-rocm.exe
if: runner.os == 'Windows' && startsWith(matrix.build.target, 'x86_64')

- name: Build farmer
run: |
cargo -Zgitoxide -Zgit build --locked -Z build-std --target ${{ matrix.build.target }} --profile production --bin subspace-farmer --features cuda
# TODO: We don't configure CUDA for cross-compilation purposes, hence only x86-64 for now
if: runner.os == 'Windows' && startsWith(matrix.build.target, 'x86_64')

- name: Build node
run: |
Expand Down Expand Up @@ -319,7 +271,6 @@ jobs:
- name: Sign Application (Windows)
run: |
AzureSignTool sign --azure-key-vault-url "${{ secrets.AZURE_KEY_VAULT_URI }}" --azure-key-vault-client-id "${{ secrets.AZURE_CLIENT_ID }}" --azure-key-vault-client-secret "${{ secrets.AZURE_CLIENT_SECRET }}" --azure-key-vault-tenant-id "${{ secrets.AZURE_TENANT_ID }}" --azure-key-vault-certificate "${{ secrets.AZURE_CERT_NAME }}" --file-digest sha512 --timestamp-rfc3161 http://timestamp.digicert.com -v "${{ env.PRODUCTION_TARGET }}/subspace-farmer.exe"
AzureSignTool sign --azure-key-vault-url "${{ secrets.AZURE_KEY_VAULT_URI }}" --azure-key-vault-client-id "${{ secrets.AZURE_CLIENT_ID }}" --azure-key-vault-client-secret "${{ secrets.AZURE_CLIENT_SECRET }}" --azure-key-vault-tenant-id "${{ secrets.AZURE_TENANT_ID }}" --azure-key-vault-certificate "${{ secrets.AZURE_CERT_NAME }}" --file-digest sha512 --timestamp-rfc3161 http://timestamp.digicert.com -v "${{ env.PRODUCTION_TARGET }}/subspace-farmer-rocm.exe"
AzureSignTool sign --azure-key-vault-url "${{ secrets.AZURE_KEY_VAULT_URI }}" --azure-key-vault-client-id "${{ secrets.AZURE_CLIENT_ID }}" --azure-key-vault-client-secret "${{ secrets.AZURE_CLIENT_SECRET }}" --azure-key-vault-tenant-id "${{ secrets.AZURE_TENANT_ID }}" --azure-key-vault-certificate "${{ secrets.AZURE_CERT_NAME }}" --file-digest sha512 --timestamp-rfc3161 http://timestamp.digicert.com -v "${{ env.PRODUCTION_TARGET }}/subspace-node.exe"
# Allow code signing to fail on non-release builds and in non-subspace repos (forks)
continue-on-error: ${{ github.repository_owner != 'autonomys' || github.event_name != 'push' || github.ref_type != 'tag' }}
Expand All @@ -342,7 +293,6 @@ jobs:
run: |
mkdir executables
move ${{ env.PRODUCTION_TARGET }}/subspace-farmer.exe executables/subspace-farmer-${{ env.SAFE_SUFFIX }}.exe
move ${{ env.PRODUCTION_TARGET }}/subspace-farmer-rocm.exe executables/subspace-farmer-rocm-${{ env.SAFE_SUFFIX }}.exe
move ${{ env.PRODUCTION_TARGET }}/subspace-node.exe executables/subspace-node-${{ env.SAFE_SUFFIX }}.exe
if: runner.os == 'Windows'

Expand Down
Loading
Loading