Preset K, byte-identical to the previous output in all captured buffers and the harness image, measured on an RX 7700 XT: - LDS row padding so WMMA operand loads hit distinct banks - WGP mode for enc1/enc2/dec1/dec2, ds_bpermute half-wave exchange for enc0/dec0/dec3, more waves per window in enc4/dec4/dec5 - cheaper operand plumbing in common/wmma_layout.h (packed f16 conversions, no dynamic vector indexing), raw buffer weight loads, accumulator-init vectors prepared once - enc1 as a single-buffer recompute layer, dec1 Q/K/V chains split - dec5 as four dependent phase kernels
19 lines
1.1 KiB
Bash
Executable File
19 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# build_native.sh SRC.hip OUT.hsaco [extra clang flags]: natively compiled DLSS texture kernel (gfx1101, wave64 default)
|
|
set -euo pipefail
|
|
ND=$(cd "$(dirname "$0")" && pwd)
|
|
SRC=$(realpath "$1") OUT=$(realpath -m "$2"); shift 2
|
|
[[ -s "$SRC" ]] || { echo "empty native source: $SRC" >&2; exit 2; }
|
|
R=${D4R_ROCM_DIR:-/opt/rocm}
|
|
ARCH=${D4R_GPU_ARCH:-gfx1101}
|
|
W=${WAVE:-64}
|
|
WF=$([[ $W == 64 ]] && echo -mwavefrontsize64 || echo -mno-wavefrontsize64)
|
|
D=$(cd "$(dirname "$SRC")" && pwd)
|
|
T=$(mktemp -d); trap 'rm -rf "$T"' EXIT
|
|
(cd "$T" && "$R/lib/llvm/bin/clang++" -x hip -std=c++20 --offload-arch=$ARCH --offload-device-only -O3 $WF -mcumode \
|
|
-ffp-contract=off -fgpu-flush-denormals-to-zero -fno-fast-math -I"$D" -I"$ND" -I"$R/include" --rocm-path="$R" \
|
|
--rocm-device-lib-path="$R/amdgcn/bitcode" "$@" -o "$OUT" "$SRC" -save-temps=cwd --no-gpu-bundle-output)
|
|
S=$(ls "$T"/*.s | head -1)
|
|
cp "$S" "${OUT%.hsaco}.s"
|
|
printf '%s: %s\n' "$(basename "$OUT")" "$(grep -hE '^\s+\.(vgpr_count|sgpr_count|private_segment_fixed_size|vgpr_spill_count|group_segment_fixed_size):' "$S" | tr -s ' ' | paste -sd' ')"
|