use standard::{Buffer, SpatialDims, ProQue};
const PRINT_DEBUG: bool = false;
#[test]
fn basics() {
let data_set_size = 900000;
let coeff = 5432.1;
let kernel_src = r#"
__kernel void multiply_by_scalar(
__global float const* const src,
__private float const coeff,
__global float* const res)
{
uint const idx = get_global_id(0);
res[idx] = src[idx] * coeff;
}
"#;
let ocl_pq = ProQue::builder().src(kernel_src).build().expect("ProQue build");
let dims = SpatialDims::One(data_set_size);
let source_buffer = Buffer::with_vec_scrambled((0.0f32, 20.0f32), &dims, &ocl_pq.queue());
let mut result_buffer = Buffer::<f32>::with_vec(&dims, &ocl_pq.queue());
let kernel = ocl_pq.create_kernel("multiply_by_scalar").expect("[FIXME]: HANDLE ME")
.gws(dims.clone())
.arg_buf(&source_buffer)
.arg_scl(coeff)
.arg_buf(&mut result_buffer)
;
kernel.enq().expect("[FIXME]: HANDLE ME!");
result_buffer.fill_vec();
for idx in 0..data_set_size {
assert_eq!(result_buffer[idx], source_buffer[idx] * coeff);
if PRINT_DEBUG && (idx < 20) {
println!("source_buffer[idx]: {}, coeff: {}, result_buffer[idx]: {}",
source_buffer[idx], coeff, result_buffer[idx]);
}
}
}