use crate::{
frontend::{NativeExpand, element::Atomic},
ir::{
Scope,
dialect::synchronization::{SyncAsyncProxyOp, SyncOp, SyncScope},
},
prelude::{CubePrimitive, Numeric},
unexpanded,
};
pub fn sync_cube() {}
pub mod sync_cube {
use super::*;
pub fn expand(scope: &Scope) {
scope.register(&SyncOp::new(scope.ctx_mut(), SyncScope::Cube));
}
}
pub fn sync_plane() {
unexpanded!()
}
pub mod sync_plane {
use super::*;
pub fn expand(scope: &Scope) {
scope.register(&SyncOp::new(scope.ctx_mut(), SyncScope::Plane));
}
}
pub fn sync_storage() {}
pub mod sync_storage {
use super::*;
pub fn expand(scope: &Scope) {
scope.register(&SyncOp::new(scope.ctx_mut(), SyncScope::Device));
}
}
pub fn sync_async_proxy_shared() {
unexpanded!()
}
pub mod sync_async_proxy_shared {
use super::*;
pub fn expand(scope: &Scope) {
scope.register(&SyncAsyncProxyOp::new(scope.ctx_mut()))
}
}
#[allow(unused_variables)]
pub fn workgroup_uniform_load<E: CubePrimitive>(reference: &E) -> E {
unexpanded!()
}
pub mod workgroup_uniform_load {
use cubecl_ir::{
dialect::plane::UniformLoadOp, pliron::builtin::op_interfaces::OneResultInterface,
};
use crate::frontend::HasValue;
use super::*;
pub fn expand<E: CubePrimitive>(scope: &Scope, reference: &NativeExpand<E>) -> NativeExpand<E> {
let ptr = reference.value(scope);
let op = UniformLoadOp::new(scope.ctx_mut(), ptr);
scope.register(&op);
op.get_result(scope.ctx()).into()
}
}
#[allow(unused_variables)]
pub fn workgroup_uniform_load_atomic<E: CubePrimitive<Scalar: Numeric>>(
reference: &Atomic<E>,
) -> E {
unexpanded!()
}
pub mod workgroup_uniform_load_atomic {
use cubecl_ir::{
dialect::plane::AtomicUniformLoadOp, pliron::builtin::op_interfaces::OneResultInterface,
};
use crate::frontend::HasValue;
use super::*;
pub fn expand<E: CubePrimitive<Scalar: Numeric>>(
scope: &Scope,
reference: &NativeExpand<Atomic<E>>,
) -> NativeExpand<E> {
let ptr = reference.value(scope);
let op = AtomicUniformLoadOp::new(scope.ctx_mut(), ptr);
scope.register(&op);
op.get_result(scope.ctx()).into()
}
}