@@ -106,27 +106,30 @@ device select_device(DSelectorInvocableType DeviceSelectorInvocable,
106106 return *res;
107107 }
108108
109- auto Selector = DeviceSelectorInvocable.target <int (*)(const sycl::device &)>();
110- if ((Selector && *Selector == gpu_selector_v)
111- || DeviceSelectorInvocable.target <sycl::gpu_selector>()) {
112- throw sycl::runtime_error (
113- " No device of requested type 'info::device_type::gpu' available." ,
114- PI_ERROR_DEVICE_NOT_FOUND);
109+ std::string Message;
110+ constexpr const char Prefix[] = " No device of requested type " ;
111+ constexpr const char Cpu[] = " 'info::device_type::cpu' " ;
112+ constexpr const char Gpu[] = " 'info::device_type::gpu' " ;
113+ constexpr const char Acc[] = " 'info::device_type::accelerator' " ;
114+ constexpr const char Suffix[] = " available." ;
115+ constexpr auto ReserveSize = sizeof (Prefix) + sizeof (Suffix) + sizeof (Acc);
116+ Message.reserve (ReserveSize);
117+ Message += Prefix;
118+
119+ auto Selector =
120+ DeviceSelectorInvocable.target <int (*)(const sycl::device &)>();
121+ if ((Selector && *Selector == gpu_selector_v) ||
122+ DeviceSelectorInvocable.target <sycl::gpu_selector>()) {
123+ Message += Gpu;
124+ } else if ((Selector && *Selector == cpu_selector_v) ||
125+ DeviceSelectorInvocable.target <sycl::cpu_selector>()) {
126+ Message += Cpu;
127+ } else if ((Selector && *Selector == accelerator_selector_v) ||
128+ DeviceSelectorInvocable.target <sycl::accelerator_selector>()) {
129+ Message += Acc;
115130 }
116- if ((Selector && *Selector == cpu_selector_v)
117- || DeviceSelectorInvocable.target <sycl::cpu_selector>()) {
118- throw sycl::runtime_error (
119- " No device of requested type 'info::device_type::cpu' available." ,
120- PI_ERROR_DEVICE_NOT_FOUND);
121- }
122- if ((Selector && *Selector == accelerator_selector_v)
123- || DeviceSelectorInvocable.target <sycl::accelerator_selector>()) {
124- throw sycl::runtime_error (" No device of requested type "
125- " 'info::device_type::accelerator' available." ,
126- PI_ERROR_DEVICE_NOT_FOUND);
127- }
128- throw sycl::runtime_error (" No device of requested type available." ,
129- PI_ERROR_DEVICE_NOT_FOUND);
131+ Message += Suffix;
132+ throw sycl::runtime_error (Message, PI_ERROR_DEVICE_NOT_FOUND);
130133}
131134
132135// select_device(selector)
0 commit comments