Sparse-checkout from NVIDIA/cccl main branch to complete cccl_upstream: Added: - python/cuda_cccl/ (226 files) — Python bindings for device-level algorithms Critical for muh toolchain: cuda.compute.reduce_into, scan, radix_sort, etc. Includes 204 .py files with full test coverage for all 27 algorithms - ci/ (163 files) — Build/test infrastructure build_cub.sh, test_cub.sh, build_and_test_targets.sh, matrix.yaml Directly maps to our [INFRA-CI] and [INFRA-BUILD] items - .agent/skills/ (7 files) — NVIDIA's own agent skills for CCCL cccl-style/SKILL.md, cccl-test/SKILL.md, sass-diff/SKILL.md - docs/ (491 files) — Official CCCL documentation CI references, CMake guides, Python compute docs, libcudacxx PTX docs - test/ (12 files) — Top-level integration tests (cuda_smoke, stdpar) - Root configs: .clang-format, .clang-tidy, CONTRIBUTING.md, pyproject.toml - CLAUDE.md symlink → AGENTS.md (NVIDIA's standard) cccl_upstream now mirrors full NVIDIA/cccl structure: Before: 42M (cub + thrust + libcudacxx + cudax + c + examples + benchmarks) After: 53M (+python +ci +docs +.agent +test +configs) This completes the CCCL base needed for: - [muh-bench] items: ci/util/build_and_test_targets.sh for targeted builds - [CCCL-verify] items: python/cuda_cccl/tests/ as reference implementations - [CCCL-test] items: ci/test_cub.sh, ci/test_thrust.sh - Agent workflow: .agent/skills/ for consistent style and test patterns
Compile-time benchmark CI contracts
The compile-time benchmark CI flow is configured from ci/matrix.yaml under
compile_time.pull_request.
Matrix schema
Each config is a GitHub Actions matrix entry:
compile_time:
pull_request:
- id: public-headers-gcc13
name: Public headers compile-time bench
gpu: rtx2080
launch_args: "--cuda 13.3 --host gcc13"
baseline_ref: origin/main
preset: all-dev
targets:
- cub.headers.base
args: "-arch native"
slices:
- id: total-compilation
title: TU total compilation
filter: total-compilation
timing: inclusive
sort: total
top: 15
threshold: 0.001
Required config fields are id, name, gpu, launch_args,
baseline_ref, preset, targets, and slices. args, comment, and
artifact_retention_days are optional.
Required slice fields are id, title, filter, timing, sort, top, and
threshold. Slice children may be used to group nested report sections in the
PR comment. Empty slice sections are omitted recursively by the renderer unless
the summary manifest carries warnings for that slice.
ci/compile_time/parse_matrix.py ci/matrix.yaml --workflow pull_request emits
the GitHub Actions matrix JSON. Missing or empty compile_time.pull_request
emits {"include":[]}.
In baseline comparisons, threshold is measured against the total selected
inclusive/exclusive impact across all matched traces. The per-side reports still
use sort for their own top-N ordering; comparison worse/better tables always
rank by total impact so a change repeated across many traces is not hidden by a
larger single-trace movement.
Report contract
summarize_events.py --slices <json> writes per-slice CSVs under
event_reports/<slice-id>/ and writes a normalized event_reports/summary.json
manifest. The manifest is the renderer contract; CSVs are human artifacts.
Configured slices that match no events, have no matching trace files, or have no
comparable event keys record warnings in the manifest so reporting failures are
not presented as ordinary no-regression results.
In comparison mode, the wrapper preserves:
- current raw traces:
compile_time/raw_traces - baseline raw traces:
compile_time/baseline_raw_traces - Perfetto copies:
compile_time/perfetto_traces/currentandcompile_time/perfetto_traces/baseline
PR comments
render_pr_comment.py reads summary.json, config metadata, and an artifacts
URL, then writes the sticky PR comment body. Regressions and improvements are
rendered in separate <details> blocks and are never mixed in one table.
Warnings are rendered separately and keep their slice visible even when there
are no regression/improvement rows.
The reusable workflow uses the sticky-comment header
compile-time-bench-<config-id> with hide_and_recreate: true, so previous
comments for the same config are archived as outdated.