@@ -56,16 +56,29 @@ class QMgrHelper
5656
5757 static QVec* init_queues (backend BE, info::device_type DTy) {
5858 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) {
6361 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 ];
6567 auto devty = d.get_info <info::device::device_type>();
66- auto be = p. get_backend ( );
68+ auto Ctx = context (d );
6769 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+ }
6982 }
7083 }
7184 }
@@ -157,35 +170,38 @@ QMgrHelper::getQueue (enum DPPLSyclBEType BETy,
157170 {
158171 case DPPLSyclBEType::DPPL_OPENCL | DPPLSyclDeviceType::DPPL_CPU:
159172 {
160- if (DNum >= get_opencl_cpu_queues ().size ()) {
173+ auto cpuQs = get_opencl_cpu_queues ();
174+ if (DNum >= cpuQs.size ()) {
161175 // \todo handle error
162176 std::cerr << " OpenCL CPU device " << DNum
163177 << " not found on system.\n " ;
164178 return nullptr ;
165179 }
166- QRef = new queue (get_opencl_cpu_queues () [DNum]);
180+ QRef = new queue (cpuQs [DNum]);
167181 break ;
168182 }
169183 case DPPLSyclBEType::DPPL_OPENCL | DPPLSyclDeviceType::DPPL_GPU:
170184 {
171- if (DNum >= get_opencl_gpu_queues ().size ()) {
185+ auto gpuQs = get_opencl_gpu_queues ();
186+ if (DNum >= gpuQs.size ()) {
172187 // \todo handle error
173188 std::cerr << " OpenCL GPU device " << DNum
174189 << " not found on system.\n " ;
175190 return nullptr ;
176191 }
177- QRef = new queue (get_opencl_gpu_queues () [DNum]);
192+ QRef = new queue (gpuQs [DNum]);
178193 break ;
179194 }
180195 case DPPLSyclBEType::DPPL_LEVEL_ZERO | DPPLSyclDeviceType::DPPL_GPU:
181196 {
182- if (DNum >= get_level0_gpu_queues ().size ()) {
197+ auto l0GpuQs = get_level0_gpu_queues ();
198+ if (DNum >= l0GpuQs.size ()) {
183199 // \todo handle error
184200 std::cerr << " Level-0 GPU device " << DNum
185201 << " not found on system.\n " ;
186202 return nullptr ;
187203 }
188- QRef = new queue (get_level0_gpu_queues () [DNum]);
204+ QRef = new queue (l0GpuQs [DNum]);
189205 break ;
190206 }
191207 default :
0 commit comments