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
5
cccl_upstream/docs/cudax/stf/images/dag-sections-0.dot
Normal file
@@ -0,0 +1,5 @@
|
||||
digraph {
|
||||
"NODE_23" [style="filled" fillcolor="red" label="task fence"]
|
||||
"NODE_3" -> "NODE_23"
|
||||
"NODE_3" [style="filled" fillcolor="white" label="foo"]
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/dag-sections-0.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
14
cccl_upstream/docs/cudax/stf/images/dag-sections-1.dot
Normal file
@@ -0,0 +1,14 @@
|
||||
digraph {
|
||||
"NODE_23" [style="filled" fillcolor="red" label="task fence"]
|
||||
subgraph cluster_section_1 {
|
||||
color=black;
|
||||
style=dashed
|
||||
label="foo"
|
||||
"NODE_13"
|
||||
"NODE_3"
|
||||
} // end subgraph cluster_section_1
|
||||
"NODE_13" -> "NODE_23"
|
||||
"NODE_3" -> "NODE_13"
|
||||
"NODE_13" [style="filled" fillcolor="white" label="bar"]
|
||||
"NODE_3" [style="filled" fillcolor="white" label="bar"]
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/dag-sections-1.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
36
cccl_upstream/docs/cudax/stf/images/dag-sections-2.dot
Normal file
@@ -0,0 +1,36 @@
|
||||
digraph {
|
||||
"NODE_23" [style="filled" fillcolor="red" label="task fence"]
|
||||
subgraph cluster_section_1 {
|
||||
subgraph cluster_section_2 {
|
||||
color=black;
|
||||
style=dashed
|
||||
label="bar"
|
||||
"NODE_9"
|
||||
"NODE_5"
|
||||
"NODE_3"
|
||||
} // end subgraph cluster_section_2
|
||||
subgraph cluster_section_5 {
|
||||
color=black;
|
||||
style=dashed
|
||||
label="bar"
|
||||
"NODE_19"
|
||||
"NODE_15"
|
||||
"NODE_13"
|
||||
} // end subgraph cluster_section_5
|
||||
color=black;
|
||||
style=dashed
|
||||
label="foo"
|
||||
} // end subgraph cluster_section_1
|
||||
"NODE_19" -> "NODE_23"
|
||||
"NODE_3" -> "NODE_5"
|
||||
"NODE_5" -> "NODE_9"
|
||||
"NODE_15" -> "NODE_19"
|
||||
"NODE_9" -> "NODE_13"
|
||||
"NODE_13" -> "NODE_15"
|
||||
"NODE_19" [style="filled" fillcolor="white" label="baz"]
|
||||
"NODE_15" [style="filled" fillcolor="white" label="baz"]
|
||||
"NODE_13" [style="filled" fillcolor="white" label="t1\nA(read)(0) \nB(rw)(0) "]
|
||||
"NODE_9" [style="filled" fillcolor="white" label="baz"]
|
||||
"NODE_5" [style="filled" fillcolor="white" label="baz"]
|
||||
"NODE_3" [style="filled" fillcolor="white" label="t1\nA(read)(0) \nB(rw)(0) "]
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/dag-sections-2.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
69
cccl_upstream/docs/cudax/stf/images/dag-sections.dot
Normal file
@@ -0,0 +1,69 @@
|
||||
digraph {
|
||||
"NODE_23" [style="filled" fillcolor="red" label="task fence"]
|
||||
subgraph cluster_section_1 {
|
||||
subgraph cluster_section_2 {
|
||||
subgraph cluster_section_3 {
|
||||
color=black;
|
||||
style=dashed
|
||||
label="baz"
|
||||
"NODE_7"
|
||||
"NODE_5"
|
||||
} // end subgraph cluster_section_3
|
||||
subgraph cluster_section_4 {
|
||||
color=black;
|
||||
style=dashed
|
||||
label="baz"
|
||||
"NODE_11"
|
||||
"NODE_9"
|
||||
} // end subgraph cluster_section_4
|
||||
color=black;
|
||||
style=dashed
|
||||
label="bar"
|
||||
"NODE_3"
|
||||
} // end subgraph cluster_section_2
|
||||
subgraph cluster_section_5 {
|
||||
subgraph cluster_section_6 {
|
||||
color=black;
|
||||
style=dashed
|
||||
label="baz"
|
||||
"NODE_17"
|
||||
"NODE_15"
|
||||
} // end subgraph cluster_section_6
|
||||
subgraph cluster_section_7 {
|
||||
color=black;
|
||||
style=dashed
|
||||
label="baz"
|
||||
"NODE_21"
|
||||
"NODE_19"
|
||||
} // end subgraph cluster_section_7
|
||||
color=black;
|
||||
style=dashed
|
||||
label="bar"
|
||||
"NODE_13"
|
||||
} // end subgraph cluster_section_5
|
||||
color=black;
|
||||
style=dashed
|
||||
label="foo"
|
||||
} // end subgraph cluster_section_1
|
||||
"NODE_15" -> "NODE_17"
|
||||
"NODE_9" -> "NODE_11"
|
||||
"NODE_11" -> "NODE_15"
|
||||
"NODE_13" -> "NODE_17"
|
||||
"NODE_19" -> "NODE_21"
|
||||
"NODE_11" -> "NODE_13"
|
||||
"NODE_7" -> "NODE_9"
|
||||
"NODE_5" -> "NODE_7"
|
||||
"NODE_17" -> "NODE_19"
|
||||
"NODE_3" -> "NODE_7"
|
||||
"NODE_21" -> "NODE_23"
|
||||
"NODE_21" [style="filled" fillcolor="white" label="t3\nA(rw)(0) \nB(read)(0) \nC(read)(0) "]
|
||||
"NODE_19" [style="filled" fillcolor="white" label="t2\nA(read)(0) \nC(rw)(0) "]
|
||||
"NODE_17" [style="filled" fillcolor="white" label="t3\nA(rw)(0) \nB(read)(0) \nC(read)(0) "]
|
||||
"NODE_15" [style="filled" fillcolor="white" label="t2\nA(read)(0) \nC(rw)(0) "]
|
||||
"NODE_13" [style="filled" fillcolor="white" label="t1\nA(read)(0) \nB(rw)(0) "]
|
||||
"NODE_11" [style="filled" fillcolor="white" label="t3\nA(rw)(0) \nB(read)(0) \nC(read)(0) "]
|
||||
"NODE_9" [style="filled" fillcolor="white" label="t2\nA(read)(0) \nC(rw)(0) "]
|
||||
"NODE_7" [style="filled" fillcolor="white" label="t3\nA(rw)(0) \nB(read)(0) \nC(read)(0) "]
|
||||
"NODE_5" [style="filled" fillcolor="white" label="t2\nA(read)(0) \nC(rw)(0) "]
|
||||
"NODE_3" [style="filled" fillcolor="white" label="t1\nA(read)(0) \nB(rw)(0) "]
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/dag-sections.png
Normal file
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
cccl_upstream/docs/cudax/stf/images/dot-output-axpy-events.png
Normal file
|
After Width: | Height: | Size: 132 KiB |
BIN
cccl_upstream/docs/cudax/stf/images/dot-output-axpy.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
cccl_upstream/docs/cudax/stf/images/dot-output-heat.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
10
cccl_upstream/docs/cudax/stf/images/graph_01.dot
Normal file
@@ -0,0 +1,10 @@
|
||||
digraph {
|
||||
T_1 [label="T1\nX(rw)"];
|
||||
T_2 [label="T2\nX(read)\nY(rw)"];
|
||||
T_3 [label="T3\nX(read)\nZ(rw)"];
|
||||
T_4 [label="T4\nY(read)\nZ(rw)"];
|
||||
T_1 -> T_2;
|
||||
T_1 -> T_3;
|
||||
T_2 -> T_4;
|
||||
T_3 -> T_4;
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/graph_01.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
16
cccl_upstream/docs/cudax/stf/images/graph_02.dot
Normal file
@@ -0,0 +1,16 @@
|
||||
digraph {
|
||||
subgraph cluster_0 {
|
||||
label="device 0";
|
||||
T_1 [label="T_1(A^W)"];
|
||||
T_2 [label="T_2(A^R, B^W)"];
|
||||
}
|
||||
subgraph cluster_1 {
|
||||
label="device 1";
|
||||
T_3 [label="T_3(A^R, C^W)"];
|
||||
T_4 [label="T_4(B^R, C^R, D^W)"];
|
||||
}
|
||||
T_1 -> T_2 [label="A"];
|
||||
T_1 -> T_3 [label="A"];
|
||||
T_2 -> T_4 [label="B"];
|
||||
T_3 -> T_4 [label ="C"];
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/graph_02.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
cccl_upstream/docs/cudax/stf/images/ncu-ui.png
Normal file
|
After Width: | Height: | Size: 171 KiB |
26
cccl_upstream/docs/cudax/stf/images/task-sequence-user.dot
Normal file
@@ -0,0 +1,26 @@
|
||||
digraph {
|
||||
compound=true;
|
||||
subgraph cluster_0 {
|
||||
label="T1";
|
||||
K1 [label="K1"];
|
||||
K2 [label="K2"];
|
||||
}
|
||||
subgraph cluster_1 {
|
||||
label="T2";
|
||||
K3 [label="K3"];
|
||||
}
|
||||
subgraph cluster_2 {
|
||||
label="T3";
|
||||
K4 [label="K4"];
|
||||
}
|
||||
subgraph cluster_3 {
|
||||
label="T4";
|
||||
cb [label="callback"];
|
||||
}
|
||||
|
||||
K1 -> K2;
|
||||
K2 -> K3 [ltail=cluster_0,lhead=cluster_1,minlen=2];
|
||||
K2 -> K4 [ltail=cluster_0,lhead=cluster_2,minlen=2];
|
||||
K3 -> cb [ltail=cluster_1,lhead=cluster_3,minlen=2];
|
||||
K4 -> cb [ltail=cluster_2,lhead=cluster_3,minlen=2];
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/task-sequence-user.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
68
cccl_upstream/docs/cudax/stf/images/task-sequence.dot
Normal file
@@ -0,0 +1,68 @@
|
||||
digraph {
|
||||
compound=true;
|
||||
subgraph cluster_00 {
|
||||
label="";
|
||||
AA [label="Allocate A"];
|
||||
}
|
||||
|
||||
subgraph cluster_01 {
|
||||
label="";
|
||||
CA [label="Copy A H->D"];
|
||||
}
|
||||
|
||||
subgraph cluster_10 {
|
||||
label="";
|
||||
AB [label="Allocate B"];
|
||||
}
|
||||
|
||||
subgraph cluster_11 {
|
||||
label="";
|
||||
CB [label="Copy B H->D"];
|
||||
}
|
||||
|
||||
subgraph cluster_0 {
|
||||
label="T1";
|
||||
K1 [label="K1"];
|
||||
K2 [label="K2"];
|
||||
}
|
||||
|
||||
CA -> K1 [ltail=cluster_01,lhead=cluster_0,minlen=2];
|
||||
AA -> CA [ltail=cluster_00,lhead=cluster_01,minlen=2];
|
||||
|
||||
CB -> K1 [ltail=cluster_11,lhead=cluster_0,minlen=2];
|
||||
AB -> CB [ltail=cluster_10,lhead=cluster_11,minlen=2];
|
||||
|
||||
subgraph cluster_1 {
|
||||
label="T2";
|
||||
K3 [label="K3"];
|
||||
}
|
||||
subgraph cluster_2 {
|
||||
label="T3";
|
||||
K4 [label="K4"];
|
||||
}
|
||||
|
||||
K1 -> K2;
|
||||
K2 -> K3 [ltail=cluster_0,lhead=cluster_1,minlen=2];
|
||||
K2 -> K4 [ltail=cluster_0,lhead=cluster_2,minlen=2];
|
||||
|
||||
subgraph cluster_02 {
|
||||
label="";
|
||||
CA2 [label="Copy A D->A"];
|
||||
}
|
||||
|
||||
subgraph cluster_12 {
|
||||
label="";
|
||||
CB2 [label="Copy B D->A"];
|
||||
}
|
||||
|
||||
subgraph cluster_3 {
|
||||
label="T4";
|
||||
cb [label="callback"];
|
||||
}
|
||||
|
||||
K3 -> CA2 [ltail=cluster_1,lhead=cluster_02,minlen=2];
|
||||
K4 -> CB2 [ltail=cluster_2,lhead=cluster_12,minlen=2];
|
||||
|
||||
CA2 -> cb [ltail=cluster_02,lhead=cluster_3,minlen=2]
|
||||
CB2 -> cb [ltail=cluster_12,lhead=cluster_3,minlen=2]
|
||||
}
|
||||
BIN
cccl_upstream/docs/cudax/stf/images/task-sequence.png
Normal file
|
After Width: | Height: | Size: 49 KiB |