Back to home page

Project CMSSW displayed by LXR

 
 

    


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   }  // namespace detail
0032 
0033   // return the alpaka accelerator devices for the given platform
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 }  // namespace cms::alpakatools
0041 
0042 #endif  // HeterogeneousCore_AlpakaInterface_interface_devices_h