Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

126 lines
4.0 KiB
C++

// REQUIRES: any-device
// RUN: %clangxx %sycl_options %s -o %t.out
// RUN: %t.out
//
// Tests platform::get_devices for each device type.
#include <sycl/sycl.hpp>
#include <algorithm>
#include <iostream>
std::string BackendToString(sycl::backend Backend) {
switch (Backend) {
case sycl::backend::opencl:
return "opencl";
case sycl::backend::level_zero:
return "level_zero";
case sycl::backend::cuda:
return "cuda";
case sycl::backend::hip:
return "hip";
default:
return "unknown";
}
}
std::string DeviceTypeToString(sycl::info::device_type DevType) {
switch (DevType) {
case sycl::info::device_type::all:
return "device_type::all";
case sycl::info::device_type::cpu:
return "device_type::cpu";
case sycl::info::device_type::gpu:
return "device_type::gpu";
case sycl::info::device_type::accelerator:
return "device_type::accelerator";
case sycl::info::device_type::custom:
return "device_type::custom";
case sycl::info::device_type::automatic:
return "device_type::automatic";
case sycl::info::device_type::host:
return "device_type::host";
default:
return "unknown";
}
}
std::string GenerateDeviceDescription(sycl::info::device_type DevType,
const sycl::platform &Platform) {
return std::string(DeviceTypeToString(DevType)) + " (" +
BackendToString(Platform.get_backend()) + ")";
}
template <typename T1, typename T2>
int Check(const T1 &LHS, const T2 &RHS, std::string TestName) {
if (LHS == RHS)
return 0;
std::cerr << "Failed check " << LHS << " != " << RHS << ": " << TestName
<< std::endl;
return 1;
}
int CheckDeviceType(const sycl::platform &P, sycl::info::device_type DevType,
std::vector<sycl::device> &AllDevices) {
// This check verifies data of device with specific device_type and if it is
// correctly chosen among all devices (device_type::all).
// Though there is no point to check device_type::all here.
assert(DevType != sycl::info::device_type::all);
int Failures = 0;
std::vector<sycl::device> Devices = P.get_devices(DevType);
if (DevType == sycl::info::device_type::automatic) {
if (AllDevices.empty()) {
Failures += Check(Devices.size(), 0,
"No devices reported for device_type::all query, but "
"device_type::automatic returns a device.");
} else {
Failures += Check(Devices.size(), 1,
"Number of devices for device_type::automatic query.");
if (Devices.size())
Failures += Check(
std::count(AllDevices.begin(), AllDevices.end(), Devices[0]), 1,
"Device is in the set of device_type::all devices in the "
"platform.");
}
return Failures;
}
// Count devices with the type.
size_t DevCount = 0;
for (sycl::device Device : Devices)
DevCount += (Device.get_info<sycl::info::device::device_type>() == DevType);
Failures += Check(Devices.size(), DevCount,
"Unexpected number of devices for " +
GenerateDeviceDescription(DevType, P));
Failures +=
Check(std::all_of(Devices.begin(), Devices.end(),
[&](const auto &Dev) {
return std::count(AllDevices.begin(),
AllDevices.end(), Dev) == 1;
}),
true,
"Not all devices for " + GenerateDeviceDescription(DevType, P) +
" appear in the list of all devices");
return Failures;
}
int main() {
int Failures = 0;
for (sycl::platform P : sycl::platform::get_platforms()) {
std::vector<sycl::device> Devices = P.get_devices();
for (sycl::info::device_type DevType :
{sycl::info::device_type::cpu, sycl::info::device_type::gpu,
sycl::info::device_type::accelerator, sycl::info::device_type::custom,
sycl::info::device_type::automatic, sycl::info::device_type::host})
Failures += CheckDeviceType(P, DevType, Devices);
}
return Failures;
}