pub struct SessionBuilder<'a> {
pub program_src: Option<&'a str>,
pub program_binaries: Option<&'a [u8]>,
pub device_type: Option<DeviceType>,
pub platforms: Option<&'a [ClPlatformID]>,
pub devices: Option<&'a [ClDeviceID]>,
pub command_queue_properties: Option<CommandQueueProperties>,
}Fields§
§program_src: Option<&'a str>§program_binaries: Option<&'a [u8]>§device_type: Option<DeviceType>§platforms: Option<&'a [ClPlatformID]>§devices: Option<&'a [ClDeviceID]>§command_queue_properties: Option<CommandQueueProperties>Implementations§
Source§impl<'a> SessionBuilder<'a>
impl<'a> SessionBuilder<'a>
Sourcepub fn new() -> SessionBuilder<'a>
pub fn new() -> SessionBuilder<'a>
Examples found in repository?
examples/ll_simple_add/main.rs (line 130)
127fn run_with_session() {
128 let src = include_str!("simple_add.ocl");
129 unsafe {
130 let mut session = SessionBuilder::new().with_program_src(src).build().unwrap();
131
132 let vec_a = vec![1i64, 2, 3];
133 let vec_b = vec![0i64, -1, -2];
134
135 let mut mem_a = session.create_mem(&vec_a[..]).unwrap();
136 let mut mem_b = session.create_mem(&vec_b[..]).unwrap();
137 let mut mem_c: ClMem = session.create_mem::<i64, usize>(vec_a.len()).unwrap();
138
139 let mut simple_add = session.create_kernel("simple_add").unwrap();
140
141 simple_add.set_arg(0, &mut mem_a).unwrap();
142 simple_add.set_arg(1, &mut mem_b).unwrap();
143 simple_add.set_arg(2, &mut mem_c).unwrap();
144 let work: Work = Work::new(vec_a.len());
145
146 let mut vec_c = vec_a.clone();
147
148 let enqueue_event = session
149 .enqueue_kernel(0, &mut simple_add, &work, None)
150 .unwrap();
151 let () = enqueue_event.wait().unwrap();
152 let mut read_event = session
153 .read_buffer(0, &mut mem_c, &mut vec_c[..], None)
154 .unwrap();
155 let read_output = read_event.wait().unwrap();
156 assert_eq!(read_output, None);
157
158 // at this point vec_c *should* be the result of calling simple_add and reading from mem_c;
159 println!(" {}", string_from_slice(&vec_a[..]));
160 println!("+ {}", string_from_slice(&vec_b[..]));
161 println!("= {}", string_from_slice(&vec_c[..]));
162 }
163}Sourcepub fn with_program_src(self, src: &'a str) -> SessionBuilder<'a>
pub fn with_program_src(self, src: &'a str) -> SessionBuilder<'a>
Examples found in repository?
examples/ll_simple_add/main.rs (line 130)
127fn run_with_session() {
128 let src = include_str!("simple_add.ocl");
129 unsafe {
130 let mut session = SessionBuilder::new().with_program_src(src).build().unwrap();
131
132 let vec_a = vec![1i64, 2, 3];
133 let vec_b = vec![0i64, -1, -2];
134
135 let mut mem_a = session.create_mem(&vec_a[..]).unwrap();
136 let mut mem_b = session.create_mem(&vec_b[..]).unwrap();
137 let mut mem_c: ClMem = session.create_mem::<i64, usize>(vec_a.len()).unwrap();
138
139 let mut simple_add = session.create_kernel("simple_add").unwrap();
140
141 simple_add.set_arg(0, &mut mem_a).unwrap();
142 simple_add.set_arg(1, &mut mem_b).unwrap();
143 simple_add.set_arg(2, &mut mem_c).unwrap();
144 let work: Work = Work::new(vec_a.len());
145
146 let mut vec_c = vec_a.clone();
147
148 let enqueue_event = session
149 .enqueue_kernel(0, &mut simple_add, &work, None)
150 .unwrap();
151 let () = enqueue_event.wait().unwrap();
152 let mut read_event = session
153 .read_buffer(0, &mut mem_c, &mut vec_c[..], None)
154 .unwrap();
155 let read_output = read_event.wait().unwrap();
156 assert_eq!(read_output, None);
157
158 // at this point vec_c *should* be the result of calling simple_add and reading from mem_c;
159 println!(" {}", string_from_slice(&vec_a[..]));
160 println!("+ {}", string_from_slice(&vec_b[..]));
161 println!("= {}", string_from_slice(&vec_c[..]));
162 }
163}pub fn with_program_binaries(self, bins: &'a [u8]) -> SessionBuilder<'a>
pub fn with_platforms(self, platforms: &'a [ClPlatformID]) -> SessionBuilder<'a>
pub fn with_devices(self, devices: &'a [ClDeviceID]) -> SessionBuilder<'a>
pub fn with_device_type(self, device_type: DeviceType) -> SessionBuilder<'a>
pub fn with_command_queue_properties( self, props: CommandQueueProperties, ) -> SessionBuilder<'a>
Sourcepub unsafe fn build(self) -> Output<Session>
pub unsafe fn build(self) -> Output<Session>
Builds a SessionBuilder into a Session
§Safety
This function may, in fact, be safe, mismanagement of objects and lifetimes are not possible as long as the underlying function calls are implemented as intended. However, this claim needs to be reviewed. For now it remains marked as unsafe.
Examples found in repository?
examples/ll_simple_add/main.rs (line 130)
127fn run_with_session() {
128 let src = include_str!("simple_add.ocl");
129 unsafe {
130 let mut session = SessionBuilder::new().with_program_src(src).build().unwrap();
131
132 let vec_a = vec![1i64, 2, 3];
133 let vec_b = vec![0i64, -1, -2];
134
135 let mut mem_a = session.create_mem(&vec_a[..]).unwrap();
136 let mut mem_b = session.create_mem(&vec_b[..]).unwrap();
137 let mut mem_c: ClMem = session.create_mem::<i64, usize>(vec_a.len()).unwrap();
138
139 let mut simple_add = session.create_kernel("simple_add").unwrap();
140
141 simple_add.set_arg(0, &mut mem_a).unwrap();
142 simple_add.set_arg(1, &mut mem_b).unwrap();
143 simple_add.set_arg(2, &mut mem_c).unwrap();
144 let work: Work = Work::new(vec_a.len());
145
146 let mut vec_c = vec_a.clone();
147
148 let enqueue_event = session
149 .enqueue_kernel(0, &mut simple_add, &work, None)
150 .unwrap();
151 let () = enqueue_event.wait().unwrap();
152 let mut read_event = session
153 .read_buffer(0, &mut mem_c, &mut vec_c[..], None)
154 .unwrap();
155 let read_output = read_event.wait().unwrap();
156 assert_eq!(read_output, None);
157
158 // at this point vec_c *should* be the result of calling simple_add and reading from mem_c;
159 println!(" {}", string_from_slice(&vec_a[..]));
160 println!("+ {}", string_from_slice(&vec_b[..]));
161 println!("= {}", string_from_slice(&vec_c[..]));
162 }
163}Trait Implementations§
Source§impl<'a> Default for SessionBuilder<'a>
impl<'a> Default for SessionBuilder<'a>
Source§fn default() -> SessionBuilder<'a>
fn default() -> SessionBuilder<'a>
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl<'a> Freeze for SessionBuilder<'a>
impl<'a> RefUnwindSafe for SessionBuilder<'a>
impl<'a> Send for SessionBuilder<'a>
impl<'a> Sync for SessionBuilder<'a>
impl<'a> Unpin for SessionBuilder<'a>
impl<'a> UnwindSafe for SessionBuilder<'a>
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