Near LOD0/1 (detail band, relief, root refinement, normals) now evaluated and meshed on the GPU. 960 near tiles: zero sign/topology differences vs CPU and WARP, vertex max 0.0049 mm (was 15 cm); far survival audit passes; CPU hashes 44/44 unchanged. Far connector-panel outlier (64.56 cm, LOD8) remains a tessellation difference, and remote captures show missing far geometry on GPU. Cold readiness (viewer clock, my interleaved runs): CPU 2.51/2.49/2.40 s, GPU 5.05/2.68/2.80 s. The ~2.1 s Present stall hit only the first GPU launch. Viewer spends ~1.13 s before shape compile starts (startup checks), which is the gap between the 0.95 s benchmark and ~2.4 s on-screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
52 lines
2.5 KiB
PowerShell
52 lines
2.5 KiB
PowerShell
[CmdletBinding()]
|
|
param()
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
$HostProcess = Get-Process -Id $PID
|
|
$HostProcess.PriorityClass = 'BelowNormal'
|
|
$HostProcess.ProcessorAffinity = [IntPtr]0xFF00
|
|
$Standalone = [IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\..'))
|
|
$Executable = Join-Path $Standalone 'bin\VoxelForgeGpuFieldStep6NearProbe.exe'
|
|
$Stdout = Join-Path $PSScriptRoot 'step6_cpu_hash_fresh_w8.stdout.log'
|
|
$Stderr = Join-Path $PSScriptRoot 'step6_cpu_hash_fresh_w8.stderr.log'
|
|
$Arguments = @('--stream-benchmark','--shape-world','--force-generate','--stream-hash','--workers=8','--clip-radius=3')
|
|
if (-not (Test-Path -LiteralPath $Executable -PathType Leaf)) { throw "Executable not found: $Executable" }
|
|
|
|
for ($Attempt = 0; $Attempt -lt 2; ++$Attempt) {
|
|
if ($Attempt -eq 1) {
|
|
Write-Output '0xC0000142 encountered; waiting 60 seconds before the permitted retry.'
|
|
Start-Sleep -Seconds 60
|
|
}
|
|
$Child = Start-Process -FilePath $Executable -ArgumentList $Arguments -WorkingDirectory $Standalone `
|
|
-WindowStyle Hidden -PassThru -RedirectStandardOutput $Stdout -RedirectStandardError $Stderr
|
|
$PeakWorkingSet = 0L
|
|
$PeakPrivate = 0L
|
|
$OverLimit = $false
|
|
while (-not $Child.HasExited) {
|
|
$Child.Refresh()
|
|
if ($Child.HasExited) { break }
|
|
$Child.PriorityClass = 'BelowNormal'
|
|
$Child.ProcessorAffinity = [IntPtr]0xFF00
|
|
$PeakWorkingSet = [Math]::Max($PeakWorkingSet,$Child.WorkingSet64)
|
|
$PeakPrivate = [Math]::Max($PeakPrivate,$Child.PrivateMemorySize64)
|
|
if ($Child.PrivateMemorySize64 -ge 8GB) {
|
|
$OverLimit = $true
|
|
$Child.Kill()
|
|
$Child.WaitForExit()
|
|
break
|
|
}
|
|
Start-Sleep -Milliseconds 100
|
|
}
|
|
$Child.WaitForExit()
|
|
$Child.Refresh()
|
|
if ($Child.ExitCode -eq -1073741502 -and $Attempt -eq 0) { continue }
|
|
if ($Child.ExitCode -eq -1073741502) { throw '0xC0000142 repeated after the one retry; stopping.' }
|
|
if ($OverLimit) { throw 'CPU hash run stopped at the 8 GB process memory limit.' }
|
|
$Log = Get-Content -LiteralPath $Stdout -Raw
|
|
if ($Child.ExitCode -ne 0 -or -not $Log.Contains('[StreamFullClipmap]')) {
|
|
throw "Hash run failed; exit=$($Child.ExitCode) stdout=$Stdout stderr=$Stderr"
|
|
}
|
|
Write-Output "RUN_EXIT pid=$($Child.Id) priority=BelowNormal affinity=0xFF00 peak_working_set_gb=$([Math]::Round($PeakWorkingSet/1GB,2)) peak_private_gb=$([Math]::Round($PeakPrivate/1GB,2)) exit_code=$($Child.ExitCode) stdout=$Stdout stderr=$Stderr"
|
|
exit 0
|
|
}
|