Files
project_6/cccl_upstream/ci/compile_time
muh-bot 2a7ca101d7 feat(cccl): integrate missing CCCL directories — python/, ci/, .agent/, docs/, test/
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
2026-08-07 02:34:33 +00:00
..

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/current and compile_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.