pub struct KernelCmd<'q, T: KernelArgList, W: WorkDims> { /* private fields */ }Expand description
A partially built command to execute a kernel
Implementations§
Source§impl<'q, T: KernelArgList, W: WorkDims> KernelCmd<'q, T, W>
impl<'q, T: KernelArgList, W: WorkDims> KernelCmd<'q, T, W>
Sourcepub fn global_work_offset(
self,
global_work_offset: impl Into<Option<W>>,
) -> Self
pub fn global_work_offset( self, global_work_offset: impl Into<Option<W>>, ) -> Self
Set the global work offset
Sourcepub fn local_work_size(self, local_work_size: impl Into<Option<W>>) -> Self
pub fn local_work_size(self, local_work_size: impl Into<Option<W>>) -> Self
Set the local work size
Sourcepub fn exec_ndrange(self, global_work_size: W) -> Result<()>
pub fn exec_ndrange(self, global_work_size: W) -> Result<()>
Execute this kernel with the given global work size, blocking until completion.
Examples found in repository?
examples/basic.rs (line 80)
18pub fn main() {
19 let version = load_opencl().unwrap();
20 println!("Successfully loaded OpenCL (compat level {:?})", version);
21
22 for platform in Platform::get_platforms().unwrap() {
23 println!("Got platform {:#?}", platform);
24
25 for device in platform.get_devices(DeviceType::ALL).unwrap() {
26 println!("Got device: {:#?}", device);
27
28 let ctx = device.create_context().unwrap();
29
30 println!("Created context: {:#?}", ctx);
31
32 let mut queue = QueueBuilder::new(&ctx, &device).build().unwrap();
33
34 println!("Created command queue: {:#?}", queue);
35
36 let program = ProgramBuilder::with_source(&ctx, &KERNEL).build().unwrap();
37
38 println!(
39 "Compiled program: {:?} {:?}",
40 program,
41 program.kernel_names()
42 );
43
44 let build_info = program.build_info(device).unwrap();
45 println!("Build info: {:#?}", build_info);
46
47 let a = ctx
48 .buffer_builder()
49 .host_access::<HostNoAccess>()
50 .device_access::<DeviceReadOnly>()
51 .build_copying_slice(&[1, 2, 3])
52 .unwrap();
53
54 let b = ctx
55 .buffer_builder()
56 .host_access::<HostNoAccess>()
57 .device_access::<DeviceReadOnly>()
58 .build_copying_slice(&[1, 2, 3])
59 .unwrap();
60
61 let c = ctx
62 .buffer_builder()
63 .host_access::<HostReadOnly>()
64 .device_access::<DeviceWriteOnly>()
65 .build_with_size::<i32>(3)
66 .unwrap();
67
68 let args = (a, b, c);
69
70 println!("Created arguments: {:#?}", args);
71
72 let mut kernel = program
73 .create_kernel(&CString::new("sum").unwrap())
74 .unwrap()
75 .bind_arguments(args)
76 .unwrap();
77
78 println!("Created and bound kernel: {:#?}", kernel);
79
80 queue.kernel_cmd(&mut kernel).exec_ndrange(3).unwrap();
81
82 let mut data = [0i32; 3];
83 queue
84 .buffer_cmd(&mut kernel.arguments().2)
85 .read(&mut data)
86 .unwrap();
87
88 println!("Kernel output: {:?}", data);
89
90 assert_eq!(data, [2, 4, 6]);
91 }
92
93 platform.unload_compiler().unwrap();
94
95 println!(
96 "Unloaded compiler for platform {}",
97 platform.name().unwrap().to_string_lossy()
98 );
99 }
100}Auto Trait Implementations§
impl<'q, T, W> Freeze for KernelCmd<'q, T, W>where
W: Freeze,
impl<'q, T, W> RefUnwindSafe for KernelCmd<'q, T, W>
impl<'q, T, W> !Send for KernelCmd<'q, T, W>
impl<'q, T, W> !Sync for KernelCmd<'q, T, W>
impl<'q, T, W> Unpin for KernelCmd<'q, T, W>where
W: Unpin,
impl<'q, T, W> UnsafeUnpin for KernelCmd<'q, T, W>where
W: UnsafeUnpin,
impl<'q, T, W> UnwindSafe for KernelCmd<'q, T, W>
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