Files
compute-runtime/runtime/device/root_device.cpp
Mateusz Jablonski d408b82a19 Move aub center and command stream receivers to root device environment
resize root device environments to 1 by default

Related-To: NEO-3691, NEO-3857

Change-Id: Idf3d61e84f8265f30381c18216632d0ffb2a16de
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
2019-10-28 14:40:43 +01:00

93 lines
2.4 KiB
C++

/*
* Copyright (C) 2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "runtime/device/root_device.h"
#include "runtime/device/sub_device.h"
#include "runtime/helpers/device_helpers.h"
#include "runtime/os_interface/debug_settings_manager.h"
namespace NEO {
RootDevice::~RootDevice() = default;
uint32_t RootDevice::getNumSubDevices() const {
return static_cast<uint32_t>(subdevices.size());
}
uint32_t RootDevice::getRootDeviceIndex() const {
return rootDeviceIndex;
}
uint32_t RootDevice::getNumAvailableDevices() const {
if (subdevices.empty()) {
return 1u;
}
return getNumSubDevices();
}
Device *RootDevice::getDeviceById(uint32_t deviceId) const {
UNRECOVERABLE_IF(deviceId >= getNumAvailableDevices());
if (subdevices.empty()) {
return const_cast<RootDevice *>(this);
}
return subdevices[deviceId].get();
};
RootDevice::RootDevice(ExecutionEnvironment *executionEnvironment, uint32_t rootDeviceIndex) : Device(executionEnvironment, 0u), rootDeviceIndex(rootDeviceIndex) {}
bool RootDevice::createDeviceImpl() {
auto numSubDevices = DeviceHelper::getSubDevicesCount(&getHardwareInfo());
if (numSubDevices == 1) {
numSubDevices = 0;
}
subdevices.resize(numSubDevices);
for (auto i = 0u; i < numSubDevices; i++) {
auto subDevice = Device::create<SubDevice>(executionEnvironment, i + 1, i, *this);
if (!subDevice) {
return false;
}
subdevices[i].reset(subDevice);
}
auto status = Device::createDeviceImpl();
if (!status) {
return status;
}
return true;
}
/* We hide the retain and release function of BaseObject. */
void RootDevice::retain() {
DEBUG_BREAK_IF(!isValid());
}
unique_ptr_if_unused<Device> RootDevice::release() {
DEBUG_BREAK_IF(!isValid());
return unique_ptr_if_unused<Device>(this, false);
}
DeviceBitfield RootDevice::getDeviceBitfieldForOsContext() const {
DeviceBitfield deviceBitfield;
deviceBitfield.set(internalDeviceIndex);
return deviceBitfield;
}
bool RootDevice::createEngines() {
if (!executionEnvironment->initializeRootCommandStreamReceiver(*this)) {
return Device::createEngines();
}
return true;
}
void RootDevice::setupRootEngine(EngineControl engine) {
if (engines.size() > 0u) {
return;
}
defaultEngineIndex = 0;
engines.emplace_back(engine);
}
} // namespace NEO