cubecl_ir/
synchronization.rs

1use core::fmt::Display;
2
3use crate::{OperationReflect, TypeHash};
4
5/// All synchronization types.
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[derive(Debug, Clone, TypeHash, PartialEq, Eq, Hash, OperationReflect)]
8#[operation(opcode_name = SyncOpCode)]
9#[allow(missing_docs)]
10pub enum Synchronization {
11    // Synchronizize units in a cube.
12    SyncUnits,
13    SyncStorage,
14    /// Sync CTA proxy.
15    /// Experimental, CUDA only, SM 9.0+ only
16    SyncProxyShared,
17}
18
19impl Display for Synchronization {
20    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
21        match self {
22            Synchronization::SyncUnits => write!(f, "sync_units()"),
23            Synchronization::SyncStorage => write!(f, "sync_storage()"),
24            Synchronization::SyncProxyShared => write!(f, "sync_proxy_shared()"),
25        }
26    }
27}