spark_runtime/cutlass/
pack.rs1use anyhow::{Result, bail};
5
6#[cfg(atlas_cutlass)]
7use std::ffi::c_void;
8
9#[cfg(atlas_cutlass)]
10use super::*;
11
12pub fn pack_weight_sfb(
24 scale_in: u64,
25 scale_out: u64,
26 n: u32,
27 k: u32,
28 src_n_major: bool,
29 stream: u64,
30) -> Result<()> {
31 #[cfg(atlas_cutlass)]
32 {
33 let status = unsafe {
34 atlas_cutlass_pack_weight_sfb(
35 scale_in as *const c_void,
36 scale_out as *mut c_void,
37 n as i32,
38 k as i32,
39 i32::from(src_n_major),
40 stream as *mut c_void,
41 )
42 };
43 if status != 0 {
44 bail!("CUTLASS weight SFB pack failed: status {status} for {n}x{k}");
45 }
46 Ok(())
47 }
48 #[cfg(not(atlas_cutlass))]
49 {
50 let _ = (scale_in, scale_out, n, k, src_n_major, stream);
51 bail!("CUTLASS support was not built; set CUTLASS_HOME when building")
52 }
53}
54
55pub fn pack_bf16_weight_to_nvfp4_t(
60 weight_bf16: u64,
61 packed_t: u64,
62 scale_t: u64,
63 n: u32,
64 k: u32,
65 stream: u64,
66) -> Result<()> {
67 #[cfg(atlas_cutlass)]
68 {
69 let status = unsafe {
70 atlas_cutlass_pack_bf16_weight_to_nvfp4_t(
71 weight_bf16 as *const c_void,
72 packed_t as *mut c_void,
73 scale_t as *mut c_void,
74 n as i32,
75 k as i32,
76 stream as *mut c_void,
77 )
78 };
79 if status != 0 {
80 bail!("CUTLASS BF16->NVFP4 weight pack failed: status {status} for {n}x{k}");
81 }
82 Ok(())
83 }
84 #[cfg(not(atlas_cutlass))]
85 {
86 let _ = (weight_bf16, packed_t, scale_t, n, k, stream);
87 bail!("CUTLASS support was not built; set CUTLASS_HOME when building")
88 }
89}
90
91pub fn transpose_nvfp4_packed_kton(
97 src_packed_t: u64,
98 dst_packed: u64,
99 n: u32,
100 k: u32,
101 stream: u64,
102) -> Result<()> {
103 #[cfg(atlas_cutlass)]
104 {
105 let status = unsafe {
106 atlas_cutlass_transpose_nvfp4_packed_kton(
107 src_packed_t as *const c_void,
108 dst_packed as *mut c_void,
109 n as i32,
110 k as i32,
111 stream as *mut c_void,
112 )
113 };
114 if status != 0 {
115 bail!("CUTLASS NVFP4 weight transpose failed: status {status} for {n}x{k}");
116 }
117 Ok(())
118 }
119 #[cfg(not(atlas_cutlass))]
120 {
121 let _ = (src_packed_t, dst_packed, n, k, stream);
122 bail!("CUTLASS support was not built; set CUTLASS_HOME when building")
123 }
124}