Repository navigation
Conversation
|
partially fixes #3793 |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files
|
|
The documentation preview is ready to be viewed at https://preview.awkward-array.org/PR4481/ |
|
CUDA performance update (AI-assisted summary): Della A100 run 16325085, candidate
For jagged The error-context change avoids eager GPU value formatting and buffer retention on successful calls, capturing host-only array metadata and bounded selectors for deferred diagnostics. Instrumented tracing showed the RegularArray range wrapper spike falling from approximately 1.8 ms to 0.27 ms; these diagnostic durations are perturbed and are not benchmark latencies. The public numbers above compare the whole candidate against the historical baseline, not an isolated context-change A/B test. Latest head Local validation of the latest tuning: 1,363 focused tests passed, with Ruff, Pylint and whitespace checks passing. This is separate from GPU performance validation. Remaining work is to collect the direct comparison before deciding whether the latest tuning improves latency. |
|
Direct follow-up comparison from Della run 16331686 (AI-assisted summary): Compared Public parity passed in all three comparisons, including expected bounds errors, with unchanged error stages between these revisions.
Other workloads shifted similarly. These results do not establish a jagged-specific public latency improvement; the follow-up is approximately latency-neutral at this measurement resolution. Its concrete changes remain fewer large-path scratch allocations (four → two), one fewer buffer binding, and reuse of reduction workspace sizing. Recommendation: retain it for reduced allocation/setup overhead, without claiming a measured public speedup. This result is separate from the substantial whole-candidate improvements against the historical baseline reported above; it measures only the latest follow-up. |
|
Coverage/readiness follow-up (AI-assisted investigation), pushed as The 45.76% patch report was substantially an attribution problem, not evidence that all those callback paths were untested. The host contract tests AST-load actual implementation definitions to execute CUDA operator bodies with host substitutes. Their namespaces were named after the test module (or lacked an Awkward module name), so The tests now read the installed implementation files, compile with those actual filenames, and identify the corresponding Awkward module namespaces. No coverage threshold was lowered and no production lines were excluded. I also added genuine missing coverage: large-path advanced-index structural errors beyond a chunk boundary, canonical case comparisons through the actual production wrapper dispatch into prepared helpers, descriptor rebinding/clearing, invalid tuning arguments, and low-level/custom diagnostic-context fallbacks. Validation: 1,701 focused tests passed under
All executable function/class-body lines in those three helpers were covered by host execution. GPU CI imports/initializes these modules normally. Host substitutes remain distinct from actual CUDA JIT/execution validation; the previous head Merge readiness: wait for the refreshed checks/coverage result and independent maintainer review. The existing Della public parity/performance results remain applicable to the unchanged implementation. |
ListArray CUDA validity checks currently defer errors even though callers need an immediate answer, and ten slicing/padding/validity kernels still use RawKernel dispatch. Migrate those kernels to cuda.compute while preserving the canonical error, partial-write and output-buffer contracts.
Implementation
The awkward-cpp version and root dependency pin remain unchanged.
Della results
On an A100, run 16325085 compared
587eb8e8aagainst historical baseline7c403344b. Timings are warmed, unprofiled completed public operations: input/reference preparation and JIT warmup are excluded; stream completion and deferred-error draining are included.For jagged
4096:8, completed latency was 2.917 ms → 1.780 ms. All candidate public cases passed. Overall comparison parity is false because the historical baseline misses three expected jagged bounds errors; the candidate raises them. These numbers measure the complete candidate against that baseline and do not isolate individual changes or changes inherited from main.A separate direct comparison in run 16331686 tested
587eb8e8aagainst current head0937802bathree times on one GPU allocation, alternating execution order. Public parity passed in all three comparisons, including bounds errors with unchanged error stages. Jagged completed-time changes ranged from −1.5% to +0.6% (32:8), −1.8% to −0.1% (4096:8), and −0.9% to +0.8% (32:4096). Other workloads shifted similarly: the final scratch/workspace tuning is approximately latency-neutral, with no established jagged-specific public speedup.Separate instrumented profiles identified eager error-context formatting as a major host cost. After metadata capture, the RegularArray range wrapper's diagnostic duration fell from approximately 1.8 ms to 0.27 ms. Trace/cProfile measurements perturb execution and are not benchmark latencies or pure device execution times. Individual compute kernels, particularly jagged expansion, can remain slower than their historical RawKernel counterparts despite the completed public-operation gains.
Validation and remaining limits
Related work: #4189 and #4461; jagged index-equals-length behavior overlaps #4449; CPU offset widening overlaps #4471, #4474 and #4301. #4483 and #4484 share the returned-KernelError generated-test adapter; combine their kernel-name sets when integrating. The standalone benchmark follow-up is ianna/awkward-matrix#2.
AI assistance was used to implement, review, test and document this contribution, including the benchmark summaries.