Repository navigation
Conversation
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 <exe>", 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) <noreply@anthropic.com>
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) <noreply@anthropic.com>
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) <noreply@anthropic.com>
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) <noreply@anthropic.com>
dev rewrote run_hw_trace.py for multi-GPU worker pools (#570) and added its own local write_script() helper. Resolved by keeping dev's structure and pointing both of its script-writing call sites at common.write_run_script, so the deduplication in this branch still applies in its new location. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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) <noreply@anthropic.com>
|
🤖 CI Runs failed on 2f1e87d — run. AI analysis (Qwopus3.8-27B-Flash-MTP-Q8_0): CI Failure AnalysisCommit: 2f1e87d Merge branch 'dev' into b300-hw-run-fixes SummaryThe SASS-Simulation-Docker job failed immediately after queuing Slurm jobs because the Failed job(s)
Root causeThe literal error in This occurred immediately after the log line: The The same "Cannot find traces" error appears in The recent commits indicate that Suggested fix
Automated analysis; check it against the log before acting on it. |
|
🤖 CI Runs failed on 2f1e87d — run. AI analysis (Qwopus3.8-27B-Flash-MTP-Q8_0): CI Failure AnalysisCommit: 2f1e87d Merge branch 'dev' into b300-hw-run-fixes SummaryThe SASS-Simulation-Docker job failed because a Slurm task exited with code 1 immediately after the simulation runner reported that it could not find traces for Failed job(s)
Root causeThe literal error that made the failing step exit non-zero is: srun: error: tgrogers-bigram-08: task 0: Exited with exit code 1 This appears in Cannot find traces in any of the paths: ['./hw_run/rodinia_2.0-ft/9.1/kmeans-rodinia-2.0-ft/_i___data_400_txt__g_data_400_result_txt__o/traces'] The simulation runner ( The same “Cannot find traces” message also appears in:
The recent commits ( Suggested fix
Automated analysis; check it against the log before acting on it. |
Fixes found while bringing the hardware-run and tracing flows up on a GB300 (Grace-Blackwell,
sm_103, aarch64, CUDA 13.2). Companion to accel-sim/gpu-app-collection#91, which does the application-side CUDA 13 port, and accel-sim/gpgpu-sim_distribution#150, which fixes the simulator build on the same machine.Nothing here is Blackwell-specific except the NVBit tarball selection — the rest are bugs that simply happen to bite hardest when the app suite and the framework disagree about what is built.
A missing binary no longer aborts a whole suite
run_hw.pyresolved each benchmark's executable withcommon.file_option_test(...), which raises on a missing path. Nothing caught it, so the first unbuilt app in a suite ended the run and every app listed after it was silently never launched. This reads as "the suite failed" when in fact most of it was never attempted — four suites looked broken here for exactly this reason.The binary is now resolved up front; a missing one prints
SKIP - no binary for <exe>and moves to the next app. Suite membership legitimately differs between branches and toolkits, so skipping is the right behaviour rather than a workaround.The same fix is applied to
run_hw_trace.pyandpm_cupti_tools/run_cupti.py, which had copies of the same code with the same flaw.Deduplicate the run-directory setup
The three runner scripts each carried their own copy of: make the run directory, link the benchmark's
datadir, link the suite-widedata_dirs, resolve the binary, writerun.sh,chmod u+x. The copies had already drifted (onlyrun_hw.pychecked thechmodexit status), which is how one fix in one script would have left the other two broken.Two helpers in
util/job_launching/common.py:prepare_run_dir(...)— directory, both data links, binary resolution; returns the executable path, orNonewhen the app is not builtwrite_run_script(...)— write andchmod, with a consistent errorNet ~130 lines of duplication removed. Ordering changed in one deliberate way: the binary is resolved before the directory is created, so a skipped app no longer leaves an empty run directory behind.
NVBit tarball matches the host architecture
install_nvbit.shhardcodednvbit-Linux-x86_64-1.8.tar.bz2, so on aarch64 it downloaded an x86 build and the tracer failed to link. It now picks the tarball fromuname -m, acceptsx86_64andaarch64, errors clearly on anything else, and takesNVBIT_VERSIONfrom the environment so bumping the version no longer means editing three string literals.run.shuses the interpreter that launched itThe nsys post-processing step shelled out to bare
python, which does not exist on a stock Ubuntu 24.04 (onlypython3). Nowsys.executable, so the generated script uses whatever interpreter ranrun_hw.py.App list corrections
define-all-apps.yml, all verified against a full build of gpu-app-collection#91 on CUDA 13.2:proxy-apps-doe—exec_dirpointed at$GPUAPPS_ROOT/src/cuda/proxy-apps-doe/(a source tree) instead of the release bin dir, andcns/cns_allcarried a path prefix the installed binary does not have. Neither app in this suite could ever have launched.kmeans-rodinia-2.0-ft— I re-enabled this and then backed it out; it stays disabled. See below.Deepbench_nvidia_normal—conv_benchandrnn_benchcommented out. They use cuDNN APIs removed in cuDNN 9 and are not built, so listing them only produced skips.gemm_benchis unaffected and stays.kmeans stays disabled
My first push re-enabled
kmeans-rodinia-2.0-ft, on the grounds that gpu-app-collection#91 replaces its legacy texture-reference code with texture objects. That was premature and it broke CI, so it is reverted here.Two things gate it, and #91 is only the first:
SKIP - no binary for kmeans-rodinia-2.0-ft— butrun_simulations.pythen failed looking for traces that were never generated. The runners tolerate a missing binary; the simulation launcher does not tolerate a missing trace, which is reasonable since that usually is a real error.SASS-Simulationreplays a shared pre-collected trace corpus (.../for-sharing/accel-sim/QV100/hw_run/traces/) that contains no kmeans traces. Even once Some issues with Pascal and probably a global bug #91 merges, that corpus needs regenerating before this app can come back.Worth a follow-up issue rather than a change here.
Testing
On a GB300, CUDA 13.2, driver 610.43.02, against the gpu-app-collection#91 build (472 binaries):
SKIPlines, which is the real check on theproxy-apps-doeandkmeansentries above.run_cupti.pyandrun_hw_trace.pygenerate their run directories and scripts correctly.install_nvbit.shpassesbash -n, the YAML parses.Not tested here: actually executing a trace. NVBit 1.8 refuses to attach to this machine's 610.43.02 driver (it caps at 595.xx), so the tracer path is verified only as far as script and run-directory generation. The architecture fix is what lets
install_nvbit.shfetch the right tarball on aarch64 at all; whether a newer NVBit then attaches is a separate question. Profiled (--profile) runs are likewise untested, as this host hasNVreg_RestrictProfilingToAdminUsersset.Merged with
devdevmoved while this was in flight. #570 rewroterun_hw_trace.pyaround multi-GPU worker pools and, independently, added its own localwrite_script()helper with the same body as thecommon.write_run_scripthere. Resolved by keeping dev's structure wholesale and pointing both of its script-writing call sites at the shared helper, so the deduplication still applies in its new location and there is only one copy again.prepare_run_dirand the app-list changes merged cleanly.x86 behaviour is unchanged throughout: the architecture branch picks the same tarball it always did, and the refactor is behaviour-preserving apart from the skip and the empty-directory ordering.
🤖 Generated with Claude Code