27 inline namespace _V1 {
38 auto &program_manager = sycl::detail::ProgramManager::getInstance();
39 if (program_manager.hasCompatibleImage(Device))
53 std::string PlatformName = Device.
get_info<info::device::platform>()
54 .get_info<info::platform::name>();
55 std::string DeviceName = Device.
get_info<info::device::name>();
56 auto selectionMsg = Chosen ?
"Selected device: -> final score = "
57 :
"Candidate device: -> score = ";
59 std::cout <<
"SYCL_UR_TRACE: " << selectionMsg << Score
60 << ((Score < 0) ?
" (REJECTED)" :
"") << std::endl
62 <<
" platform: " << PlatformName << std::endl
64 <<
" device: " << DeviceName << std::endl;
69 std::vector<device> &Devices) {
71 const device *res =
nullptr;
73 for (
const auto &dev : Devices) {
74 int dev_score = DeviceSelectorInvocable(dev);
89 if ((score < dev_score) ||
90 ((score == dev_score) &&
104 constexpr
const char Prefix[] =
"No device of requested type ";
105 constexpr
const char Cpu[] =
"'info::device_type::cpu' ";
106 constexpr
const char Gpu[] =
"'info::device_type::gpu' ";
107 constexpr
const char Acc[] =
"'info::device_type::accelerator' ";
108 constexpr
const char Suffix[] =
"available.";
109 constexpr
auto ReserveSize =
sizeof(Prefix) +
sizeof(Suffix) +
sizeof(Acc);
110 Message.reserve(ReserveSize);
114 DeviceSelectorInvocable.target<int (*)(
const sycl::device &)>();
116 DeviceSelectorInvocable.target<sycl::gpu_selector>()) {
119 DeviceSelectorInvocable.target<sycl::cpu_selector>()) {
144 std::vector<device> Devices = SyclContext.
get_devices();
145 if (std::find(Devices.begin(), Devices.end(), SelectedDevice) ==
148 "Selected device is not in the given context.");
150 return SelectedDevice;
167 std::cout <<
"SYCL_UR_TRACE: Requested device_type: " << DeviceType
231 const std::vector<aspect> &DenyList ) {
233 auto DevHas = [&](
const aspect &Asp) ->
bool {
return Dev.has(Asp); };
236 if (!
std::all_of(RequireList.begin(), RequireList.end(), DevHas))
240 if (
std::any_of(DenyList.begin(), DenyList.end(), DevHas))
243 if (RequireList.size() > 0) {
262 int default_selector::operator()(
const device &dev)
const {
266 int gpu_selector::operator()(
const device &dev)
const {
270 int cpu_selector::operator()(
const device &dev)
const {
278 namespace ext::oneapi {
281 : impl(
std::make_shared<detail::filter_selector_impl>(Input.data())) {}
283 int filter_selector::operator()(
const device &Dev)
const {
284 return impl->operator()(Dev);
287 void filter_selector::reset()
const { impl->reset(); }
299 std::lock_guard<std::mutex> Guard(
300 sycl::detail::GlobalHandler::instance().getFilterMutex());
312 using namespace ext::oneapi;
313 filter_selector::filter_selector(sycl::detail::string_view Input)
314 : ext::oneapi::filter_selector(Input) {}
The default selector chooses the first available SYCL device.
int operator()(const device &dev) const override
The context class represents a SYCL context on which kernel functions may be executed.
std::vector< device > get_devices() const
Gets devices associated with this SYCL context.
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
bool is_accelerator() const
Check if device is an accelerator device.
bool is_gpu() const
Check if device is a GPU device.
static std::vector< device > get_devices(info::device_type deviceType=info::device_type::all)
Query available SYCL devices.
detail::is_device_info_desc< Param >::return_type get_info() const
Queries this SYCL device for information requested by the template parameter param.
bool is_cpu() const
Get instance of device.
filter_selector(const std::string &filter)
device select_device() const override
int operator()(const device &dev) const override
__SYCL_EXTERN_STREAM_ATTRS ostream cout
Linked to standard output.
decltype(Obj::impl) const & getSyclObjImpl(const Obj &SyclObject)
static int getDevicePreference(const device &Device)
std::function< int(const sycl::device &)> DSelectorInvocableType
static constexpr int REJECT_DEVICE_SCORE
device select_device(const DSelectorInvocableType &DeviceSelectorInvocable)
static void traceDeviceSelection(const device &Device, int Score, bool Chosen)
int accelerator_selector_v(const device &dev)
signed char __SYCL2020_DEPRECATED
int cpu_selector_v(const device &dev)
int default_selector_v(const device &dev)
detail::DSelectorInvocableType aspect_selector(const std::vector< aspect > &RequireList, const std::vector< aspect > &DenyList={})
int gpu_selector_v(const device &dev)
static void traceDeviceSelector(const std::string &DeviceType)
default_selector_v Devices of different kinds are prioritized in the following order:
std::error_code make_error_code(sycl::errc E) noexcept
Constructs an error code using e and sycl_category()
bool any_of(const simd_mask< _Tp, _Abi > &) noexcept
bool all_of(const simd_mask< _Tp, _Abi > &) noexcept