Add native K/M/RR inference engines, HIP kernels, replay and validation harnesses, and Windows DLSS setup and runtime support. Include GPU profiling tools, build and packaging scripts, platform integration patches, and implementation documentation.
47 lines
2.4 KiB
Python
47 lines
2.4 KiB
Python
"""Check gfx1201 hardware packing of every finite OCP e4m3 value and signed zero."""
|
|
import argparse
|
|
import hashlib
|
|
import json
|
|
import os
|
|
import pathlib
|
|
import struct
|
|
import subprocess
|
|
|
|
import numpy as np
|
|
from m_replay_validate import me
|
|
|
|
|
|
def main(args):
|
|
root = args.output_dir.resolve()
|
|
root.mkdir(parents=True, exist_ok=True)
|
|
codes = np.arange(256, dtype=np.uint8)
|
|
codes[(codes & 127) == 127] = 0 # NaN inputs are outside this finite-value packing contract.
|
|
inputs = me.E4M3[codes].astype(np.float16).tobytes()
|
|
(root / 'alloc-0.bin').write_bytes(inputs)
|
|
(root / 'alloc-1.bin').write_bytes(bytes(256))
|
|
(root / 'args.bin').write_bytes(struct.pack('<QQ', 0x100000000, 0x200000000))
|
|
(root / 'manifest.txt').write_text('kernel fp8_pack_probe\nlaunch 1 1 1 32 1 1 0\nargs 16\n'
|
|
'alloc 0 0x100000000 512\npointer 0 0 0\nalloc 1 0x200000000 256\npointer 8 1 0\n')
|
|
with (root / 'gpu.stdout.log').open('wb') as stdout, (root / 'gpu.stderr.log').open('wb') as stderr:
|
|
result = subprocess.run([str(args.probe.resolve()), '--hip-root', str(args.hip_root.resolve()),
|
|
'--module', str(args.module.resolve()), '--fixture-dir', str(root), '--output-dir', str(root / 'output'),
|
|
'--iterations', '1'], stdout=stdout, stderr=stderr, timeout=90,
|
|
env=dict(os.environ, D4R_DIAG_DIR=str(root)))
|
|
summary = dict(passed=False, architecture='gfx1201', finiteEncodings=254, signedZero=True,
|
|
moduleSha256=hashlib.sha256(args.module.read_bytes()).hexdigest(), exitCode=f'0x{result.returncode & 0xffffffff:08x}')
|
|
if result.returncode == 0:
|
|
actual = np.fromfile(root / 'output/alloc-1.bin', np.uint8)
|
|
summary['passed'] = actual.size == 256 and bool(np.array_equal(actual, codes))
|
|
if actual.size == 256:
|
|
summary['differingCodes'] = int(np.count_nonzero(actual != codes))
|
|
(root / 'summary.json').write_text(json.dumps(summary, indent=2) + '\n')
|
|
print(('PASS' if summary['passed'] else 'FAIL') + ' FP8_HARDWARE_PACK finite_encodings=254 signed_zero=1 architecture=gfx1201', flush=True)
|
|
return 0 if summary['passed'] else 1
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
for name in ('probe', 'module', 'hip-root', 'output-dir'):
|
|
parser.add_argument('--' + name, type=pathlib.Path, required=True)
|
|
raise SystemExit(main(parser.parse_args()))
|