This repository has been archived on 2026-08-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2026-08-20 00:45:43 +02:00

189 lines
6.3 KiB
Bash

#!/bin/bash
# =============================================================================
# Step 7: Compile and Run HIP Tests — AMD BC-250
# =============================================================================
# Compiles and runs all 3 HIP test programs, plus a sequential stress test.
#
# Tests:
# 1. hip_probe — Device query, memory allocation (safe probe)
# 2. hip_minimal_test — Kernel launch, compute verification (32 values)
# 3. hip_vector_add — Full managed-memory vector addition (65536 elements)
# 4. Sequential stress — Run hip_vector_add 3 times back-to-back
#
# Run as: bash 07_run_hip_tests.sh
# =============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GUIDE_DIR="$(dirname "$SCRIPT_DIR")"
TESTS_DIR="$GUIDE_DIR/tests"
BUILD_DIR="$GUIDE_DIR/tests/bin"
# Ensure environment
export HSA_OVERRIDE_GFX_VERSION=10.1.0
export HIP_VISIBLE_DEVICES=0
export HSA_ENABLE_SDMA=0
export HSA_TOOLS_LIB=""
export HSA_TOOLS_REPORT_LOAD_FAILURE=0
PASS=0
FAIL=0
echo "============================================"
echo " HIP Test Suite — AMD BC-250"
echo "============================================"
echo ""
# ─────────────────────────────────────────────
# Compile
# ─────────────────────────────────────────────
echo "--- Compiling Tests ---"
mkdir -p "$BUILD_DIR"
TESTS=("hip_probe" "hip_minimal_test" "hip_vector_add")
for TEST in "${TESTS[@]}"; do
SRC="$TESTS_DIR/${TEST}.cpp"
BIN="$BUILD_DIR/$TEST"
if [[ ! -f "$SRC" ]]; then
echo " [SKIP] $TEST — source not found: $SRC"
continue
fi
echo " Compiling $TEST..."
if hipcc --offload-arch=gfx1010 -o "$BIN" "$SRC" 2>&1; then
echo " [OK] $TEST compiled ($(du -h "$BIN" | cut -f1))"
else
echo " [FAIL] $TEST compilation failed"
((FAIL++))
fi
done
echo ""
# ─────────────────────────────────────────────
# Test 1: hip_probe
# ─────────────────────────────────────────────
echo "--- Test 1: hip_probe ---"
BIN="$BUILD_DIR/hip_probe"
if [[ -x "$BIN" ]]; then
OUTPUT=$("$BIN" 2>&1) && RC=$? || RC=$?
echo "$OUTPUT" | head -20
if echo "$OUTPUT" | grep -q "ALL STEPS COMPLETED"; then
echo " [PASS] hip_probe"
((PASS++))
else
echo " [FAIL] hip_probe (exit code: $RC)"
((FAIL++))
fi
else
echo " [SKIP] Not compiled"
fi
echo ""
# ─────────────────────────────────────────────
# Test 2: hip_minimal_test
# ─────────────────────────────────────────────
echo "--- Test 2: hip_minimal_test ---"
BIN="$BUILD_DIR/hip_minimal_test"
if [[ -x "$BIN" ]]; then
OUTPUT=$("$BIN" 2>&1) && RC=$? || RC=$?
echo "$OUTPUT" | head -20
if echo "$OUTPUT" | grep -q "PASS"; then
echo " [PASS] hip_minimal_test"
((PASS++))
else
echo " [FAIL] hip_minimal_test (exit code: $RC)"
((FAIL++))
fi
else
echo " [SKIP] Not compiled"
fi
echo ""
# ─────────────────────────────────────────────
# Test 3: hip_vector_add
# ─────────────────────────────────────────────
echo "--- Test 3: hip_vector_add ---"
BIN="$BUILD_DIR/hip_vector_add"
if [[ -x "$BIN" ]]; then
OUTPUT=$("$BIN" 2>&1) && RC=$? || RC=$?
echo "$OUTPUT" | head -20
if echo "$OUTPUT" | grep -q "FULLY OPERATIONAL"; then
echo " [PASS] hip_vector_add"
((PASS++))
else
echo " [FAIL] hip_vector_add (exit code: $RC)"
((FAIL++))
fi
else
echo " [SKIP] Not compiled"
fi
echo ""
# ─────────────────────────────────────────────
# Test 4: Sequential Stress
# ─────────────────────────────────────────────
echo "--- Test 4: Sequential Stress (3 rounds) ---"
BIN="$BUILD_DIR/hip_vector_add"
if [[ -x "$BIN" ]]; then
STRESS_PASS=0
for i in 1 2 3; do
OUTPUT=$("$BIN" 2>&1) && RC=$? || RC=$?
if echo "$OUTPUT" | grep -q "FULLY OPERATIONAL"; then
echo " Round $i/3: PASS"
((STRESS_PASS++))
else
echo " Round $i/3: FAIL (exit code: $RC)"
fi
done
if [[ "$STRESS_PASS" -eq 3 ]]; then
echo " [PASS] Sequential stress: $STRESS_PASS/3"
((PASS++))
else
echo " [FAIL] Sequential stress: $STRESS_PASS/3"
((FAIL++))
fi
else
echo " [SKIP] hip_vector_add not compiled"
fi
echo ""
# ─────────────────────────────────────────────
# Final Check
# ─────────────────────────────────────────────
echo "--- Post-Test Stability ---"
KIQ_COUNT=$(dmesg 2>/dev/null | grep -c "timeout waiting for kiq fence" || echo 0)
echo " KIQ timeout count: $KIQ_COUNT"
ROCM_OK=$(HSA_OVERRIDE_GFX_VERSION=10.1.0 rocminfo 2>&1 | grep -c "Done" || echo 0)
if [[ "$ROCM_OK" -gt 0 ]]; then
echo " rocminfo: Still working"
((PASS++))
else
echo " rocminfo: FAILED after tests"
((FAIL++))
fi
echo ""
echo "============================================"
echo " Results: $PASS passed, $FAIL failed"
echo "============================================"
if [[ "$FAIL" -eq 0 ]]; then
echo ""
echo " ROCm is FULLY OPERATIONAL on your BC-250!"
echo ""
echo " Your GPU is ready for HIP compute workloads."
echo " See the README.md 'HIP Programming Guidelines' section"
echo " for BC-250-specific coding rules."
fi
exit "$FAIL"