#[cfg(unified_cl)]
use custos::{Buffer, OpenCL, Read};
#[cfg(unified_cl)]
fn main() -> custos::Result<()> {
let device = OpenCL::new(0)?;
// declare function with conditional compilation attribute #[cfg(unified_cl)] or check dynamically:
// if !device.unified_mem() {
// println!("CLDevice uses own memory");
// return Ok(());
// }
// create an OpenCL buffer
let mut a = Buffer::from((&device, [1, 2, 3, 4, 5]));
// This OpenCL buffer is used to iterate all values with a for loop,
// which only works on devices with unified memory.
for value in &mut a {
*value += 2;
}
// Read OpenCL buffer.
// This yields the same data as the corresponding CPU slice.
let cl_data = device.read(&a);
assert_eq!(a.as_slice(), cl_data);
assert_eq!(&cl_data, &[3, 4, 5, 6, 7,]);
Ok(())
}
#[cfg(not(unified_cl))]
fn main() {}