51 lines
3.6 KiB
PowerShell
51 lines
3.6 KiB
PowerShell
[CmdletBinding()]
|
|
param([string]$HipRoot, [string]$PackageRoot, [string]$ZludaRoot, [string]$OutputDirectory)
|
|
$ErrorActionPreference = 'Stop'
|
|
$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' }
|
|
if (!$ZludaRoot) { $ZludaRoot = Join-Path $repo 'dist/zluda-windows-final' }
|
|
if (!$OutputDirectory) { $OutputDirectory = Join-Path $repo ('test-results/native-identity-' + (Get-Date -Format 'yyyyMMdd-HHmmss')) }
|
|
New-Item -ItemType Directory -Force $OutputDirectory | Out-Null
|
|
$previous = @{D4R_ZLUDA_NATIVE_DIR=$env:D4R_ZLUDA_NATIVE_DIR; D4R_ZLUDA_VERBOSE=$env:D4R_ZLUDA_VERBOSE; D4R_DIAG_DIR=$env:D4R_DIAG_DIR}
|
|
function Invoke-NativeProbe([string]$Name) {
|
|
$info = New-Object Diagnostics.ProcessStartInfo
|
|
$info.FileName = Join-Path $PackageRoot 'bin/d4r_cuda_driver_probe.exe'
|
|
$info.Arguments = '--hip-root "' + $HipRoot + '" --cuda-dll "' + (Join-Path $ZludaRoot 'nvcuda.dll') + '" --iterations 32'
|
|
$info.UseShellExecute=$false; $info.CreateNoWindow=$true; $info.RedirectStandardOutput=$true; $info.RedirectStandardError=$true
|
|
$process = New-Object Diagnostics.Process
|
|
$process.StartInfo=$info
|
|
if (!$process.Start()) { throw 'Cannot start native override probe' }
|
|
$stdout=$process.StandardOutput.ReadToEndAsync(); $stderr=$process.StandardError.ReadToEndAsync()
|
|
if (!$process.WaitForExit(120000)) { $process.Kill(); $process.WaitForExit(); throw 'Native override test timed out' }
|
|
[IO.File]::WriteAllText((Join-Path $OutputDirectory "$Name.stdout.log"),$stdout.GetAwaiter().GetResult())
|
|
[IO.File]::WriteAllText((Join-Path $OutputDirectory "$Name.stderr.log"),$stderr.GetAwaiter().GetResult())
|
|
$code=$process.ExitCode; $process.Dispose()
|
|
return $code
|
|
}
|
|
try {
|
|
$env:D4R_ZLUDA_VERBOSE = '1'; $env:D4R_DIAG_DIR = $OutputDirectory
|
|
$bad = Join-Path $OutputDirectory 'wrong-identity'
|
|
$good = Join-Path $OutputDirectory 'matching-identity'
|
|
New-Item -ItemType Directory -Force $bad,$good | Out-Null
|
|
foreach ($directory in @($bad,$good)) {
|
|
Copy-Item -LiteralPath (Join-Path $PackageRoot 'bin/probe_gfx1201.hsaco') -Destination (Join-Path $directory 'd4r_ptx_pattern.hsaco') -Force
|
|
}
|
|
'd4r_ptx_pattern 0000000000000000' | Set-Content -LiteralPath (Join-Path $bad 'd4r-kernels.txt') -Encoding ASCII
|
|
$env:D4R_ZLUDA_NATIVE_DIR = $bad
|
|
if (Invoke-NativeProbe 'wrong') { throw 'Wrong identity must use the correct translated fallback' }
|
|
if (!(Select-String -LiteralPath (Join-Path $OutputDirectory 'wrong.stderr.log') -Pattern 'reason=ptx_identity.*fallback=translated' -Quiet)) {
|
|
throw 'Wrong identity was not explicitly rejected'
|
|
}
|
|
$identity = Select-String -LiteralPath (Join-Path $OutputDirectory 'wrong.stdout.log') -Pattern 'fnv1a64=([0-9a-f]{16})'
|
|
if (!$identity) { throw 'PTX probe did not report its identity' }
|
|
"d4r_ptx_pattern $($identity.Matches[0].Groups[1].Value)" | Set-Content -LiteralPath (Join-Path $good 'd4r-kernels.txt') -Encoding ASCII
|
|
$env:D4R_ZLUDA_NATIVE_DIR = $good
|
|
if (Invoke-NativeProbe 'matching') { throw 'Matching native override produced incorrect output' }
|
|
$hits = @(Select-String -LiteralPath (Join-Path $OutputDirectory 'matching.stderr.log') -Pattern '\[d4r-launch\].*backend=native')
|
|
if ($hits.Count -ne 32) { throw "Expected 32 native launches, got $($hits.Count)" }
|
|
Write-Host 'PASS NATIVE_IDENTITY wrong_hash=fallback matching_hash=native launches=32'
|
|
} finally {
|
|
foreach ($name in $previous.Keys) { [Environment]::SetEnvironmentVariable($name,$previous[$name],'Process') }
|
|
}
|