@@ -26,38 +26,15 @@ class vector_add_second;
26
26
// allowing computation to be split across said devices.
27
27
std::vector<sycl::device> get_two_devices () {
28
28
auto devs = sycl::device::get_devices ();
29
+ if (devs.size () == 0 ) throw " No devices available" ;
29
30
if (devs.size () == 1 )
30
31
return {devs[0 ], devs[0 ]};
32
+
33
+ // Choose the first non-host devices
34
+ std::sort (devs.begin (), devs.end (), [](sycl::device &d1, sycl::device &d2) {
35
+ return !d1.is_host () && d2.is_host (); });
31
36
32
- auto host_it{std::find_if (devs.begin (), devs.end (),
33
- [](sycl::device &d) { return d.is_host (); })};
34
-
35
- // Don't mix Nvidia and non-Nvidia devices to avoid incompatible binary
36
- auto nvidia_it{std::find_if (devs.begin (), devs.end (), [](sycl::device &d) {
37
- return d.get_info <sycl::info::device::vendor>().find (" NVIDIA" ) !=
38
- std::string::npos;
39
- })};
40
- if (nvidia_it != devs.end ()) {
41
- auto nvidia_it2 =
42
- std::find_if (nvidia_it + 1 , devs.end (), [](sycl::device &d) {
43
- return d.get_info <sycl::info::device::vendor>().find (" NVIDIA" ) !=
44
- std::string::npos;
45
- });
46
- if (nvidia_it2 != devs.end ())
47
- return {*nvidia_it, *nvidia_it2};
48
- if (host_it != devs.end ())
49
- return {*nvidia_it, *host_it};
50
- return {*nvidia_it, *nvidia_it};
51
- }
52
-
53
- auto dev_it{std::find_if (devs.begin (), devs.end (),
54
- [](sycl::device &d) { return !d.is_host (); })};
55
- auto dev_it2{std::find_if (dev_it + 1 , devs.end (),
56
- [](sycl::device &d) { return !d.is_host (); })};
57
-
58
- if (dev_it2 != devs.end ())
59
- return {*dev_it, *dev_it2};
60
- return {*host_it, *dev_it};
37
+ return {devs[0 ], devs[1 ]};
61
38
}
62
39
63
40
0 commit comments