pub struct NDArrayMatrixMultiplication { /* private fields */ }Expand description
Wraps MPSNDArrayMatrixMultiplication.
Implementations§
Source§impl NDArrayMatrixMultiplication
impl NDArrayMatrixMultiplication
Sourcepub fn new(device: &MetalDevice, source_count: usize) -> Option<Self>
pub fn new(device: &MetalDevice, source_count: usize) -> Option<Self>
Wraps a constructor on MPSNDArrayMatrixMultiplication.
Examples found in repository?
examples/06_ndarray_matrix_multiplication.rs (line 51)
30fn main() {
31 let device = MetalDevice::system_default().expect("no Metal device available");
32 let queue = device.new_command_queue().expect("command queue");
33
34 let descriptor = NDArrayDescriptor::with_dimension_sizes(data_type::FLOAT32, &[2, 2, 1, 1])
35 .expect("descriptor");
36 let template = NDArray::new(&device, &descriptor).expect("template ndarray");
37 let byte_len = template.resource_size();
38 let rows = descriptor.length_of_dimension(1);
39 let row_stride_floats = byte_len / core::mem::size_of::<f32>() / rows;
40 let left_buffer =
41 buffer_with_f32_values_padded(&device, &[1.0, 2.0, 0.0, 0.0, 3.0, 4.0, 0.0, 0.0], byte_len);
42 let right_buffer =
43 buffer_with_f32_values_padded(&device, &[5.0, 6.0, 0.0, 0.0, 7.0, 8.0, 0.0, 0.0], byte_len);
44 let destination_buffer = buffer_with_f32_values_padded(&device, &[0.0; 8], byte_len);
45
46 let left = NDArray::new_with_buffer(&left_buffer, 0, &descriptor).expect("left ndarray");
47 let right = NDArray::new_with_buffer(&right_buffer, 0, &descriptor).expect("right ndarray");
48 let destination =
49 NDArray::new_with_buffer(&destination_buffer, 0, &descriptor).expect("destination ndarray");
50
51 let kernel = NDArrayMatrixMultiplication::new(&device, 2).expect("ndarray matmul");
52 kernel.set_alpha(1.0);
53 kernel.set_beta(0.0);
54
55 let command_buffer = queue.new_command_buffer().expect("command buffer");
56 kernel.encode_to_destination(&command_buffer, &[&left, &right], &destination);
57 command_buffer.commit();
58 command_buffer.wait_until_completed();
59
60 let padded_output = read_f32_values(&destination_buffer, row_stride_floats * rows);
61 let output = [
62 padded_output[0],
63 padded_output[1],
64 padded_output[row_stride_floats],
65 padded_output[row_stride_floats + 1],
66 ];
67 println!("{output:?}");
68}Sourcepub fn set_alpha(&self, alpha: f64)
pub fn set_alpha(&self, alpha: f64)
Wraps the corresponding MPSNDArrayMatrixMultiplication setter.
Examples found in repository?
examples/06_ndarray_matrix_multiplication.rs (line 52)
30fn main() {
31 let device = MetalDevice::system_default().expect("no Metal device available");
32 let queue = device.new_command_queue().expect("command queue");
33
34 let descriptor = NDArrayDescriptor::with_dimension_sizes(data_type::FLOAT32, &[2, 2, 1, 1])
35 .expect("descriptor");
36 let template = NDArray::new(&device, &descriptor).expect("template ndarray");
37 let byte_len = template.resource_size();
38 let rows = descriptor.length_of_dimension(1);
39 let row_stride_floats = byte_len / core::mem::size_of::<f32>() / rows;
40 let left_buffer =
41 buffer_with_f32_values_padded(&device, &[1.0, 2.0, 0.0, 0.0, 3.0, 4.0, 0.0, 0.0], byte_len);
42 let right_buffer =
43 buffer_with_f32_values_padded(&device, &[5.0, 6.0, 0.0, 0.0, 7.0, 8.0, 0.0, 0.0], byte_len);
44 let destination_buffer = buffer_with_f32_values_padded(&device, &[0.0; 8], byte_len);
45
46 let left = NDArray::new_with_buffer(&left_buffer, 0, &descriptor).expect("left ndarray");
47 let right = NDArray::new_with_buffer(&right_buffer, 0, &descriptor).expect("right ndarray");
48 let destination =
49 NDArray::new_with_buffer(&destination_buffer, 0, &descriptor).expect("destination ndarray");
50
51 let kernel = NDArrayMatrixMultiplication::new(&device, 2).expect("ndarray matmul");
52 kernel.set_alpha(1.0);
53 kernel.set_beta(0.0);
54
55 let command_buffer = queue.new_command_buffer().expect("command buffer");
56 kernel.encode_to_destination(&command_buffer, &[&left, &right], &destination);
57 command_buffer.commit();
58 command_buffer.wait_until_completed();
59
60 let padded_output = read_f32_values(&destination_buffer, row_stride_floats * rows);
61 let output = [
62 padded_output[0],
63 padded_output[1],
64 padded_output[row_stride_floats],
65 padded_output[row_stride_floats + 1],
66 ];
67 println!("{output:?}");
68}Sourcepub fn set_beta(&self, beta: f64)
pub fn set_beta(&self, beta: f64)
Wraps the corresponding MPSNDArrayMatrixMultiplication setter.
Examples found in repository?
examples/06_ndarray_matrix_multiplication.rs (line 53)
30fn main() {
31 let device = MetalDevice::system_default().expect("no Metal device available");
32 let queue = device.new_command_queue().expect("command queue");
33
34 let descriptor = NDArrayDescriptor::with_dimension_sizes(data_type::FLOAT32, &[2, 2, 1, 1])
35 .expect("descriptor");
36 let template = NDArray::new(&device, &descriptor).expect("template ndarray");
37 let byte_len = template.resource_size();
38 let rows = descriptor.length_of_dimension(1);
39 let row_stride_floats = byte_len / core::mem::size_of::<f32>() / rows;
40 let left_buffer =
41 buffer_with_f32_values_padded(&device, &[1.0, 2.0, 0.0, 0.0, 3.0, 4.0, 0.0, 0.0], byte_len);
42 let right_buffer =
43 buffer_with_f32_values_padded(&device, &[5.0, 6.0, 0.0, 0.0, 7.0, 8.0, 0.0, 0.0], byte_len);
44 let destination_buffer = buffer_with_f32_values_padded(&device, &[0.0; 8], byte_len);
45
46 let left = NDArray::new_with_buffer(&left_buffer, 0, &descriptor).expect("left ndarray");
47 let right = NDArray::new_with_buffer(&right_buffer, 0, &descriptor).expect("right ndarray");
48 let destination =
49 NDArray::new_with_buffer(&destination_buffer, 0, &descriptor).expect("destination ndarray");
50
51 let kernel = NDArrayMatrixMultiplication::new(&device, 2).expect("ndarray matmul");
52 kernel.set_alpha(1.0);
53 kernel.set_beta(0.0);
54
55 let command_buffer = queue.new_command_buffer().expect("command buffer");
56 kernel.encode_to_destination(&command_buffer, &[&left, &right], &destination);
57 command_buffer.commit();
58 command_buffer.wait_until_completed();
59
60 let padded_output = read_f32_values(&destination_buffer, row_stride_floats * rows);
61 let output = [
62 padded_output[0],
63 padded_output[1],
64 padded_output[row_stride_floats],
65 padded_output[row_stride_floats + 1],
66 ];
67 println!("{output:?}");
68}Sourcepub fn encode(
&self,
command_buffer: &MetalCommandBuffer,
source_arrays: &[&NDArray],
) -> Option<NDArray>
pub fn encode( &self, command_buffer: &MetalCommandBuffer, source_arrays: &[&NDArray], ) -> Option<NDArray>
Wraps the corresponding MPSNDArrayMatrixMultiplication encode entry point.
Sourcepub fn encode_to_destination(
&self,
command_buffer: &MetalCommandBuffer,
source_arrays: &[&NDArray],
destination: &NDArray,
)
pub fn encode_to_destination( &self, command_buffer: &MetalCommandBuffer, source_arrays: &[&NDArray], destination: &NDArray, )
Wraps the corresponding MPSNDArrayMatrixMultiplication encode entry point.
Examples found in repository?
examples/06_ndarray_matrix_multiplication.rs (line 56)
30fn main() {
31 let device = MetalDevice::system_default().expect("no Metal device available");
32 let queue = device.new_command_queue().expect("command queue");
33
34 let descriptor = NDArrayDescriptor::with_dimension_sizes(data_type::FLOAT32, &[2, 2, 1, 1])
35 .expect("descriptor");
36 let template = NDArray::new(&device, &descriptor).expect("template ndarray");
37 let byte_len = template.resource_size();
38 let rows = descriptor.length_of_dimension(1);
39 let row_stride_floats = byte_len / core::mem::size_of::<f32>() / rows;
40 let left_buffer =
41 buffer_with_f32_values_padded(&device, &[1.0, 2.0, 0.0, 0.0, 3.0, 4.0, 0.0, 0.0], byte_len);
42 let right_buffer =
43 buffer_with_f32_values_padded(&device, &[5.0, 6.0, 0.0, 0.0, 7.0, 8.0, 0.0, 0.0], byte_len);
44 let destination_buffer = buffer_with_f32_values_padded(&device, &[0.0; 8], byte_len);
45
46 let left = NDArray::new_with_buffer(&left_buffer, 0, &descriptor).expect("left ndarray");
47 let right = NDArray::new_with_buffer(&right_buffer, 0, &descriptor).expect("right ndarray");
48 let destination =
49 NDArray::new_with_buffer(&destination_buffer, 0, &descriptor).expect("destination ndarray");
50
51 let kernel = NDArrayMatrixMultiplication::new(&device, 2).expect("ndarray matmul");
52 kernel.set_alpha(1.0);
53 kernel.set_beta(0.0);
54
55 let command_buffer = queue.new_command_buffer().expect("command buffer");
56 kernel.encode_to_destination(&command_buffer, &[&left, &right], &destination);
57 command_buffer.commit();
58 command_buffer.wait_until_completed();
59
60 let padded_output = read_f32_values(&destination_buffer, row_stride_floats * rows);
61 let output = [
62 padded_output[0],
63 padded_output[1],
64 padded_output[row_stride_floats],
65 padded_output[row_stride_floats + 1],
66 ];
67 println!("{output:?}");
68}Trait Implementations§
Source§impl Drop for NDArrayMatrixMultiplication
impl Drop for NDArrayMatrixMultiplication
impl Send for NDArrayMatrixMultiplication
impl Sync for NDArrayMatrixMultiplication
Auto Trait Implementations§
impl Freeze for NDArrayMatrixMultiplication
impl RefUnwindSafe for NDArrayMatrixMultiplication
impl Unpin for NDArrayMatrixMultiplication
impl UnsafeUnpin for NDArrayMatrixMultiplication
impl UnwindSafe for NDArrayMatrixMultiplication
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