data: cat 3 SGEMM repos — siboehm, wangzyon, edtallison (full clone, no --depth)
Sources: siboehm/SGEMM_CUDA → upstream_ref/sgemm_siboehm/ (25 files) wangzyon/NVIDIA_SGEMM_PRACTICE → upstream_ref/nvidia_sgemm_practice/ (23 files, filled gaps) edtallison/sgemm-cuda → upstream_ref/sgemm_edtallison/ (41 files) All files cat'd one by one from git clone (no --depth). These are the 3 public SGEMM repos that can compile on CUDA 10.2 + CoreX ivcore10. Key files for BI-V100 porting: kernel 10 (warp tiling) — already proven on device with WARPSIZE=64 kernel 11/12 (double buffering) — next optimization target sgemm.cu + runner.cu — complete build+benchmark harness CMakeLists.txt — build system reference
This commit is contained in:
86
upstream_ref/sgemm_siboehm/scripts/kernel_9_autotuner.sh
Executable file
86
upstream_ref/sgemm_siboehm/scripts/kernel_9_autotuner.sh
Executable file
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -u
|
||||
|
||||
# Define the range of values for each parameter
|
||||
BK_VALUES=(8 16 32 64)
|
||||
TM_VALUES=(4 8 16 32)
|
||||
TN_VALUES=(4 8 16 32)
|
||||
BM_VALUES=(64 128 256)
|
||||
BN_VALUES=(64 128 256)
|
||||
NUM_THREADS_VALUES=(256)
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
cd "../build"
|
||||
|
||||
RUNNER="../src/runner.cu"
|
||||
KERNEL="../src/kernels/9_kernel_autotuned.cuh"
|
||||
OUTPUT="../benchmark_results/kernel_9_autotune_results.txt"
|
||||
|
||||
# Clear the output file
|
||||
echo "" > $OUTPUT
|
||||
|
||||
# Set GPU to use
|
||||
export DEVICE="2"
|
||||
|
||||
TOTAL_CONFIGS="$(( ${#NUM_THREADS_VALUES[@]} * ${#BK_VALUES[@]} * ${#TM_VALUES[@]} * ${#TN_VALUES[@]} * ${#BM_VALUES[@]} * ${#BN_VALUES[@]} ))"
|
||||
CONFIG_NUM=0
|
||||
|
||||
# Loop through all combinations of parameters
|
||||
for bk in ${BK_VALUES[@]}; do
|
||||
for tm in ${TM_VALUES[@]}; do
|
||||
for tn in ${TN_VALUES[@]}; do
|
||||
for bm in ${BM_VALUES[@]}; do
|
||||
for bn in ${BN_VALUES[@]}; do
|
||||
for nt in ${NUM_THREADS_VALUES[@]}; do
|
||||
echo ""
|
||||
CONFIG_NUM=$(( $CONFIG_NUM + 1 ))
|
||||
|
||||
# skip configurations that don't fullfil preconditions
|
||||
config="BK=$bk TM=$tm TN=$tn BM=$bm BN=$bn NT=$nt"
|
||||
if [[ $(( ($nt * 4) % bk )) -ne 0 ]]; then
|
||||
echo "VECTORIZE: Skipping $config because (NUM_THREADS * 4) % BK = $(( ($nt * 4) % bk )) != 0))"
|
||||
continue
|
||||
fi
|
||||
if [[ $(( ($nt * 4) % bn )) -ne 0 ]]; then
|
||||
echo "VECTORIZE: Skipping $config because (NUM_THREADS * 4) % BN = $(( ($nt * 4) % bn )) != 0))"
|
||||
continue
|
||||
fi
|
||||
if [[ $(( $bn % (16 * $tn ) )) -ne 0 ]]; then
|
||||
echo "QUANTIZATION: Skipping $config because BN % (16 * TN) = $(( $bn % (16 * $tn ) )) != 0))"
|
||||
continue
|
||||
fi
|
||||
if [[ $(( $bm % (16 * $tm ) )) -ne 0 ]]; then
|
||||
echo "QUANTIZATION: Skipping $config because BM % (16 * TM) = $(( $bm % (16 * $tm ) )) != 0))"
|
||||
continue
|
||||
fi
|
||||
if [[ $(( ($bm * $bk) % ( 4 * $nt ) )) -ne 0 ]]; then
|
||||
echo "VECTORIZE: Skipping $config because (BM * BK) % (4 * NUM_THREADS) = $(( ($bm * $bk) % ( 4 * 256 ) )) != 0))"
|
||||
continue
|
||||
fi
|
||||
if [[ $(( ($bn * $bk) % ( 4 * $nt ) )) -ne 0 ]]; then
|
||||
echo "VECTORIZE: Skipping $config because (BN * BK) % (4 * NUM_THREADS) = $(( ($bn * $bk) % ( 4 * 256 ) )) != 0))"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Update the parameters in the source code
|
||||
sed -i "s/const uint K9_BK = .*/const uint K9_BK = $bk;/" $RUNNER
|
||||
sed -i "s/const uint K9_TM = .*/const uint K9_TM = $tm;/" $RUNNER
|
||||
sed -i "s/const uint K9_TN = .*/const uint K9_TN = $tn;/" $RUNNER
|
||||
sed -i "s/const uint K9_BM = .*/const uint K9_BM = $bm;/" $RUNNER
|
||||
sed -i "s/const uint K9_BN = .*/const uint K9_BN = $bn;/" $RUNNER
|
||||
sed -i "s/const int K9_NUM_THREADS = .*/const int K9_NUM_THREADS = $nt;/" $KERNEL
|
||||
|
||||
# Rebuild the program
|
||||
make
|
||||
|
||||
echo "($CONFIG_NUM/$TOTAL_CONFIGS): BK=$bk TM=$tm TN=$tn BM=$bm BN=$bn NUM_THREADS=$nt" |& tee -a $OUTPUT
|
||||
# Run the benchmark and get the result
|
||||
# Kill the program after 4 seconds if it doesn't finish
|
||||
timeout -v 4 ./sgemm 9 | tee -a $OUTPUT
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
Reference in New Issue
Block a user