use crate::graph::program_graph::BINDING_PRIMITIVE_START;
pub const OP_ID: &str = "vyre-primitives::graph::persistent_bfs";
pub const BATCH_OP_ID: &str = "vyre-primitives::graph::persistent_bfs_batch";
pub const BINDING_FRONTIER_IN: u32 = BINDING_PRIMITIVE_START;
pub const BINDING_FRONTIER_OUT: u32 = BINDING_PRIMITIVE_START + 1;
pub const BINDING_CHANGED: u32 = BINDING_PRIMITIVE_START + 2;
pub const PERSISTENT_BFS_WORKGROUP_SIZE: [u32; 3] = [256, 1, 1];
pub const PERSISTENT_BFS_SINGLE_DISPATCH_GRID: [u32; 3] = [1, 1, 1];
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct PersistentBfsLayout {
pub node_count: u32,
pub edge_count: u32,
pub words: usize,
pub words_u32: u32,
pub node_words: usize,
pub edge_storage_words: usize,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct PersistentBfsBatchLayout {
pub query_count: u32,
pub total_words: usize,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct PersistentBfsFrontierLayout {
pub words: usize,
pub words_u32: u32,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum PersistentBfsPlanCacheKind {
Single,
Batch,
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub struct PersistentBfsPlanCacheKey {
pub layout_hash: u64,
pub node_count: u32,
pub edge_count: u32,
pub words_per_query: u32,
pub query_count: u32,
pub allow_mask: u32,
pub max_iters: u32,
pub device_features: u64,
pub kind: PersistentBfsPlanCacheKind,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct PersistentBfsStaticInputKey {
pub layout_hash: u64,
pub node_count: u32,
pub edge_count: u32,
pub words: u32,
}