pub struct Tensor {
pub data: ArrayD<f32>,
}Expand description
A simple multi-dimensional tensor for our NPU framework.
Internally uses ndarray::ArrayD<f32> for flexible dimensions.
Fields§
§data: ArrayD<f32>Implementations§
Source§impl Tensor
impl Tensor
Sourcepub fn new(data: Vec<f32>, shape: &[usize]) -> Self
pub fn new(data: Vec<f32>, shape: &[usize]) -> Self
Create a new tensor from a Vec and a shape. Example: Tensor::new(vec![1.0, 2.0, 3.0], &[3])
Sourcepub fn random(shape: &[usize]) -> Self
pub fn random(shape: &[usize]) -> Self
Create a tensor with random values between 0 and 1.
Examples found in repository?
examples/full_inference_pipeline.rs (line 117)
113fn quantize_model() {
114 println!("3. Model Quantization");
115
116 let calibration_data = vec![
117 Tensor::random(&[1, 224, 224, 3]).data,
118 Tensor::random(&[1, 224, 224, 3]).data,
119 Tensor::random(&[1, 224, 224, 3]).data,
120 ];
121
122 let ptq = PTQEngine::new(8, false);
123 match ptq.calibrate(&calibration_data) {
124 Ok(converter) => {
125 println!(" ✓ Calibration complete");
126
127 let sample = &calibration_data[0];
128 let stats = QuantStats::from_tensor(sample);
129 println!(" Calibration Stats:");
130 println!(" - Min: {:.6}", stats.min_val);
131 println!(" - Max: {:.6}", stats.max_val);
132 println!(" - Mean: {:.6}", stats.mean_val);
133 println!(" - Std: {:.6}", stats.std_val);
134
135 match converter.quantize_tensor(sample) {
136 Ok(quantized) => {
137 println!(" ✓ Quantization complete: {} values", quantized.len());
138 println!(" Compression: {:.2}x\n",
139 (sample.len() * 4) as f64 / quantized.len() as f64
140 );
141 }
142 Err(e) => println!(" ✗ Quantization failed: {}\n", e),
143 }
144 }
145 Err(e) => println!(" ✗ Calibration failed: {}\n", e),
146 }
147}
148
149fn execute_inference() {
150 println!("4. Inference Execution");
151
152 let device = Arc::new(NpuDevice::new());
153 match device.initialize() {
154 Ok(_) => {
155 let ctx = ExecutionContext::new(device);
156
157 let input = Tensor::random(&[1, 224, 224, 3]);
158 let weights = Tensor::random(&[1, 1, 3, 64]);
159
160 println!(" Input: {:?}", input.shape());
161 println!(" Weights: {:?}", weights.shape());
162
163 match ctx.execute_conv1x1(&input.data, &weights.data) {
164 Ok(output) => {
165 println!(" ✓ Conv1x1 executed");
166 println!(" Output: {:?}", output.shape());
167 println!(" Throughput: {:.4} GOPS\n", ctx.get_current_throughput_gops());
168 }
169 Err(e) => println!(" ✗ Execution failed: {}\n", e),
170 }
171 }
172 Err(e) => println!(" ✗ Device init failed: {}\n", e),
173 }
174}Sourcepub fn from_scalar(value: f32) -> Self
pub fn from_scalar(value: f32) -> Self
Create a scalar tensor (0-D tensor).
Sourcepub fn shape(&self) -> &[usize]
pub fn shape(&self) -> &[usize]
Return the shape of the tensor as a slice.
Examples found in repository?
examples/full_inference_pipeline.rs (line 160)
149fn execute_inference() {
150 println!("4. Inference Execution");
151
152 let device = Arc::new(NpuDevice::new());
153 match device.initialize() {
154 Ok(_) => {
155 let ctx = ExecutionContext::new(device);
156
157 let input = Tensor::random(&[1, 224, 224, 3]);
158 let weights = Tensor::random(&[1, 1, 3, 64]);
159
160 println!(" Input: {:?}", input.shape());
161 println!(" Weights: {:?}", weights.shape());
162
163 match ctx.execute_conv1x1(&input.data, &weights.data) {
164 Ok(output) => {
165 println!(" ✓ Conv1x1 executed");
166 println!(" Output: {:?}", output.shape());
167 println!(" Throughput: {:.4} GOPS\n", ctx.get_current_throughput_gops());
168 }
169 Err(e) => println!(" ✗ Execution failed: {}\n", e),
170 }
171 }
172 Err(e) => println!(" ✗ Device init failed: {}\n", e),
173 }
174}Trait Implementations§
Auto Trait Implementations§
impl Freeze for Tensor
impl RefUnwindSafe for Tensor
impl Send for Tensor
impl Sync for Tensor
impl Unpin for Tensor
impl UnwindSafe for Tensor
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