Skip to content

Commit fb2b9bc

Browse files
committed
fix(cust): handle CUDA 13.3 reserved graph node type
1 parent 30fc174 commit fb2b9bc

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

crates/cust/build.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ fn main() {
1010
if driver_version >= 12030 {
1111
println!("cargo::rustc-cfg=conditional_node");
1212
}
13+
// CUDA 13.3 headers add a reserved graph node discriminant.
14+
println!("cargo::rustc-check-cfg=cfg(reserved_graph_node_16)");
15+
if driver_version >= 13030 {
16+
println!("cargo::rustc-cfg=reserved_graph_node_16");
17+
}
1318
// In CUDA 13.0 several pairs/trios of functions were merged:
1419
// ```
1520
// CUresult cuMemAdvise(CUdeviceptr devPtr, size_t count, CUmem_advise advice, CUdevice device);

crates/cust/src/graph.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@ pub enum GraphNodeType {
175175
/// Conditional node.
176176
#[cfg(conditional_node)]
177177
Conditional,
178+
/// Reserved by CUDA; this does not represent a supported graph operation.
179+
#[cfg(reserved_graph_node_16)]
180+
Reserved16,
178181
}
179182

180183
impl GraphNodeType {
@@ -197,6 +200,8 @@ impl GraphNodeType {
197200
CU_GRAPH_NODE_TYPE_BATCH_MEM_OP => GraphNodeType::BatchMemoryOperation,
198201
#[cfg(conditional_node)]
199202
CU_GRAPH_NODE_TYPE_CONDITIONAL => GraphNodeType::Conditional,
203+
#[cfg(reserved_graph_node_16)]
204+
CU_GRAPH_NODE_TYPE_RESERVED_16 => GraphNodeType::Reserved16,
200205
}
201206
}
202207

@@ -219,6 +224,8 @@ impl GraphNodeType {
219224
Self::BatchMemoryOperation => CU_GRAPH_NODE_TYPE_BATCH_MEM_OP,
220225
#[cfg(conditional_node)]
221226
Self::Conditional => CU_GRAPH_NODE_TYPE_CONDITIONAL,
227+
#[cfg(reserved_graph_node_16)]
228+
Self::Reserved16 => CU_GRAPH_NODE_TYPE_RESERVED_16,
222229
}
223230
}
224231
}
@@ -518,3 +525,26 @@ impl Drop for Graph {
518525
}
519526
}
520527
}
528+
529+
#[cfg(test)]
530+
mod node_type_tests {
531+
use super::{GraphNodeType, driver_sys::CUgraphNodeType};
532+
533+
#[test]
534+
fn kernel_node_round_trip() {
535+
let raw = CUgraphNodeType::CU_GRAPH_NODE_TYPE_KERNEL;
536+
assert_eq!(
537+
GraphNodeType::from_raw(raw),
538+
GraphNodeType::KernelInvocation
539+
);
540+
assert_eq!(GraphNodeType::from_raw(raw).to_raw(), raw);
541+
}
542+
543+
#[cfg(reserved_graph_node_16)]
544+
#[test]
545+
fn reserved_node_round_trip() {
546+
let raw = CUgraphNodeType::CU_GRAPH_NODE_TYPE_RESERVED_16;
547+
assert_eq!(GraphNodeType::from_raw(raw), GraphNodeType::Reserved16);
548+
assert_eq!(GraphNodeType::from_raw(raw).to_raw(), raw);
549+
}
550+
}

0 commit comments

Comments
 (0)