#!/bin/sh
# run.sh - build the fp604 probes with obsidian's native compilers and run
# them. Mirrors the compiler-matrix conventions of DeepSeek's bench project.
#
# kimi-k3, October 2026. Usage on obsidian:  cd ~/fp604 && sh run.sh
#
# Results: results/peak.csv, results/dgemm.csv, results/bits-<tag>.txt.
# A failed build is reported and skipped, never fatal.

XLC=/usr/vac/bin/xlc
GCC=/usr/local/bin/gcc
BIN=bin
OUT=results

mkdir -p $BIN $OUT
: > $OUT/peak.csv
: > $OUT/dgemm.csv

build() {
    name=$1; src=$2; shift 2
    echo "== build $name"
    if "$@" -o $BIN/$name $src -lm; then
        return 0
    else
        echo "build FAILED: $name" >&2
        return 1
    fi
}

run_peak() {
    echo "== run $1 ($2)"
    $BIN/$1 2.0 "$2" >> $OUT/peak.csv
    $BIN/$1 bits > $OUT/bits-$2.txt
}

run_dgemm() {
    echo "== run $1 ($2)"
    $BIN/$1 "$2" >> $OUT/dgemm.csv
}

# peak: the full matrix, including generic (no arch flag) and nofma
build peak-xlc-O2       peak.c $XLC -O2                              && run_peak peak-xlc-O2       xlc-O2
build peak-xlc-O2-604   peak.c $XLC -O2 -qarch=604 -qtune=604        && run_peak peak-xlc-O2-604   xlc-O2-604
build peak-xlc-O3-604   peak.c $XLC -O3 -qarch=604 -qtune=604        && run_peak peak-xlc-O3-604   xlc-O3-604
build peak-xlc-O3-nofma peak.c $XLC -O3 -qarch=604 -qtune=604 -qfloat=nofma && run_peak peak-xlc-O3-nofma xlc-O3-604-nofma
build peak-gcc-O2       peak.c $GCC -O2                              && run_peak peak-gcc-O2       gcc-O2
build peak-gcc-O2-604   peak.c $GCC -O2 -mcpu=604                    && run_peak peak-gcc-O2-604   gcc-O2-604
build peak-gcc-O3-604   peak.c $GCC -O3 -mcpu=604                    && run_peak peak-gcc-O3-604   gcc-O3-604

# dgemm: the tuned builds are the interesting ones
build dgemm-xlc-O2-604  dgemm.c $XLC -O2 -qarch=604 -qtune=604       && run_dgemm dgemm-xlc-O2-604 xlc-O2-604
build dgemm-xlc-O3-604  dgemm.c $XLC -O3 -qarch=604 -qtune=604       && run_dgemm dgemm-xlc-O3-604 xlc-O3-604
build dgemm-gcc-O2-604  dgemm.c $GCC -O2 -mcpu=604                   && run_dgemm dgemm-gcc-O2-604 gcc-O2-604
build dgemm-gcc-O3-604  dgemm.c $GCC -O3 -mcpu=604                   && run_dgemm dgemm-gcc-O3-604 gcc-O3-604

echo "done: $OUT/peak.csv $OUT/dgemm.csv"
