@@ -56,16 +56,29 @@ class QMgrHelper
56
56
57
57
static QVec* init_queues (backend BE, info::device_type DTy) {
58
58
QVec *queues = new QVec ();
59
-
60
- for (auto &p : platform::get_platforms ()) {
61
- auto Devices = p.get_devices ();
62
- auto Ctx = context (Devices);
59
+ auto Platforms = platform::get_platforms ();
60
+ for (auto &p : Platforms) {
63
61
if (p.is_host ()) continue ;
64
- for (auto &d : Devices) {
62
+ auto be = p.get_backend ();
63
+ auto Devices = p.get_devices ();
64
+
65
+ if (Devices.size () == 1 ) {
66
+ auto d = Devices[0 ];
65
67
auto devty = d.get_info <info::device::device_type>();
66
- auto be = p. get_backend ( );
68
+ auto Ctx = context (d );
67
69
if (devty == DTy && be == BE) {
68
- queues->emplace_back (Ctx, d);
70
+ queues->emplace_back (Ctx, d);
71
+ break ;
72
+ }
73
+ }
74
+ else {
75
+ auto Ctx = context (Devices);
76
+ for (auto &d : Devices) {
77
+ auto devty = d.get_info <info::device::device_type>();
78
+ if (devty == DTy && be == BE) {
79
+ queues->emplace_back (Ctx, d);
80
+ break ;
81
+ }
69
82
}
70
83
}
71
84
}
@@ -157,35 +170,38 @@ QMgrHelper::getQueue (enum DPPLSyclBEType BETy,
157
170
{
158
171
case DPPLSyclBEType::DPPL_OPENCL | DPPLSyclDeviceType::DPPL_CPU:
159
172
{
160
- if (DNum >= get_opencl_cpu_queues ().size ()) {
173
+ auto cpuQs = get_opencl_cpu_queues ();
174
+ if (DNum >= cpuQs.size ()) {
161
175
// \todo handle error
162
176
std::cerr << " OpenCL CPU device " << DNum
163
177
<< " not found on system.\n " ;
164
178
return nullptr ;
165
179
}
166
- QRef = new queue (get_opencl_cpu_queues () [DNum]);
180
+ QRef = new queue (cpuQs [DNum]);
167
181
break ;
168
182
}
169
183
case DPPLSyclBEType::DPPL_OPENCL | DPPLSyclDeviceType::DPPL_GPU:
170
184
{
171
- if (DNum >= get_opencl_gpu_queues ().size ()) {
185
+ auto gpuQs = get_opencl_gpu_queues ();
186
+ if (DNum >= gpuQs.size ()) {
172
187
// \todo handle error
173
188
std::cerr << " OpenCL GPU device " << DNum
174
189
<< " not found on system.\n " ;
175
190
return nullptr ;
176
191
}
177
- QRef = new queue (get_opencl_gpu_queues () [DNum]);
192
+ QRef = new queue (gpuQs [DNum]);
178
193
break ;
179
194
}
180
195
case DPPLSyclBEType::DPPL_LEVEL_ZERO | DPPLSyclDeviceType::DPPL_GPU:
181
196
{
182
- if (DNum >= get_level0_gpu_queues ().size ()) {
197
+ auto l0GpuQs = get_level0_gpu_queues ();
198
+ if (DNum >= l0GpuQs.size ()) {
183
199
// \todo handle error
184
200
std::cerr << " Level-0 GPU device " << DNum
185
201
<< " not found on system.\n " ;
186
202
return nullptr ;
187
203
}
188
- QRef = new queue (get_level0_gpu_queues () [DNum]);
204
+ QRef = new queue (l0GpuQs [DNum]);
189
205
break ;
190
206
}
191
207
default :
0 commit comments