diff --git a/tools/ca3-v4-amend/pc1-ca4-hot-ldcs.ps1 b/tools/ca3-v4-amend/pc1-ca4-hot-ldcs.ps1 index 2e0994f53..e8a889536 100644 --- a/tools/ca3-v4-amend/pc1-ca4-hot-ldcs.ps1 +++ b/tools/ca3-v4-amend/pc1-ca4-hot-ldcs.ps1 @@ -82,7 +82,7 @@ function RunState([string] $state) { "RESULT packs-state $state start $(Stamp) $((& $smi -i $idx --query-gpu=clocks.sm,clocks.applications.graphics,power.draw --format=csv,noheader 2>&1 | Out-String).Trim())" foreach ($pk in $packOrder) { foreach ($variant in $variants) { $d = Join-Path $packs $pk - $cls = ''; $pid = ''; try { $pj = Get-Content -LiteralPath (Join-Path $d 'program.json') -Raw | ConvertFrom-Json; $cls = [string] $pj.load_class; $pid = [string] $pj.program_id } catch { } + $cls = ''; $progId = ''; try { $pj = Get-Content -LiteralPath (Join-Path $d 'program.json') -Raw | ConvertFrom-Json; $cls = [string] $pj.load_class; $progId = [string] $pj.program_id } catch { } $t0 = Get-Date $extra = @(); if ($variant -ne 'base') { $extra = @('--variant', $variant) } $lines = @(& $exe --bench --pack $d --batches 250 --batch-log2 24 --block-warps 1 @extra --device 0 2>&1 | ForEach-Object { "$_" }) @@ -98,7 +98,7 @@ function RunState([string] $state) { $wi = Mean ($w | Where-Object { $_.Count -ge 8 -and $_[6] -match '^\s*[\d.]+\s*$' } | ForEach-Object { $_[6] }); $wa = Mean ($w | Where-Object { $_.Count -ge 8 -and $_[7] -match '^\s*[\d.]+\s*$' } | ForEach-Object { $_[7] }) $eff = if ($watts -and $mhs) { [math]::Round([double]$mhs / $watts, 4) } else { '' } $err = ''; if (-not $res -or $rc -ne 0) { $e = ($lines | Where-Object { $_ -match 'FAIL|error|MISMATCH|compile' } | Select-Object -First 1); $err = if ($e) { ($e -replace '\s+', ' ') } else { "exit $rc, no RESULT line" } } - "RESULT ca4-research pack=$pk dir=$d program_id=$pid class=$cls variant=$variant state=$state mhs=$mhs watts=$watts watts_instant=$wi watts_average=$wa mh_per_w=$eff sm_mhz=$sm mem_mhz=$mem util=$util fingerprint=$fp check=$check exit=$rc wall_s=$([int]($t1 - $t0).TotalSeconds) samples=$($w.Count) error=$err race=[$race]" + "RESULT ca4-research pack=$pk dir=$d program_id=$progId class=$cls variant=$variant state=$state mhs=$mhs watts=$watts watts_instant=$wi watts_average=$wa mh_per_w=$eff sm_mhz=$sm mem_mhz=$mem util=$util fingerprint=$fp check=$check exit=$rc wall_s=$([int]($t1 - $t0).TotalSeconds) samples=$($w.Count) error=$err race=[$race]" Start-Sleep -Seconds 3 } } "RESULT packs-state $state end $(Stamp)" diff --git a/tools/ca3-v4-amend/pc1-ca4-microbench.ps1 b/tools/ca3-v4-amend/pc1-ca4-microbench.ps1 index d59d5519b..70bd7a52f 100644 --- a/tools/ca3-v4-amend/pc1-ca4-microbench.ps1 +++ b/tools/ca3-v4-amend/pc1-ca4-microbench.ps1 @@ -19,6 +19,14 @@ $jobs = Split-Path $jobDir $exe = Join-Path (Join-Path $jobs 'fetch-ca4-microbench-exe-20261007') 'igneum-worker-cuda-ca4mb.exe' if (-not (Test-Path $exe)) { "RESULT error exe missing at $exe (the fetch job fetch-ca4-microbench-exe-20261007 runs first)"; Summary 'failed' @{ error = 'exe missing' }; exit 2 } "RESULT start $(Stamp) job=$jobName exe=$exe sha256=$((Get-FileHash -Algorithm SHA256 $exe).Hash.ToLower()) label=ca4-research" +# the loader (the research lane, 8 October 2026, 04:1x UTC): an exit 2 after one line is a loader line; NVRTC's two DLLs must sit beside the +# exe, and this exe was fetched into its own job folder; the installed worker's copies are copied beside it (the install folder is read, never +# written) and the exe runs from its own folder +$inst = @("$env:LOCALAPPDATA\Programs\Igneum Miner", "$env:ProgramFiles\Igneum Miner") | Where-Object { Test-Path (Join-Path $_ 'igneum-worker-cuda.exe') } | Select-Object -First 1 +$exeDir = Split-Path $exe +if ($inst) { foreach ($dll in (Get-ChildItem -Path $inst -Filter 'nvrtc*.dll' -ErrorAction SilentlyContinue)) { if (-not (Test-Path (Join-Path $exeDir $dll.Name))) { Copy-Item -LiteralPath $dll.FullName -Destination $exeDir; "RESULT dll copied beside the exe: $($dll.Name) sha256 $((Get-FileHash -Algorithm SHA256 $dll.FullName).Hash.ToLower())" } } } +"RESULT dlls beside the exe: $((Get-ChildItem -Path $exeDir -Filter '*.dll' -ErrorAction SilentlyContinue | ForEach-Object { $_.Name }) -join ', ')" +Set-Location $exeDir $smi = (Get-Command nvidia-smi -ErrorAction SilentlyContinue).Source if (-not $smi) { foreach ($p in @((Join-Path $env:ProgramFiles 'NVIDIA Corporation\NVSMI\nvidia-smi.exe'), (Join-Path $env:SystemRoot 'System32\nvidia-smi.exe'))) { if (Test-Path $p) { $smi = $p; break } } } $row = @(& $smi --query-gpu=index,name,uuid,pci.bus_id --format=csv,noheader 2>&1 | ForEach-Object { "$_" }) | Where-Object { $_ -match 'RTX 5090' } | Select-Object -First 1 @@ -73,9 +81,17 @@ function ParseUtc([string] $s) { try { return [datetime]::Parse($s, [cultureinfo function RunState([string] $state) { $env:CUDA_VISIBLE_DEVICES = $uuid "RESULT microbench-state $state start $(Stamp) $((& $smi -i $idx --query-gpu=clocks.sm,clocks.applications.graphics,power.draw --format=csv,noheader 2>&1 | Out-String).Trim())" - $lines = @(& $exe --microbench --mb-seconds 60 --device 0 2>&1 | ForEach-Object { "$_" }) + # the research lane's exact command (8 October 2026, 03:54Z: with `--device 0` added the exe exited 2 after one line at both states and the + # script kept only probe-matching lines, so the refusal text was lost); CUDA_VISIBLE_DEVICES selects the card; every line is echoed when the + # exe exits non-zero or prints fewer than five lines + # the argument parser's pack check runs before the microbench branch on this build (04:25Z: "--pack is required"); the probes read + # no pack, so the sub-version 3 kit's class v4 pack satisfies the check and changes nothing (the research lane's word, 04:4x UTC) + $packArg = Join-Path (Join-Path (Join-Path $jobs 'fetch-ca3-v4-sub3-pc1-20261007') 'packs') 'v4-devnet-epoch0' + if (-not (Test-Path $packArg)) { "RESULT error the pack for the argument check is missing at $packArg"; Summary 'failed' @{ error = 'pack argument missing' }; exit 2 } + $lines = @(& $exe --microbench --mb-seconds 60 --pack $packArg 2>&1 | ForEach-Object { "$_" }) $rc = $LASTEXITCODE - foreach ($l in $lines) { if ($l -match '^RESULT microbench') { "$l state=$state" } elseif ($l -match 'error|fail|compile|skipped') { "RESULT microbench-note state=$state $l" } } + if ($rc -ne 0 -or $lines.Count -lt 5) { foreach ($l in $lines) { "RESULT microbench-raw state=$state exit=$rc $l" } } + foreach ($l in $lines) { if ($l -match '^RESULT microbench') { "$l state=$state" } elseif ($l -match 'error|fail|compile|skipped|usage') { "RESULT microbench-note state=$state $l" } } foreach ($l in ($lines | Where-Object { $_ -match '^RESULT microbench probe=' })) { $name = ''; $g = ''; $ck = ''; $st = ''; $su = ''; $eu = '' if ($l -match 'probe=(\S+)') { $name = $Matches[1] }; if ($l -match 'G_ops_s=(\S+)') { $g = $Matches[1] }; if ($l -match 'checksum=(\S+)') { $ck = $Matches[1] }; if ($l -match 'status=(\S+)') { $st = $Matches[1] } diff --git a/tools/ca3-v4-amend/pc1-ca4-packs.ps1 b/tools/ca3-v4-amend/pc1-ca4-packs.ps1 index 4f9da75bf..776e251fc 100644 --- a/tools/ca3-v4-amend/pc1-ca4-packs.ps1 +++ b/tools/ca3-v4-amend/pc1-ca4-packs.ps1 @@ -86,7 +86,7 @@ function RunState([string] $state) { "RESULT packs-state $state start $(Stamp) $((& $smi -i $idx --query-gpu=clocks.sm,clocks.applications.graphics,power.draw --format=csv,noheader 2>&1 | Out-String).Trim())" foreach ($pk in $packOrder) { $d = Join-Path $packs $pk - $cls = ''; $pid = ''; try { $pj = Get-Content -LiteralPath (Join-Path $d 'program.json') -Raw | ConvertFrom-Json; $cls = [string] $pj.load_class; $pid = [string] $pj.program_id } catch { } + $cls = ''; $progId = ''; try { $pj = Get-Content -LiteralPath (Join-Path $d 'program.json') -Raw | ConvertFrom-Json; $cls = [string] $pj.load_class; $progId = [string] $pj.program_id } catch { } $t0 = Get-Date $lines = @(& $exe --bench --pack $d --batches 250 --batch-log2 24 --block-warps 1 --device 0 2>&1 | ForEach-Object { "$_" }) $rc = $LASTEXITCODE @@ -101,7 +101,7 @@ function RunState([string] $state) { $eff = if ($watts -and $mhs) { [math]::Round([double]$mhs / $watts, 4) } else { '' } $err = ''; if (-not $res -or $rc -ne 0) { $e = ($lines | Where-Object { $_ -match 'FAIL|error|MISMATCH|compile' } | Select-Object -First 1); $err = if ($e) { ($e -replace '\s+', ' ') } else { "exit $rc, no RESULT line" } } $tag = if ($pk -like 'mx8_shl256x27*') { ' construction=unsound-energy-reading-only' } else { '' } - "RESULT ca4-research pack=$pk dir=$d program_id=$pid class=$cls$tag state=$state mhs=$mhs watts=$watts watts_instant=$wi watts_average=$wa mh_per_w=$eff sm_mhz=$sm mem_mhz=$mem util=$util fingerprint=$fp check=$check exit=$rc wall_s=$([int]($t1 - $t0).TotalSeconds) samples=$($w.Count) error=$err" + "RESULT ca4-research pack=$pk dir=$d program_id=$progId class=$cls$tag state=$state mhs=$mhs watts=$watts watts_instant=$wi watts_average=$wa mh_per_w=$eff sm_mhz=$sm mem_mhz=$mem util=$util fingerprint=$fp check=$check exit=$rc wall_s=$([int]($t1 - $t0).TotalSeconds) samples=$($w.Count) error=$err" Start-Sleep -Seconds 3 } "RESULT packs-state $state end $(Stamp)" diff --git a/tools/ca3-v4-amend/pc1-ember-card.ps1 b/tools/ca3-v4-amend/pc1-ember-card.ps1 index 8c0195e19..c1cf4e80a 100644 --- a/tools/ca3-v4-amend/pc1-ember-card.ps1 +++ b/tools/ca3-v4-amend/pc1-ember-card.ps1 @@ -30,6 +30,8 @@ Write-Output ('RESULT TUNE job_id=' + $jobId + ' card_match=' + $want) $cards = @($s.mining.cards | Where-Object { $_.enabled -and ($_.vendor -eq 'nvidia' -or $_.vendor -eq 'amd') -and $_.name -notmatch 'Radeon\(TM\) Graphics' -and $_.name -match $want }) if ($cards.Count -eq 0) { Write-Output ('RESULT TUNE error=no enabled card matching ' + $want + ' in api/state (names: ' + (($s.mining.cards | ForEach-Object { $_.name }) -join ', ') + ')'); exit 1 } Write-Output ('RESULT TUNE cards ' + (($cards | ForEach-Object { $_.key + ' (' + $_.name + ', ' + $_.vendor + ', sweep_state ' + $_.sweep_state + ', line "' + $_.tune_line + '")' }) -join ' | ')) +# every card's stored curve from the last tune (the 06:0x UTC 5080 run's rows were lost to a cast fault in this script's curve line; the app keeps them) +foreach ($c0 in $s.mining.cards) { if ($c0.tune_curve -and $c0.tune_curve.Count -gt 0) { Write-Output ('RESULT TUNE stored-curve key=' + $c0.key + ' source=' + $c0.tune_source + ' line="' + $c0.tune_line + '" rows=' + (($c0.tune_curve | ForEach-Object { "$($_.clock_mhz)MHz/$($_.mem_mhz)mem/$($_.power_pct)pct/$($_.limit_w)W/$($_.watts)W/$($_.mhs)MHs/$($_.eff)MHW/$($_.mark)" }) -join ' | ')) } } foreach ($c in $cards) { Write-Output ('RESULT TUNE before key=' + $c.key + ' power_w=' + $c.power_w + ' power_pct=' + $c.power_pct + ' clock_cap=' + $c.clock_cap_mhz + ' mhs=' + $c.mhs + ' line=' + $c.tune_line) } # the climb on (NVIDIA cards; an AMD card has no clock knob and runs its ladder regardless) if (-not (Post 'api/tune/goal' '{"goal":"balanced","climb":true}')) { Write-Output 'RESULT TUNE error=tune_goal_refused'; exit 1 } @@ -62,7 +64,7 @@ foreach ($c in $order) { } } $st = State - if ($st) { $cc = $st.mining.cards | Where-Object { $_.key -eq $c.key } | Select-Object -First 1; if ($cc) { Write-Output ('RESULT TUNE after key=' + $c.key + ' power_w=' + $cc.power_w + ' power_pct=' + $cc.power_pct + ' clock_cap=' + $cc.clock_cap_mhz + ' line=' + $cc.tune_line + ' source=' + $cc.tune_source + ' note=' + $cc.sweep_note); if ($cc.tune_curve) { Write-Output ('RESULT TUNE curve key=' + $c.key + ' ' + (($cc.tune_curve | ForEach-Object { ($_.clock_mhz) + 'MHz/' + ($_.mem_mhz) + 'mem/' + ($_.power_pct) + '%:' + $_.mhs + 'MH/s ' + $_.watts + 'W ' + $_.eff + ' ' + $_.mark }) -join ' | ')) } } } + if ($st) { $cc = $st.mining.cards | Where-Object { $_.key -eq $c.key } | Select-Object -First 1; if ($cc) { Write-Output ('RESULT TUNE after key=' + $c.key + ' power_w=' + $cc.power_w + ' power_pct=' + $cc.power_pct + ' clock_cap=' + $cc.clock_cap_mhz + ' line=' + $cc.tune_line + ' source=' + $cc.tune_source + ' note=' + $cc.sweep_note); if ($cc.tune_curve) { Write-Output ('RESULT TUNE curve key=' + $c.key + ' ' + (($cc.tune_curve | ForEach-Object { "$($_.clock_mhz)MHz/$($_.mem_mhz)mem/$($_.power_pct)pct/$($_.limit_w)W/$($_.watts)W/$($_.mhs)MHs/$($_.eff)MHW/$($_.mark)" }) -join ' | ')) } } } } # the climb switch back to what it was Post 'api/tune/goal' ('{"climb":' + $(if ($climbBefore) { 'true' } else { 'false' }) + '}') | Out-Null diff --git a/tools/ca3-v4-amend/pc1-publish-20261007.sh b/tools/ca3-v4-amend/pc1-publish-20261007.sh index 65ec79256..8683b7e2c 100755 --- a/tools/ca3-v4-amend/pc1-publish-20261007.sh +++ b/tools/ca3-v4-amend/pc1-publish-20261007.sh @@ -26,15 +26,15 @@ case "$STEP" in family-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca3-pc1-amd-family-20261007 --file "$KITS/igneum-ca3-pc1-amd-family-kit-20261007.zip" --dir jobs --extract --title "CA3 PC 1: the family probe kit (7 Oct)" --expires-hours 36 $DEPLOY ;; eff-5090) $P add --kind run --target ae432dc7 --id run-ca3-pc1-v4-eff-5090-20261007-b --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 75 --title "CA3 PC 1: class v4 efficiency pass on the RTX 5090 (clock locks, v4 against v3, the card alone)" --expires-hours 36 $DEPLOY ;; eff-5090-floor) $P add --kind run --target ae432dc7 --id run-ca3-pc1-v4-eff-5090-floor-20261007 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 60 --title "CA3 PC 1: class v4 efficiency pass 2 on the RTX 5090 (1,400 MHz down to the driver floor, v4 against v3, the card alone)" --expires-hours 36 $DEPLOY ;; - ca4-exe) $P add --kind fetch --target ae432dc7 --id fetch-ca4-sparse3-exe-20261008 --file "$KITS/ca4/igneum-worker-cuda-ca4sparse3.exe" --dir jobs --title "CA4 research: the SM-sparse worker exe with the race fix (scratch build, counter-asic-4, 00:46 UTC)" --expires-hours 36 $DEPLOY ;; - ca4-sparse) $P add --kind run --target ae432dc7 --id run-ca4-pc1-ca4sparse-5090-20261008 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 70 --title "CA4 research: SM-sparse worker variants on the RTX 5090, unlocked and at the 1,300 MHz knee, v4 and v3 (the card alone)" --expires-hours 36 $DEPLOY ;; + ca4-exe) $P add --kind fetch --target ae432dc7 --id fetch-ca4-sparse5-exe-20261008 --file "$KITS/ca4/igneum-worker-cuda-ca4sparse5.exe" --dir jobs --title "CA4 research: the SM-sparse worker exe with the capture fix (scratch build, counter-asic-4, 03:55 UTC)" --expires-hours 36 $DEPLOY ;; + ca4-sparse) $P add --kind run --target ae432dc7 --id run-ca4-pc1-ca4sparse-5090-20261008-c --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 70 --title "CA4 research: SM-sparse worker variants on the RTX 5090, unlocked and at the 1,300 MHz knee, v4 and v3 (the card alone)" --expires-hours 36 $DEPLOY ;; eff-5090-floor2) $P add --kind run --target ae432dc7 --id run-ca3-pc1-v4-eff-5090-floor2-20261007 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 45 --title "CA3 PC 1: class v4 efficiency pass 3 on the RTX 5090 (1,100 MHz down to the driver floor, v4 against v3, the card alone)" --expires-hours 36 $DEPLOY ;; eff-5080) $P add --kind run --target ae432dc7 --id run-ca3-pc1-v4-eff-5080-20261007-d --cards-off "nvidia:NVIDIA GeForce RTX 5080" --script tools/ca3-v4-amend/pc1-v4-efficiency.ps1 --timeout-minutes 75 --title "CA3 PC 1: class v4 efficiency pass on the RTX 5080 (clock locks, v4 against v3, the card alone)" --expires-hours 36 $DEPLOY ;; helper-diag2) $P add --kind run --target ae432dc7 --id run-ca3-pc1-helper-diag2-20261007 --script tools/ca3-v4-amend/pc1-helper-diag2.ps1 --timeout-minutes 5 --title "PC 1: Power Helper diagnostic 2 (the task exe against the running app, scheduler history, crash log, a 20 s unelevated helper probe)" --expires-hours 12 $DEPLOY ;; ca4-mb-exe) $P add --kind fetch --target ae432dc7 --id fetch-ca4-microbench-exe-20261007 --file "$KITS/ca4/igneum-worker-cuda-ca4mb.exe" --dir jobs --title "CA4 research: the microbench worker exe (scratch build)" --expires-hours 36 $DEPLOY ;; - ca4-mb) $P add --kind run --target ae432dc7 --id run-ca4-pc1-microbench-5090-20261007 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-microbench.ps1 --timeout-minutes 60 --title "CA4 research: per-block micro-benchmark on the RTX 5090, unlocked and at the 1,300 MHz knee (the card alone)" --expires-hours 36 $DEPLOY ;; + ca4-mb) $P add --kind run --target ae432dc7 --id run-ca4-pc1-microbench-5090-20261008-c --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-microbench.ps1 --timeout-minutes 60 --title "CA4 research: per-block micro-benchmark on the RTX 5090, unlocked and at the 1,300 MHz knee (the card alone)" --expires-hours 36 $DEPLOY ;; ca4-packs-kit) $P add --kind fetch --target ae432dc7 --id fetch-ca4-packs-20261007 --file "$KITS/igneum-ca4-packs-20261007.zip" --dir jobs --extract --title "CA4 research: the two prototype classes, both per-load exports, plus the mx8 control" --expires-hours 36 $DEPLOY ;; - ca4-packs) $P add --kind run --target ae432dc7 --id run-ca4-pc1-packs-5090-20261007 --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-packs.ps1 --timeout-minutes 60 --title "CA4 research: the per-load shadow and the int8 tile prototypes against mx8 and sh256x27 on the RTX 5090 (the card alone)" --expires-hours 36 $DEPLOY ;; + ca4-packs) $P add --kind run --target ae432dc7 --id run-ca4-pc1-packs-5090-20261008-b --cards-off "nvidia:NVIDIA GeForce RTX 5090" --script tools/ca3-v4-amend/pc1-ca4-packs.ps1 --timeout-minutes 60 --title "CA4 research: the per-load shadow and the int8 tile prototypes against mx8 and sh256x27 on the RTX 5090 (the card alone)" --expires-hours 36 $DEPLOY ;; v5-kit) $P add --kind fetch --target ae432dc7,1ccfe586 --id fetch-ca3-v5-kit-20261007 --file "$KITS/v5kit/packs-ca3-v5-20261007T221001Z.zip" --dir jobs --extract --title "Class v5 kit (the v5 lane, 7f58af97): packs, workers, SHA256SUMS" --expires-hours 36 $DEPLOY ;; v5-amd) $P add --kind run --target ae432dc7 --id run-ca3-pc1-v5-amd-bench-20261007 --script tools/ca3-v4-amend/pc1-v5-amd-bench-20261007.ps1 --timeout-minutes 12 --title "Class v5 kit fingerprint on the RX 9070 XT (beside the miners; the v5 lane's script)" --expires-hours 36 $DEPLOY ;; v5-intel) $P add --kind run --target 1ccfe586 --id run-ca3-pc2-v5-intel-bench-20261007 --script tools/ca3-v4-amend/pc1-v5-intel-bench-20261007.ps1 --timeout-minutes 12 --title "Class v5 kit fingerprint on PC 2's Arc B580 eGPU (the v5 lane's script, class-v5 a4b08245; beside the miners; only on the shipper's PC 2 clear)" --expires-hours 36 $DEPLOY ;; diff --git a/tools/ca3-v4-amend/pc1-v4-efficiency.ps1 b/tools/ca3-v4-amend/pc1-v4-efficiency.ps1 index 40ef57e99..2b8b62519 100644 --- a/tools/ca3-v4-amend/pc1-v4-efficiency.ps1 +++ b/tools/ca3-v4-amend/pc1-v4-efficiency.ps1 @@ -70,10 +70,19 @@ $exe = Join-Path $inst 'igneum-worker-cuda.exe' if ($ca4) { # the research lane's exe with the race fix (counter-asic-4 after 2d0013d1, 00:46 UTC; the first exe parsed --variant and never applied it: # every row of the 00:22Z run read "variant base"); the rows carry its variant= and sparse_blocks= fields and any variant_not_installed line - $exe = Join-Path (Join-Path $jobs 'fetch-ca4-sparse3-exe-20261008') 'igneum-worker-cuda-ca4sparse3.exe' - if (-not (Test-Path $exe)) { "RESULT error the research worker is missing at $exe (the fetch job fetch-ca4-sparse3-exe-20261008 runs first)"; Summary 'failed' @{ error = 'research worker missing' }; exit 2 } + $exe = Join-Path (Join-Path $jobs 'fetch-ca4-sparse5-exe-20261008') 'igneum-worker-cuda-ca4sparse5.exe' + if (-not (Test-Path $exe)) { "RESULT error the research worker is missing at $exe (the fetch job fetch-ca4-sparse5-exe-20261008 runs first)"; Summary 'failed' @{ error = 'research worker missing' }; exit 2 } } "RESULT worker $exe sha256 $((Get-FileHash -Algorithm SHA256 $exe).Hash.ToLower()) bytes $((Get-Item $exe).Length)" +if ($ca4) { + # the research lane's card-free check of the race order (ca4sparse4, 03:04 UTC): the run would build "variants=2 names=base,sp43-w32" + $d0 = Join-Path $packs 'v4-devnet-epoch0' + $lr = @(& $exe --bench --pack $d0 --batches 250 --batch-log2 24 --block-warps 32 --variant sp43-w32 --list-race 2>&1 | ForEach-Object { "$_" }) + foreach ($l in $lr) { if ($l -match 'list-race|error|compile') { "RESULT list-race $l" } } + if (-not ($lr | Where-Object { $_ -match 'variants=2' })) { 'RESULT ca4 STOP: the card-free race check does not list the sparse variant (variants=2 absent); the sparse rows would be base again, nothing run'; Summary 'failed' @{ error = 'sparse variant not in the race order' }; exit 4 } + # ca4sparse5 (03:55 UTC): --list-race also compiles the rewritten kernel through the PC's nvrtc; a compile error or compiled=0 stops the job with nothing run + if (($lr | Where-Object { $_ -match 'compiled=0|NVRTC_ERROR|error: ' })) { 'RESULT ca4 STOP: the card-free check does not compile the rewritten kernel on this PC (the list-race lines above carry the error); nothing run'; Summary 'failed' @{ error = 'rewritten kernel does not compile' }; exit 4 } +} $appExe = Join-Path $inst 'igneum-app.exe' if (Test-Path $appExe) { try { "RESULT app-version $((& $appExe --version 2>&1 | Out-String).Trim())" } catch { } }