This is part of the SYCL support upstreaming effort. The relevant RFCs can be found here: https://discourse.llvm.org/t/rfc-add-full-support-for-the-sycl-programming-model/74080 https://discourse.llvm.org/t/rfc-sycl-runtime-upstreaming/74479 Plan for next PR: E2E lit configs & test for get_platforms & get_devices impl context & USM free functions impl --------- Signed-off-by: Tikhomirova, Kseniya <kseniya.tikhomirova@intel.com>
105 lines
3.6 KiB
C++
105 lines
3.6 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include <sycl/__impl/device.hpp>
|
|
|
|
#include <detail/device_impl.hpp>
|
|
#include <detail/platform_impl.hpp>
|
|
|
|
#include <algorithm>
|
|
|
|
_LIBSYCL_BEGIN_NAMESPACE_SYCL
|
|
|
|
device::device() : device(default_selector_v) {}
|
|
|
|
bool device::is_cpu() const { return impl->isCPU(); }
|
|
|
|
bool device::is_gpu() const { return impl->isGPU(); }
|
|
|
|
bool device::is_accelerator() const { return impl->isAccelerator(); }
|
|
|
|
platform device::get_platform() const {
|
|
return detail::createSyclObjFromImpl<platform>(impl->getPlatformImpl());
|
|
}
|
|
|
|
backend device::get_backend() const noexcept { return impl->getBackend(); }
|
|
|
|
std::vector<device> device::get_devices(info::device_type DeviceType) {
|
|
std::vector<device> Devices;
|
|
|
|
// Not calling platform::get_devices to avoid multiple vector packing
|
|
for (auto &PlatformImpl : detail::PlatformImpl::getPlatforms()) {
|
|
assert(PlatformImpl && "PlatformImpl can not be nullptr");
|
|
PlatformImpl->iterateDevices(
|
|
DeviceType, [&Devices](detail::DeviceImpl *DevImpl) {
|
|
assert(DevImpl && "Device impl can't be nullptr");
|
|
Devices.push_back(detail::createSyclObjFromImpl<device>(*DevImpl));
|
|
});
|
|
}
|
|
|
|
return Devices;
|
|
}
|
|
|
|
template <info::partition_property prop>
|
|
std::vector<device> device::create_sub_devices(size_t ComputeUnits) const {
|
|
throw exception(make_error_code(errc::feature_not_supported),
|
|
"Partitioning is not supported.");
|
|
}
|
|
|
|
template _LIBSYCL_EXPORT std::vector<device>
|
|
device::create_sub_devices<info::partition_property::partition_equally>(
|
|
size_t ComputeUnits) const;
|
|
|
|
template <info::partition_property prop>
|
|
std::vector<device>
|
|
device::create_sub_devices(const std::vector<size_t> &Counts) const {
|
|
throw exception(make_error_code(errc::feature_not_supported),
|
|
"Partitioning is not supported.");
|
|
}
|
|
|
|
template _LIBSYCL_EXPORT std::vector<device>
|
|
device::create_sub_devices<info::partition_property::partition_by_counts>(
|
|
const std::vector<size_t> &Counts) const;
|
|
|
|
template <info::partition_property prop>
|
|
std::vector<device> device::create_sub_devices(
|
|
info::partition_affinity_domain AffinityDomain) const {
|
|
throw exception(make_error_code(errc::feature_not_supported),
|
|
"Partitioning is not supported.");
|
|
}
|
|
|
|
template _LIBSYCL_EXPORT std::vector<device> device::create_sub_devices<
|
|
info::partition_property::partition_by_affinity_domain>(
|
|
info::partition_affinity_domain AffinityDomain) const;
|
|
|
|
bool device::has(aspect Aspect) const { return impl->has(Aspect); }
|
|
|
|
template <typename Param>
|
|
detail::is_device_info_desc_t<Param> device::get_info() const {
|
|
return impl->getInfo<Param>();
|
|
}
|
|
|
|
template <>
|
|
_LIBSYCL_EXPORT detail::is_device_info_desc_t<info::device::platform>
|
|
device::get_info<info::device::platform>() const {
|
|
static_assert(
|
|
std::is_same_v<info::device::platform::return_type, sycl::platform>);
|
|
return get_platform();
|
|
}
|
|
|
|
#define _LIBSYCL_EXPORT_GET_INFO(Desc) \
|
|
template _LIBSYCL_EXPORT detail::is_device_info_desc_t<info::device::Desc> \
|
|
device::get_info<info::device::Desc>() const;
|
|
_LIBSYCL_EXPORT_GET_INFO(device_type)
|
|
_LIBSYCL_EXPORT_GET_INFO(name)
|
|
_LIBSYCL_EXPORT_GET_INFO(vendor)
|
|
_LIBSYCL_EXPORT_GET_INFO(driver_version)
|
|
#undef _LIBSYCL_EXPORT_GET_INFO
|
|
|
|
_LIBSYCL_END_NAMESPACE_SYCL
|