pub struct CutlassActor { /* private fields */ }Expand description
Host-side actor. Holds an Arc<CutlassInner> so messages can be
processed from a worker thread without locking the actor itself
after construction.
Implementations§
Source§impl CutlassActor
impl CutlassActor
Sourcepub fn new(plan_cache_capacity: usize) -> Self
pub fn new(plan_cache_capacity: usize) -> Self
Examples found in repository?
examples/cutlass_gemm_fp8.rs (line 11)
10fn main() {
11 let actor = CutlassActor::new(16);
12 let req = GemmRequest::<F8E4m3>::new(GemmShape::new(4096, 4096, 4096), SmArch::Sm90a)
13 .with_epilogue(GemmEpilogue::LinearReLU {
14 alpha: 1.0,
15 beta: 0.0,
16 });
17
18 println!("plan key: {:?}", req.plan_key());
19 let (src, name) = req.render_cu();
20 println!("kernel: {name}");
21 println!("--- generated .cu ---");
22 println!("{src}");
23
24 actor.handle(CutlassMsg::Gemm(Box::new(req.clone())));
25 actor.handle(CutlassMsg::Gemm(Box::new(req)));
26
27 println!("dispatched: {}", actor.inner().dispatched());
28 println!("plan cache len: {}", actor.inner().plan_cache.len());
29}Sourcepub fn prebuilt_active() -> bool
pub fn prebuilt_active() -> bool
true when the crate was built with cutlass-prebuilt and
nvcc was found at build time, so libatomr_cutlass_prebuilt.a
is statically linked into the binary. Phase 6.1 ships one
canonical GEMM placeholder cell (proves the wiring); Phase 6.2
expands the cell matrix and routes hits through the prebuilt
symbol table before falling back to NVRTC.
Sourcepub fn inner(&self) -> Arc<CutlassInner> ⓘ
pub fn inner(&self) -> Arc<CutlassInner> ⓘ
Examples found in repository?
examples/cutlass_gemm_fp8.rs (line 27)
10fn main() {
11 let actor = CutlassActor::new(16);
12 let req = GemmRequest::<F8E4m3>::new(GemmShape::new(4096, 4096, 4096), SmArch::Sm90a)
13 .with_epilogue(GemmEpilogue::LinearReLU {
14 alpha: 1.0,
15 beta: 0.0,
16 });
17
18 println!("plan key: {:?}", req.plan_key());
19 let (src, name) = req.render_cu();
20 println!("kernel: {name}");
21 println!("--- generated .cu ---");
22 println!("{src}");
23
24 actor.handle(CutlassMsg::Gemm(Box::new(req.clone())));
25 actor.handle(CutlassMsg::Gemm(Box::new(req)));
26
27 println!("dispatched: {}", actor.inner().dispatched());
28 println!("plan cache len: {}", actor.inner().plan_cache.len());
29}Sourcepub fn handle(&self, msg: CutlassMsg)
pub fn handle(&self, msg: CutlassMsg)
Synchronously process a message. The real production path
runs through atomr_core::actor::Actor::handle; this method
is the host-only fast path that the unit tests exercise.
Examples found in repository?
examples/cutlass_gemm_fp8.rs (line 24)
10fn main() {
11 let actor = CutlassActor::new(16);
12 let req = GemmRequest::<F8E4m3>::new(GemmShape::new(4096, 4096, 4096), SmArch::Sm90a)
13 .with_epilogue(GemmEpilogue::LinearReLU {
14 alpha: 1.0,
15 beta: 0.0,
16 });
17
18 println!("plan key: {:?}", req.plan_key());
19 let (src, name) = req.render_cu();
20 println!("kernel: {name}");
21 println!("--- generated .cu ---");
22 println!("{src}");
23
24 actor.handle(CutlassMsg::Gemm(Box::new(req.clone())));
25 actor.handle(CutlassMsg::Gemm(Box::new(req)));
26
27 println!("dispatched: {}", actor.inner().dispatched());
28 println!("plan cache len: {}", actor.inner().plan_cache.len());
29}Auto Trait Implementations§
impl Freeze for CutlassActor
impl !RefUnwindSafe for CutlassActor
impl Send for CutlassActor
impl Sync for CutlassActor
impl Unpin for CutlassActor
impl UnsafeUnpin for CutlassActor
impl !UnwindSafe for CutlassActor
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more