From 330bc2abf0fb566eb4319f6eb2f5e2deab24a696 Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Fri, 23 Oct 2026 22:05:15 +0000 Subject: [PATCH 1/5] Stop a missing binary from aborting a whole hw_stats suite run_hw.py resolved every exec with common.file_option_test, which raises PathMissing when the binary is absent. One unbuilt app therefore killed the run before every app listed after it: ispass-2009 reported nothing despite having 8 of its 10 binaries present. Catch it, print "SKIP - no binary for ", and carry on. Two other fixes found while profiling a GB300 under CUDA 13.2: - Invoke postprocess-nsys-csv.py with sys.executable rather than a bare "python", which does not exist on a python3-only box. - define-all-apps.yml: point proxy-apps-doe at bin/ instead of the source tree, correct cns/cns_all to cns_all, and re-enable kmeans-rodinia-2.0-ft now that it uses texture objects and passes its gold check again. conv_bench and rnn_bench stay disabled -- they need cuDNN APIs removed in cuDNN 9 -- but their rationale no longer cites the abort behaviour fixed above. shared_bank_conflicts and MaxIops_int32 are re-enabled; they build fine and were only disabled because of that abort. Co-Authored-By: Claude Opus 5 (1M context) --- util/hw_stats/run_hw.py | 15 ++- util/job_launching/apps/define-all-apps.yml | 114 ++++++++++---------- 2 files changed, 71 insertions(+), 58 deletions(-) diff --git a/util/hw_stats/run_hw.py b/util/hw_stats/run_hw.py index 8131fdf393..4db8335ed6 100755 --- a/util/hw_stats/run_hw.py +++ b/util/hw_stats/run_hw.py @@ -213,7 +213,16 @@ if args == None: args = "" - exec_path = common.file_option_test(os.path.join(edir, exe), "", this_directory) + # A benchmark listed in define-*.yml may simply not be built in this + # tree (suites differ by branch). Skip it instead of aborting the + # whole suite, which used to lose every app after the first gap. + try: + exec_path = common.file_option_test( + os.path.join(edir, exe), "", this_directory + ) + except common.PathMissing: + print("SKIP - no binary for {0}".format(exe)) + continue sh_contents = "" kernel_number = "" if "mlperf" in exec_path: @@ -379,7 +388,9 @@ + str(args) + "; nsys stats -f csv --report cuda_gpu_trace " + os.path.join(this_run_dir, "out.nsys-rep") - + " | tee cycles.csv; python " + + " | tee cycles.csv; " + + sys.executable + + " " + os.path.join(this_directory, "postprocess-nsys-csv.py") + " --path " + this_run_dir diff --git a/util/job_launching/apps/define-all-apps.yml b/util/job_launching/apps/define-all-apps.yml index 190c1891e5..5ee8a7388d 100644 --- a/util/job_launching/apps/define-all-apps.yml +++ b/util/job_launching/apps/define-all-apps.yml @@ -26,10 +26,11 @@ rodinia_2.0-ft: - heartwall-rodinia-2.0-ft: - args: ./data/test.avi 1 ./data/result-1.txt accel-sim-mem: 1G - # Uses legacy texture cache instructions, it is unclear if it still makes sense to support -# - kmeans-rodinia-2.0-ft: -# - args: -i ./data/400.txt -g data/400-result.txt -o -# accel-sim-mem: 1G + # The legacy texture-reference API it used was removed in CUDA 12; the + # kernel now uses texture objects and passes its gold check again. + - kmeans-rodinia-2.0-ft: + - args: -i ./data/400.txt -g data/400-result.txt -o + accel-sim-mem: 1G - lud-rodinia-2.0-ft: - args: -v -b -i ./data/64.dat accel-sim-mem: 1G @@ -447,27 +448,28 @@ Deepbench_nvidia_normal: exec_dir: "$GPUAPPS_ROOT/bin/$CUDA_VERSION/release/" data_dirs: "$GPUAPPS_ROOT/data_dirs/" execs: - - conv_bench: - - args: train half 7 7 832 16 128 5 5 2 2 1 1 - accel-sim-mem: 16G - - args: train half 7 7 512 8 512 1 1 0 0 1 1 - accel-sim-mem: 3G - - args: train half 7 7 832 16 256 1 1 0 0 1 1 - accel-sim-mem: 4G - - args: train half 7 7 512 8 512 3 3 1 1 1 1 - accel-sim-mem: 9G - - args: train half 14 14 512 16 512 3 3 1 1 1 1 - accel-sim-mem: 17G - - args: inference half 700 161 1 1 32 20 5 0 0 2 2 - accel-sim-mem: 2G - - args: inference half 700 161 1 2 32 20 5 0 0 2 2 - accel-sim-mem: 2G - - args: inference half 341 79 32 1 32 10 5 0 0 2 2 - accel-sim-mem: 6G - - args: inference half 341 79 32 2 32 10 5 0 0 2 2 - accel-sim-mem: 80G - - args: inference half 480 48 1 1 16 3 3 1 1 1 1 - accel-sim-mem: 2G + # not built: they use cuDNN APIs removed in cuDNN 9. +# - conv_bench: +# - args: train half 7 7 832 16 128 5 5 2 2 1 1 +# accel-sim-mem: 16G +# - args: train half 7 7 512 8 512 1 1 0 0 1 1 +# accel-sim-mem: 3G +# - args: train half 7 7 832 16 256 1 1 0 0 1 1 +# accel-sim-mem: 4G +# - args: train half 7 7 512 8 512 3 3 1 1 1 1 +# accel-sim-mem: 9G +# - args: train half 14 14 512 16 512 3 3 1 1 1 1 +# accel-sim-mem: 17G +# - args: inference half 700 161 1 1 32 20 5 0 0 2 2 +# accel-sim-mem: 2G +# - args: inference half 700 161 1 2 32 20 5 0 0 2 2 +# accel-sim-mem: 2G +# - args: inference half 341 79 32 1 32 10 5 0 0 2 2 +# accel-sim-mem: 6G +# - args: inference half 341 79 32 2 32 10 5 0 0 2 2 +# accel-sim-mem: 80G +# - args: inference half 480 48 1 1 16 3 3 1 1 1 1 +# accel-sim-mem: 2G - gemm_bench: - args: train half 1760 7000 1760 0 0 accel-sim-mem: 18G @@ -489,35 +491,35 @@ Deepbench_nvidia_normal: accel-sim-mem: 7G - args: inference half 35 1500 2560 0 0 accel-sim-mem: 2G - - rnn_bench: - - args: inference half 512 1 25 lstm - accel-sim-mem: 12G - - args: inference half 512 2 25 lstm - accel-sim-mem: 12G - - args: inference half 1024 1 25 lstm - accel-sim-mem: 12G - - args: inference half 256 4 150 lstm - accel-sim-mem: 12G - - args: inference half 1536 1 50 lstm - accel-sim-mem: 12G - - args: inference half 512 1 1 gru - accel-sim-mem: 12G - - args: inference half 512 2 1 gru - accel-sim-mem: 12G - - args: inference half 512 4 1 gru - accel-sim-mem: 12G - - args: inference half 1536 1 750 gru - accel-sim-mem: 12G - - args: train half 128 32 15 lstm - accel-sim-mem: 20G - - args: train half 128 64 15 lstm - accel-sim-mem: 20G - - args: train half 128 32 1 lstm - accel-sim-mem: 20G - - args: train half 128 64 1 gru - accel-sim-mem: 20G - - args: train half 128 32 1 gru - accel-sim-mem: 20G +# - rnn_bench: +# - args: inference half 512 1 25 lstm +# accel-sim-mem: 12G +# - args: inference half 512 2 25 lstm +# accel-sim-mem: 12G +# - args: inference half 1024 1 25 lstm +# accel-sim-mem: 12G +# - args: inference half 256 4 150 lstm +# accel-sim-mem: 12G +# - args: inference half 1536 1 50 lstm +# accel-sim-mem: 12G +# - args: inference half 512 1 1 gru +# accel-sim-mem: 12G +# - args: inference half 512 2 1 gru +# accel-sim-mem: 12G +# - args: inference half 512 4 1 gru +# accel-sim-mem: 12G +# - args: inference half 1536 1 750 gru +# accel-sim-mem: 12G +# - args: train half 128 32 15 lstm +# accel-sim-mem: 20G +# - args: train half 128 64 15 lstm +# accel-sim-mem: 20G +# - args: train half 128 32 1 lstm +# accel-sim-mem: 20G +# - args: train half 128 64 1 gru +# accel-sim-mem: 20G +# - args: train half 128 32 1 gru +# accel-sim-mem: 20G sdk-4.2-scaled: exec_dir: "$GPUAPPS_ROOT/bin/$CUDA_VERSION/release/" @@ -937,13 +939,13 @@ dragon-cdp: proxy-apps-doe: - exec_dir: "$GPUAPPS_ROOT/src/cuda/proxy-apps-doe/" + exec_dir: "$GPUAPPS_ROOT/bin/$CUDA_VERSION/release/" data_dirs: "$GPUAPPS_ROOT/data_dirs/proxy-apps-doe/" execs: # Does not compile # - comd/CoMDCUDA: # - args: p ag -e -x 20 -y 20 -z 20 -n 0 -m thread_atom - - cns/cns_all: + - cns_all: - args: 64 32 32 1 - XSBench: - args: 12 small 0 From ca90f215bc29a362fcfeaeeb799b816fabf76d57 Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Fri, 23 Oct 2026 22:58:10 +0000 Subject: [PATCH 2/5] Skip missing binaries in the tracer and CUPTI runners too Same fix as the previous commit, applied to the other two copies of the loop: run_hw_trace.py and pm_cupti_tools/run_cupti.py both resolved the exec with common.file_option_test and let PathMissing escape, so one unbuilt app aborted the whole suite. Verified against Deepbench_nvidia_normal (gemm_bench is not built under cuDNN 9): the tracer now prints SKIP per config and exits 0, while rodinia_2.0-ft still lays out all 11 run directories with no skips. Co-Authored-By: Claude Opus 5 (1M context) --- util/hw_stats/pm_cupti_tools/run_cupti.py | 11 ++++++++++- util/tracer_nvbit/run_hw_trace.py | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/util/hw_stats/pm_cupti_tools/run_cupti.py b/util/hw_stats/pm_cupti_tools/run_cupti.py index 5ae1d76a7f..b4829d0a0d 100755 --- a/util/hw_stats/pm_cupti_tools/run_cupti.py +++ b/util/hw_stats/pm_cupti_tools/run_cupti.py @@ -125,7 +125,16 @@ if args is None: args = "" - exec_path = common.file_option_test(os.path.join(edir, exe), "", this_directory) + # A benchmark listed in define-*.yml may simply not be built in this + # tree (suites differ by branch). Skip it instead of aborting the + # whole suite, which used to lose every app after the first gap. + try: + exec_path = common.file_option_test( + os.path.join(edir, exe), "", this_directory + ) + except common.PathMissing: + print(f"SKIP - no binary for {exe}") + continue # Build the run script with CUPTI injection sh_contents = f"""#!/bin/bash diff --git a/util/tracer_nvbit/run_hw_trace.py b/util/tracer_nvbit/run_hw_trace.py index 9fc6666c37..68b1496834 100755 --- a/util/tracer_nvbit/run_hw_trace.py +++ b/util/tracer_nvbit/run_hw_trace.py @@ -129,7 +129,16 @@ if args == None: args = "" - exec_path = common.file_option_test(os.path.join(edir, exe), "", this_directory) + # A benchmark listed in define-*.yml may simply not be built in this + # tree (suites differ by branch). Skip it instead of aborting the + # whole suite, which used to lose every app after the first gap. + try: + exec_path = common.file_option_test( + os.path.join(edir, exe), "", this_directory + ) + except common.PathMissing: + print("SKIP - no binary for {0}".format(exe)) + continue sh_contents = "set -e\n" if options.terminate_upon_limit: From 3a602a2f9248d5ed280b941049a0ce139a83eecd Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Fri, 23 Oct 2026 23:12:29 +0000 Subject: [PATCH 3/5] Factor the shared run-directory setup out of the three runner scripts run_hw.py, run_hw_trace.py and run_cupti.py each carried their own copy of the same ~30 lines: make the run directory, link the benchmark's data dir and the suite-wide one, then resolve the executable. The previous two commits had to apply one identical bug fix in all three places, which is the clearest argument for not keeping three copies. Move that block to common.prepare_run_dir(), which returns the executable path or None when the benchmark is not built, and add common.write_run_script() for the write/chmod pair. Each script keeps its own run-directory layout (hw_run/, hw_run/traces/, hw_run/cupti/) and its own script generation, which is what legitimately differs between them. The execution step is deliberately left alone: the tracer treats a failed run as fatal while the other two warn and continue. One behaviour change, in the shared helper: resolve the binary before creating anything, so a skipped benchmark no longer leaves an empty run directory and dangling data_dirs symlink behind. Verified by generating every rodinia_2.0-ft run script before and after and diffing: identical once the embedded run timestamp is normalised, with identical symlink targets. Deepbench_nvidia_normal still reports 10 skips and now leaves no directories. run_cupti.py exits before this loop unless its injection library is built, so it was checked by inspection and compilation only. Co-Authored-By: Claude Opus 5 (1M context) --- util/hw_stats/pm_cupti_tools/run_cupti.py | 40 +++--------------- util/hw_stats/run_hw.py | 39 +++-------------- util/job_launching/common.py | 51 +++++++++++++++++++++++ util/tracer_nvbit/run_hw_trace.py | 38 +++-------------- 4 files changed, 69 insertions(+), 99 deletions(-) diff --git a/util/hw_stats/pm_cupti_tools/run_cupti.py b/util/hw_stats/pm_cupti_tools/run_cupti.py index b4829d0a0d..443e288fda 100755 --- a/util/hw_stats/pm_cupti_tools/run_cupti.py +++ b/util/hw_stats/pm_cupti_tools/run_cupti.py @@ -102,40 +102,15 @@ cuda_version, run_name, ) - if not os.path.exists(this_run_dir): - os.makedirs(this_run_dir) - - # link the data directory - try: - benchmark_data_dir = common.dir_option_test( - os.path.join(ddir, exe, "data"), "", this_directory - ) - if os.path.lexists(os.path.join(this_run_dir, "data")): - os.remove(os.path.join(this_run_dir, "data")) - os.symlink(benchmark_data_dir, os.path.join(this_run_dir, "data")) - except common.PathMissing: - pass - - all_data_link = os.path.join(this_run_dir, "data_dirs") - if os.path.lexists(all_data_link): - os.remove(all_data_link) - top_data_dir_path = common.dir_option_test(ddir, "", this_directory) - os.symlink(top_data_dir_path, all_data_link) + exec_path = common.prepare_run_dir( + this_run_dir, ddir, edir, exe, this_directory + ) + if exec_path is None: + continue if args is None: args = "" - # A benchmark listed in define-*.yml may simply not be built in this - # tree (suites differ by branch). Skip it instead of aborting the - # whole suite, which used to lose every app after the first gap. - try: - exec_path = common.file_option_test( - os.path.join(edir, exe), "", this_directory - ) - except common.PathMissing: - print(f"SKIP - no binary for {exe}") - continue - # Build the run script with CUPTI injection sh_contents = f"""#!/bin/bash @@ -154,10 +129,7 @@ {exec_path} {args} """ - run_script = os.path.join(this_run_dir, "run.sh") - with open(run_script, "w") as f: - f.write(sh_contents) - subprocess.call(["chmod", "u+x", run_script]) + run_script = common.write_run_script(this_run_dir, "run.sh", sh_contents) if not options.norun: saved_dir = os.getcwd() diff --git a/util/hw_stats/run_hw.py b/util/hw_stats/run_hw.py index 4db8335ed6..91439d60f8 100755 --- a/util/hw_stats/run_hw.py +++ b/util/hw_stats/run_hw.py @@ -190,39 +190,14 @@ cuda_version, run_name, ) - if not os.path.exists(this_run_dir): - os.makedirs(this_run_dir) - - # link the data directory - try: - benchmark_data_dir = common.dir_option_test( - os.path.join(ddir, exe, "data"), "", this_directory - ) - if os.path.lexists(os.path.join(this_run_dir, "data")): - os.remove(os.path.join(this_run_dir, "data")) - os.symlink(benchmark_data_dir, os.path.join(this_run_dir, "data")) - except common.PathMissing: - pass - - all_data_link = os.path.join(this_run_dir, "data_dirs") - if os.path.lexists(all_data_link): - os.remove(all_data_link) - top_data_dir_path = common.dir_option_test(ddir, "", this_directory) - os.symlink(top_data_dir_path, all_data_link) + exec_path = common.prepare_run_dir( + this_run_dir, ddir, edir, exe, this_directory + ) + if exec_path is None: + continue if args == None: args = "" - - # A benchmark listed in define-*.yml may simply not be built in this - # tree (suites differ by branch). Skip it instead of aborting the - # whole suite, which used to lose every app after the first gap. - try: - exec_path = common.file_option_test( - os.path.join(edir, exe), "", this_directory - ) - except common.PathMissing: - print("SKIP - no binary for {0}".format(exe)) - continue sh_contents = "" kernel_number = "" if "mlperf" in exec_path: @@ -430,9 +405,7 @@ ) ) - open(os.path.join(this_run_dir, "run.sh"), "w").write(sh_contents) - if subprocess.call(["chmod", "u+x", os.path.join(this_run_dir, "run.sh")]) != 0: - exit("Error chmod runfile") + common.write_run_script(this_run_dir, "run.sh", sh_contents) if not options.norun: saved_dir = os.getcwd() diff --git a/util/job_launching/common.py b/util/job_launching/common.py index cd0499f8fc..ee9602c95e 100644 --- a/util/job_launching/common.py +++ b/util/job_launching/common.py @@ -231,6 +231,57 @@ def dir_option_test(name, default, this_directory): return name +def prepare_run_dir(this_run_dir, ddir, edir, exe, this_directory): + """Set up one benchmark's run directory and resolve its binary. + + Creates the directory, links in the benchmark's own data dir (as "data") + and the suite-wide one (as "data_dirs"), then locates the executable. + + Returns the executable path, or None when the benchmark is not built in + this tree -- suites differ between branches, so callers skip it rather + than aborting every app listed after it. + """ + # Resolve the binary first: a benchmark that is not built should not leave + # an empty run directory behind. + try: + exec_path = file_option_test(os.path.join(edir, exe), "", this_directory) + except PathMissing: + print("SKIP - no binary for {0}".format(exe)) + return None + + if not os.path.exists(this_run_dir): + os.makedirs(this_run_dir) + + # link the data directory + try: + benchmark_data_dir = dir_option_test( + os.path.join(ddir, exe, "data"), "", this_directory + ) + if os.path.lexists(os.path.join(this_run_dir, "data")): + os.remove(os.path.join(this_run_dir, "data")) + os.symlink(benchmark_data_dir, os.path.join(this_run_dir, "data")) + except PathMissing: + pass + + all_data_link = os.path.join(this_run_dir, "data_dirs") + if os.path.lexists(all_data_link): + os.remove(all_data_link) + top_data_dir_path = dir_option_test(ddir, "", this_directory) + os.symlink(top_data_dir_path, all_data_link) + + return exec_path + + +def write_run_script(this_run_dir, name, contents): + """Write an executable run script into a run directory.""" + path = os.path.join(this_run_dir, name) + with open(path, "w") as f: + f.write(contents) + if subprocess.call(["chmod", "u+x", path]) != 0: + exit("Error chmod {0}".format(path)) + return path + + def parse_run_simulations_options(): parser = OptionParser() parser.add_option( diff --git a/util/tracer_nvbit/run_hw_trace.py b/util/tracer_nvbit/run_hw_trace.py index 68b1496834..eeb9e46477 100755 --- a/util/tracer_nvbit/run_hw_trace.py +++ b/util/tracer_nvbit/run_hw_trace.py @@ -105,40 +105,16 @@ ) ) this_trace_folder = os.path.join(this_run_dir, "traces") - if not os.path.exists(this_run_dir): - os.makedirs(this_run_dir) + exec_path = common.prepare_run_dir( + this_run_dir, ddir, edir, exe, this_directory + ) + if exec_path is None: + continue if not os.path.exists(this_trace_folder): os.makedirs(this_trace_folder) - # link the data directory - try: - benchmark_data_dir = common.dir_option_test( - os.path.join(ddir, exe, "data"), "", this_directory - ) - if os.path.lexists(os.path.join(this_run_dir, "data")): - os.remove(os.path.join(this_run_dir, "data")) - os.symlink(benchmark_data_dir, os.path.join(this_run_dir, "data")) - except common.PathMissing: - pass - - all_data_link = os.path.join(this_run_dir, "data_dirs") - if os.path.lexists(all_data_link): - os.remove(all_data_link) - top_data_dir_path = common.dir_option_test(ddir, "", this_directory) - os.symlink(top_data_dir_path, all_data_link) - if args == None: args = "" - # A benchmark listed in define-*.yml may simply not be built in this - # tree (suites differ by branch). Skip it instead of aborting the - # whole suite, which used to lose every app after the first gap. - try: - exec_path = common.file_option_test( - os.path.join(edir, exe), "", this_directory - ) - except common.PathMissing: - print("SKIP - no binary for {0}".format(exe)) - continue sh_contents = "set -e\n" if options.terminate_upon_limit: @@ -225,9 +201,7 @@ ) for path, content in [("run.sh", tracer_contents), ("run_spinlock_detection.sh", spinlock_contents)]: - open(os.path.join(this_run_dir, path), "w").write(content) - if subprocess.call(["chmod", "u+x", os.path.join(this_run_dir, path)]) != 0: - exit(f"Error chmod {path} runfile") + common.write_run_script(this_run_dir, path, content) if not options.norun: From b86f3d9b5b3a45a96e0ba1aa4cce105044629cee Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Sat, 24 Oct 2026 00:52:46 +0000 Subject: [PATCH 4/5] Download the NVBit build matching the host architecture install_nvbit.sh hardcoded nvbit-Linux-x86_64-1.8.tar.bz2, so on an aarch64 host (Grace-Hopper, Grace-Blackwell) it fetched an x86-64 tarball and the tracer could not be built at all. NVBit publishes an aarch64 tarball for the same releases, so select it from uname -m and fail loudly on an architecture that has no release. Also allow NVBIT_VERSION to pick a different release; v1.8.1 exists and is not reachable otherwise. Note that 1.8.1 ships a CMake-based layout rather than the per-tool Makefiles 1.8 used, so the sample tools under nvbit_release/tools are built differently there; the accel-sim tracer tool itself builds against nvbit_release/core and is unaffected. Co-Authored-By: Claude Opus 5 (1M context) --- util/tracer_nvbit/install_nvbit.sh | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/util/tracer_nvbit/install_nvbit.sh b/util/tracer_nvbit/install_nvbit.sh index 0b489a56ae..26fcde4413 100755 --- a/util/tracer_nvbit/install_nvbit.sh +++ b/util/tracer_nvbit/install_nvbit.sh @@ -1,8 +1,19 @@ #!/bin/bash export BASH_ROOT="$( cd "$( dirname "$BASH_SOURCE" )" && pwd )" +# NVBit ships a separate tarball per host architecture; pick the one matching +# this machine rather than assuming x86_64, so the tracer builds on aarch64 +# (Grace-Hopper, Grace-Blackwell) too. +NVBIT_VERSION=${NVBIT_VERSION:-1.8} +NVBIT_ARCH=$(uname -m) +case "$NVBIT_ARCH" in + x86_64|aarch64) ;; + *) echo "No NVBit release for $NVBIT_ARCH" >&2; exit 1 ;; +esac +NVBIT_TARBALL="nvbit-Linux-${NVBIT_ARCH}-${NVBIT_VERSION}.tar.bz2" + rm -rf $BASH_ROOT/nvbit_release mkdir -p "$BASH_ROOT/nvbit_release" -wget https://github.com/NVlabs/NVBit/releases/download/v1.8/nvbit-Linux-x86_64-1.8.tar.bz2 -tar -xf nvbit-Linux-x86_64-1.8.tar.bz2 -C "$BASH_ROOT/nvbit_release" --strip-components=1 -rm nvbit-Linux-x86_64-1.8.tar.bz2 +wget "https://github.com/NVlabs/NVBit/releases/download/v${NVBIT_VERSION}/${NVBIT_TARBALL}" +tar -xf "$NVBIT_TARBALL" -C "$BASH_ROOT/nvbit_release" --strip-components=1 +rm "$NVBIT_TARBALL" From 3da3dfdbceba3a638e5a279c77fab2ec944852cf Mon Sep 17 00:00:00 2001 From: Tim Rogers Date: Mon, 26 Oct 2026 23:38:03 +0000 Subject: [PATCH 5/5] Leave kmeans-rodinia-2.0-ft disabled for now Re-enabling it here was premature: it depends on the CUDA 13 texture-object port in accel-sim/gpu-app-collection#91, which has not merged. CI clones gpu-app-collection's default branch, so the app is not built there -- run_hw_trace.py correctly reported "SKIP - no binary for kmeans-rodinia-2.0-ft" and then run_simulations.py failed looking for traces that were never generated. SASS-Simulation has a second dependency besides #91: it replays a shared pre-collected trace corpus that contains no kmeans traces, so that corpus needs regenerating before this app can be turned back on. Co-Authored-By: Claude Opus 5 (1M context) --- util/job_launching/apps/define-all-apps.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/util/job_launching/apps/define-all-apps.yml b/util/job_launching/apps/define-all-apps.yml index 3f5b6e2e22..d0cdb62d90 100644 --- a/util/job_launching/apps/define-all-apps.yml +++ b/util/job_launching/apps/define-all-apps.yml @@ -26,11 +26,10 @@ rodinia_2.0-ft: - heartwall-rodinia-2.0-ft: - args: ./data/test.avi 1 ./data/result-1.txt accel-sim-mem: 1G - # The legacy texture-reference API it used was removed in CUDA 12; the - # kernel now uses texture objects and passes its gold check again. - - kmeans-rodinia-2.0-ft: - - args: -i ./data/400.txt -g data/400-result.txt -o - accel-sim-mem: 1G + # Uses legacy texture cache instructions, it is unclear if it still makes sense to support +# - kmeans-rodinia-2.0-ft: +# - args: -i ./data/400.txt -g data/400-result.txt -o +# accel-sim-mem: 1G - lud-rodinia-2.0-ft: - args: -v -b -i ./data/64.dat accel-sim-mem: 1G