@@ -106,27 +106,30 @@ device select_device(DSelectorInvocableType DeviceSelectorInvocable,
106
106
return *res;
107
107
}
108
108
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;
115
130
}
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);
130
133
}
131
134
132
135
// select_device(selector)
0 commit comments