File indexing completed on 2023-03-17 11:05:42
0001 #ifndef HeterogeneousCore_AlpakaInterface_interface_devices_h
0002 #define HeterogeneousCore_AlpakaInterface_interface_devices_h
0003
0004 #include <cassert>
0005 #include <vector>
0006
0007 #include <alpaka/alpaka.hpp>
0008
0009 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0010
0011 namespace cms::alpakatools {
0012
0013 namespace detail {
0014
0015 template <typename TPlatform, typename = std::enable_if_t<alpaka::isPlatform<TPlatform>>>
0016 inline std::vector<alpaka::Dev<TPlatform>> enumerate_devices() {
0017 using Platform = TPlatform;
0018 using Device = alpaka::Dev<Platform>;
0019
0020 std::vector<Device> devices;
0021 uint32_t n = alpaka::getDevCount<Platform>();
0022 devices.reserve(n);
0023 for (uint32_t i = 0; i < n; ++i) {
0024 devices.push_back(alpaka::getDevByIdx<Platform>(i));
0025 assert(alpaka::getNativeHandle(devices.back()) == static_cast<int>(i));
0026 }
0027
0028 return devices;
0029 }
0030
0031 }
0032
0033
0034 template <typename TPlatform, typename = std::enable_if_t<alpaka::isPlatform<TPlatform>>>
0035 inline std::vector<alpaka::Dev<TPlatform>> const& devices() {
0036 static const auto devices = detail::enumerate_devices<TPlatform>();
0037 return devices;
0038 }
0039
0040 }
0041
0042 #endif