Skip to main content

KernelCmd

Struct KernelCmd 

Source
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>

Source

pub fn global_work_offset( self, global_work_offset: impl Into<Option<W>>, ) -> Self

Set the global work offset

Source

pub fn local_work_size(self, local_work_size: impl Into<Option<W>>) -> Self

Set the local work size

Source

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.