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    SyncCube,
13    // Synchronize units within their plane
14    SyncPlane,
15    SyncStorage,
16    /// Sync CTA proxy.
17    /// Experimental, CUDA only, SM 9.0+ only
18    SyncProxyShared,
19}
20
21impl Display for Synchronization {
22    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
23        match self {
24            Synchronization::SyncCube => write!(f, "sync_cube()"),
25            Synchronization::SyncStorage => write!(f, "sync_storage()"),
26            Synchronization::SyncProxyShared => write!(f, "sync_proxy_shared()"),
27            Synchronization::SyncPlane => write!(f, "sync_plane()"),
28        }
29    }
30}