Add explicit gfx1200/gfx1201 builds, runtime selection and per-target code objects. Guard staging, packaging and installation against mixed architectures; retain gfx1201 compatibility and strict K/M arithmetic. Adapt realdody's target configuration and MSVC binary16/BOOL portability fixes from ae530b0. Do not import its forced gfx12 layout on RDNA3. Add exhaustive binary16 and C++/PowerShell target contract regressions. Validation: 20 CTest gates on RX 9070 XT; four software-only gfx1200 gates; MSVC portability compile checks; exact 4K K async and M control outputs; isolated package install/restore and mixed-target rejection tests. No physical gfx1200 validation is claimed. Co-authored-by: realdody <[email protected]>
48 lines
3.1 KiB
PowerShell
48 lines
3.1 KiB
PowerShell
[CmdletBinding()]
|
|
param([string]$HipRoot, [string]$PackageRoot, [string]$OutputDirectory,
|
|
[string[]]$Layers = @('enc1','enc2','enc3_tube','dec2','dec1'),
|
|
[ValidateRange(1,10000)][int]$Iterations = 32)
|
|
$ErrorActionPreference = 'Stop'
|
|
. (Join-Path $PSScriptRoot 'gpu-target.ps1')
|
|
$repo = [IO.Path]::GetFullPath((Join-Path $PSScriptRoot '../..'))
|
|
if (!$HipRoot) { $HipRoot = Join-Path $repo '.tools/therock-10.2.0a20260929/_rocm_sdk_core' }
|
|
if (!$PackageRoot) { $PackageRoot = Join-Path $repo 'dist/windows-rdna4-therock' }
|
|
$GpuArch=Get-D4RGpuTarget $PackageRoot $null
|
|
if (!$OutputDirectory) { $OutputDirectory = Join-Path $repo ('test-results/m-replay-' + (Get-Date -Format 'yyyyMMdd-HHmmss')) }
|
|
New-Item -ItemType Directory -Force $OutputDirectory | Out-Null
|
|
$previousPython = $env:PYTHONPATH
|
|
$previousDiag = $env:D4R_DIAG_DIR
|
|
$env:PYTHONPATH = "$(Join-Path $repo '.tools/python/vendor');$previousPython"
|
|
$summary = [ordered]@{utc=[DateTime]::UtcNow.ToString('o'); hipRoot=$HipRoot; architecture=$GpuArch; layers=@(); passed=$false}
|
|
try {
|
|
foreach ($layer in $Layers) {
|
|
if ($layer -notmatch '^(enc[12]|enc3_tube|dec[12])$') { throw "Invalid M layer $layer" }
|
|
$folder = Join-Path $OutputDirectory $layer
|
|
$fixture = Join-Path $folder 'fixture'
|
|
$output = Join-Path $folder 'output'
|
|
New-Item -ItemType Directory -Force $folder | Out-Null
|
|
$env:D4R_DIAG_DIR = $folder
|
|
& python (Join-Path $PackageRoot 'm_replay_validate.py') generate --layer $layer --fixture-dir $fixture `
|
|
> (Join-Path $folder 'fixture.stdout.log') 2> (Join-Path $folder 'fixture.stderr.log')
|
|
if ($LASTEXITCODE) { throw "M $layer fixture generation failed: $folder" }
|
|
& (Join-Path $PackageRoot 'bin/d4r_native_replay_probe.exe') --hip-root $HipRoot `
|
|
--module (Join-Path $PackageRoot "experimental/m/rrlite_${layer}_4x4_${GpuArch}.hsaco") `
|
|
--fixture-dir $fixture --output-dir $output --iterations $Iterations `
|
|
> (Join-Path $folder 'gpu.stdout.log') 2> (Join-Path $folder 'gpu.stderr.log')
|
|
if ($LASTEXITCODE) { throw "M $layer GPU replay failed: $folder" }
|
|
& python (Join-Path $PackageRoot 'm_replay_validate.py') validate --layer $layer --fixture-dir $fixture --output-dir $output `
|
|
> (Join-Path $folder 'reference.stdout.log') 2> (Join-Path $folder 'reference.stderr.log')
|
|
if ($LASTEXITCODE) { throw "M $layer reference mismatch; stopping before the next layer: $folder" }
|
|
Get-Content -LiteralPath (Join-Path $folder 'reference.stdout.log') | Write-Host
|
|
$summary.layers += @{layer=$layer; passed=$true; iterations=$Iterations}
|
|
}
|
|
$summary.passed = $true
|
|
} catch { $summary.error=$_.Exception.Message; Write-Warning $summary.error }
|
|
finally {
|
|
$env:PYTHONPATH=$previousPython; $env:D4R_DIAG_DIR=$previousDiag
|
|
$summary | ConvertTo-Json -Depth 5 | Set-Content -LiteralPath (Join-Path $OutputDirectory 'summary.json') -Encoding UTF8
|
|
Compress-Archive -LiteralPath $OutputDirectory -DestinationPath "$OutputDirectory.zip" -Force
|
|
Write-Host "M replay bundle: $OutputDirectory.zip"
|
|
}
|
|
if (!$summary.passed) { exit 1 }
|