pub struct Program(/* private fields */);Expand description
An OpenCL program
Implementations§
Source§impl Program
impl Program
Sourcepub fn create_kernel(&self, name: &CStr) -> Result<UnboundKernel>
pub fn create_kernel(&self, name: &CStr) -> Result<UnboundKernel>
Create a kernel with a given name.
Examples found in repository?
examples/basic.rs (line 73)
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}Source§impl Program
impl Program
Sourcepub fn try_clone(&self) -> Result<Self>
pub fn try_clone(&self) -> Result<Self>
Attempt to clone this program, using clRetainProgram to ensure the
program is not released while a wrapper still exists.
Sourcepub fn raw(&self) -> cl_program
pub fn raw(&self) -> cl_program
Get the raw handle for this program. Note that this handle is only a raw pointer and does not use RAII to ensure validity, so you must manually make sure that it’s not released while still in use.
pub fn reference_count(&self) -> Result<cl_uint>
pub fn context_raw(&self) -> Result<cl_context>
pub fn num_devices(&self) -> Result<cl_uint>
pub fn source(&self) -> Result<CString>
pub fn il(&self) -> Result<Vec<u8>>
pub fn binary_sizes(&self) -> Result<Vec<size_t>>
pub fn num_kernels(&self) -> Result<size_t>
Sourcepub fn kernel_names(&self) -> Result<CString>
pub fn kernel_names(&self) -> Result<CString>
Examples found in repository?
examples/basic.rs (line 41)
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}pub fn scope_global_ctors_present(&self) -> Result<bool>
pub fn scope_global_dtors_present(&self) -> Result<bool>
Sourcepub fn build_info(&self, Device: Device) -> Result<ProgramBuildInfo<'_>>
pub fn build_info(&self, Device: Device) -> Result<ProgramBuildInfo<'_>>
Get program build info for a given device
Examples found in repository?
examples/basic.rs (line 44)
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}Trait Implementations§
impl Eq for Program
impl Send for Program
impl StructuralPartialEq for Program
impl Sync for Program
Auto Trait Implementations§
impl Freeze for Program
impl RefUnwindSafe for Program
impl Unpin for Program
impl UnsafeUnpin for Program
impl UnwindSafe for Program
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
Source§impl<T> OclInfo for Twhere
T: OclInfoInternal,
impl<T> OclInfo for Twhere
T: OclInfoInternal,
Source§fn get_info_raw(&self, param_name: Self::Param) -> Result<Vec<u8>>
fn get_info_raw(&self, param_name: Self::Param) -> Result<Vec<u8>>
Get raw binary info from OpenCL about this object. Read more
Source§fn get_info_raw_sized<L: ArrayLength<u8>>(
&self,
param_name: Self::Param,
) -> Result<GenericArray<u8, L>>
fn get_info_raw_sized<L: ArrayLength<u8>>( &self, param_name: Self::Param, ) -> Result<GenericArray<u8, L>>
Get raw binary info from OpenCL about this object, with a constant size. Read more