| 22 | namespace rt { |
| 23 | |
| 24 | backend_manager::backend_manager() |
| 25 | : _hw_model(std::make_unique<hw_model>(this)), |
| 26 | _kernel_cache{kernel_cache::get()} |
| 27 | { |
| 28 | |
| 29 | _loader.query_backends(); |
| 30 | |
| 31 | for (std::size_t backend_index = 0; |
| 32 | backend_index < _loader.get_num_backends(); ++backend_index) { |
| 33 | |
| 34 | HIPSYCL_DEBUG_INFO << "Registering backend: '" |
| 35 | << _loader.get_backend_name(backend_index) << "'..." |
| 36 | << std::endl; |
| 37 | backend *b = _loader.create(backend_index); |
| 38 | if (b) { |
| 39 | _backends.emplace_back(std::unique_ptr<backend>(b)); |
| 40 | } else { |
| 41 | HIPSYCL_DEBUG_ERROR << "backend_manager: Backend creation failed" << std::endl; |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | this->for_each_backend([](backend *b) { |
| 46 | HIPSYCL_DEBUG_INFO << "Discovered devices from backend '" << b->get_name() |
| 47 | << "': " << std::endl; |
| 48 | backend_hardware_manager* hw_manager = b->get_hardware_manager(); |
| 49 | if(hw_manager->get_num_devices() == 0) { |
| 50 | HIPSYCL_DEBUG_INFO << " <no devices>" << std::endl; |
| 51 | } else { |
| 52 | for(std::size_t i = 0; i < hw_manager->get_num_devices(); ++i){ |
| 53 | hardware_context* hw = hw_manager->get_device(i); |
| 54 | |
| 55 | HIPSYCL_DEBUG_INFO << " device " << i << ": " << std::endl; |
| 56 | HIPSYCL_DEBUG_INFO << " vendor: " << hw->get_vendor_name() << std::endl; |
| 57 | HIPSYCL_DEBUG_INFO << " name: " << hw->get_device_name() << std::endl; |
| 58 | } |
| 59 | } |
| 60 | }); |
| 61 | |
| 62 | if(std::none_of(_backends.cbegin(), _backends.cend(), |
| 63 | [](const std::unique_ptr<backend>& b){ |
| 64 | return b->get_hardware_platform() == hardware_platform::cpu; |
| 65 | })) |
| 66 | { |
| 67 | HIPSYCL_DEBUG_ERROR << "No CPU backend has been loaded. Terminating." << std::endl; |
| 68 | std::terminate(); |
| 69 | } |
| 70 | } |
| 71 | |
| 72 | backend_manager::~backend_manager() |
| 73 | { |
nothing calls this directly
no test coverage detected