Repository navigation
docs(hardware): session #2, the sanitizer cross-check on an A10G - #165
Merged
Merged
Conversation
The first external check on this project's accuracy claims. Everything else here is measured against a corpus the project wrote for itself; this is the same injected bugs run under NVIDIA's own compute-sanitizer. 36 mutants across barrier, lanemask_scan and scoped_atomic_load_store on a rented A10G (CC 8.6, driver 595.71.05, CUDA 13.2, cuda-oxide b0f961df). RC003 is invisible to the dynamic checker: seven mutslice mutants, each handing one &mut [T] to every thread, ran clean under synccheck. This analysis denies all seven from syntax alone. 100 percent against 0 on the same labeled bugs. Three of nine wrapbar mutants passed on hardware, no hang and nothing reported -- the accidental pass this project has described since 0.1.0, now measured on a part rather than argued. shrinkmask is invisible to both, which is the first evidence that the published expected-recall-0 is a property of the class and not a gap in this engine. And the one that is not in this tool's favour: synccheck flagged two delbar mutants that this analysis cannot see at all. A deleted barrier is a data race, outside the decidable slice by design. The two approaches are complementary, and the README now says so with numbers. Two corrections fell out of running it. session-2.md named barrier_sync_test as an example directory when it is a kernel inside barrier; and atomics is no longer probeable for the old finding, because upstream rewrote it at this pin to take *mut u32 through DeviceAtomicU32::from_ptr instead of transmuting a shared slice. Signed-off-by: Vyncint Ng <chivy.nguyen@manabie.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #153. The first external check on this project's accuracy claims — every other number here is measured against a corpus the project wrote for itself.
36 labeled mutants across
barrier,lanemask_scanandscoped_atomic_load_store, on a rented g5.xlarge (NVIDIA A10G, CC 8.6, driver 595.71.05, CUDA 13.2), cuda-oxideb0f961dfon nightly-2026-08-28. Same mutation operators as the static corpus, applied to whole upstream examples so the kernels actually launch, each run undercompute-sanitizer --tool synccheck.wrapbar--strictwrapcol--strictshrinkmaskmutslicedelbarFour results, and one is not in this tool's favour
RC003 is invisible to the dynamic checker. Seven
mutslicemutants — one&mut [T]handed to every thread — ran to completion with nothing reported. reconverge denies every one from syntax alone. That is the sharpest split here: 100% against 0% on the same labeled bugs.Three of nine
wrapbarmutants passed on hardware, no hang and nothing reported. This is the accidental pass the README has described since 0.1.0, measured rather than argued: a dynamic tool sees the launch you ran, not the launches your code allows.shrinkmaskis invisible to both. Zero static detection — published as expected recall 0 — and zero synccheck reports. This is the first evidence that the boundary belongs to the bug class rather than to this engine.delbaris where the vendor's tool wins. synccheck flagged two deleted-barrier mutants this analysis cannot see at all; a deleted barrier is a data race and outside the decidable slice by design. The README now says the two approaches are complementary rather than ranked, with the numbers behind it.Two corrections fell out of running it
session-2.mdlistedbarrier_sync_testas an example to probe. It is a kernel inside thebarrierexample; the directory does not exist. Fixed, with the reason.atomicswas not probed and no longer can be for the old finding: upstream rewrote it at this pin to take*mut u32throughDeviceAtomicU32::from_ptrinstead of transmuting a shared slice, which is the shape that finding keyed on. (That rewrite is also why the conformance RC001/RC002 count dropped from 8 to 4 in chore(pins): move the conformance pin to cuda-oxide b0f961df #161.)How it ran
Unattended from EC2 user-data, because
ssm:StartSessionis denied to this account's role andgpu-sghas no inbound rules. Three earlier attempts died mid-probe with nothing published — that is cloud-init's own service timing out and systemd killing its cgroup, which no trap inside it survives. The work is detached withsetsidin the run that produced this, and publishes after every example so a later death cannot erase an earlier result.