1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//! Test adding multiple context properties.
use crate::core::ContextPropertyValue;
use crate::standard::{Context, Device, Platform};
// static SRC: &'static str = r#"
// __kernel void multiply(__global float* buffer, float coeff) {
// buffer[get_global_id(0)] *= coeff;
// }
// "#;
#[test]
fn test_context_props() {
// let dims = [2048];
let platforms = Platform::list();
println!(
"Looping through each avaliable platform ({}):",
platforms.len()
);
// Loop through all avaliable platforms:
for p_idx in 0..platforms.len() {
let platform = &platforms[p_idx];
let devices = Device::list_all(platform).unwrap();
if devices.is_empty() {
continue;
}
// [NOTE]: A new context can also be created for each device if desired.
let context = Context::builder()
.platform(platform.clone())
.property(ContextPropertyValue::Platform(platform.clone().into()))
.devices(&devices)
.build()
.unwrap();
println!("{}", platform);
println!("{}", context);
for device in devices.iter() {
println!(
"Device {{ Name: {}, Vendor: {} }}",
device.name().unwrap(),
device.vendor().unwrap()
);
}
// print!("\n\n");
// // Loop through each device
// for d_idx in 0..devices.len() {
// let device = devices[d_idx];
// let queue = Queue::new(&context, device).unwrap();
// let buffer = Buffer::<f32>::new(&queue, None, &dims, None).unwrap();
// let image = Image::<u8>::builder()
// .dims(dims)
// .build(&queue).unwrap();
// let sampler = Sampler::with_defaults(&context).unwrap();
// let program = Program::builder()
// .src(SRC)
// .devices(device)
// .build(&context).unwrap();
// let kernel = Kernel::new("multiply", &program, &queue).unwrap()
// .gws(&dims)
// .arg(&buffer)
// .arg(10.0f32);
// let mut event_list = EventList::new();
// kernel.cmd().enew(&mut event_list).enq().unwrap();
// event_list.wait().unwrap();
// let mut event = Event::empty();
// buffer.cmd().write(&vec![0.0; dims[0]]).enew(&mut event).enq().unwrap();
// event.wait().unwrap();
// }
}
}