ECE 408 sem project

This commit is contained in:
Aryan Singh committed 2026-06-07 13:43:20 -05:00
1 parent 1d79ccd2e3
commit fa3efcaf07
139 files changed
+11634 -1

No files matched your search

+98
View File
@@ -0,0 +1,98 @@
#!/usr/bin/env python3
import csv
import re
import subprocess
import sys
from itertools import product
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
BUILD = ROOT / "kernels_op_7" / "build"
CSV_PATH = ROOT / "kernels_op_7" / "sweep.csv"
# Just BR x BC. 9 configs. BR=128 will OOM on smem (48KB cap), expected NOT_FOUND.
GRID = {
"br": [32, 64, 128],
"bc": [32, 64, 128],
}
# from Makefile
NVCC = "nvcc"
CFLAGS = "-O3 -arch=sm_86 -std=c++17 -rdc=true -g -lineinfo"
INCLUDES = "-I/usr/local/cuda/include -I/work/hdd/bche/hshah6/cutlass/include"
LIBS = "-L/usr/local/cuda/lib64 -lcublas -lcublasLt"
KERNEL_NAME = "flash_attention_forward_kernel"
def run(cmd):
return subprocess.run(cmd, shell=True, cwd=ROOT, capture_output=True, text=True)
def compile_one(tag, defs):
"""Two-step compile matching the Makefile."""
obj = BUILD / f"{tag}.o"
binary = BUILD / tag
r = run(f"{NVCC} {CFLAGS} {INCLUDES} {defs} -c test_gpt2.cu -o {obj}")
if r.returncode != 0:
return None, f"COMPILE FAILED:\n{r.stderr}"
r = run(f"{NVCC} {CFLAGS} -o {binary} {obj} {LIBS}")
if r.returncode != 0:
return None, f"LINK FAILED:\n{r.stderr}"
return binary, ""
def profile_one(binary, tag):
report = BUILD / tag
log = BUILD / f"{tag}.log"
cmd = (
f"nsys profile --stats=true --force-overwrite=true "
f"--cuda-event-trace=false -o {report} {binary}"
)
r = run(cmd)
log.write_text((r.stdout or "") + "\n" + (r.stderr or ""))
return log
def parse_avg_ns(log_path, kernel_name):
pattern = re.compile(rf"^\s*\d.*\b{re.escape(kernel_name)}\b")
for line in log_path.read_text().splitlines():
if pattern.search(line):
cols = line.split()
if len(cols) >= 4:
return cols[3]
return "NOT_FOUND"
def main():
BUILD.mkdir(parents=True, exist_ok=True)
configs = list(product(GRID["br"], GRID["bc"]))
first_fail_printed = False
with CSV_PATH.open("w", newline="") as fp:
out = csv.writer(fp)
out.writerow(["BR", "BC", "fa2_avg_ns"])
for i, (br, bc) in enumerate(configs, 1):
tag = f"br{br}_bc{bc}"
defs = f"-DSWEEP_BR={br} -DSWEEP_BC={bc}"
binary, err = compile_one(tag, defs)
if binary is None:
if not first_fail_printed:
print(err)
first_fail_printed = True
out.writerow([br, bc, "BUILD_FAIL"])
fp.flush()
continue
log = profile_one(binary, tag)
out.writerow([br, bc, parse_avg_ns(log, KERNEL_NAME)])
fp.flush()
return 0
if __name__ == "__main__":
sys.exit(main())
+29
View File
@@ -0,0 +1,29 @@
#!/bin/bash
#SBATCH --job-name="op7_sweep"
#SBATCH --partition=gpuA40x4
#SBATCH --mem=12G
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=4
#SBATCH --gpus-per-node=1
#SBATCH --gpu-bind=closest
#SBATCH --constraint="projects,perf,nvperf"
#SBATCH --account=bche-delta-gpu
#SBATCH --time=01:00:00
#SBATCH --output=op7_sweep_%j.out
#SBATCH --mail-user=asing271@illinois.edu
#SBATCH --mail-type=BEGIN,END,FAIL
module reset
module load cuda
cd "$SLURM_SUBMIT_DIR"
# 1. Save current kernels and swap in req_4.
BACKUP=$(mktemp -d)
cp kernels/*.cuh "$BACKUP/"
cp kernels_req_4/*.cuh kernels/
# 2. Always restore kernels/ on exit.
trap 'cp "$BACKUP"/*.cuh kernels/' EXIT
python3 kernels_op_7/sweep.py