mirror of
https://github.com/intel/compute-runtime.git
synced 2025-11-10 05:49:51 +08:00
Improve Device getter to support EngineInstanced Device with single Engine
Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
7ed804a4bb
commit
92000bd75b
@@ -23,7 +23,7 @@
|
||||
|
||||
namespace NEO {
|
||||
|
||||
ClDevice::ClDevice(Device &device, Platform *platform) : device(device), platformId(platform) {
|
||||
ClDevice::ClDevice(Device &device, ClDevice &rootClDevice, Platform *platform) : device(device), rootClDevice(rootClDevice), platformId(platform) {
|
||||
device.incRefInternal();
|
||||
device.setSpecializedDevice(this);
|
||||
deviceExtensions.reserve(1000);
|
||||
@@ -39,7 +39,7 @@ ClDevice::ClDevice(Device &device, Platform *platform) : device(device), platfor
|
||||
if (numAvailableDevices > 1) {
|
||||
for (uint32_t i = 0; i < numAvailableDevices; i++) {
|
||||
auto &coreSubDevice = static_cast<SubDevice &>(*device.getSubDevice(i));
|
||||
auto pClSubDevice = std::make_unique<ClDevice>(coreSubDevice, platform);
|
||||
auto pClSubDevice = std::make_unique<ClDevice>(coreSubDevice, rootClDevice, platform);
|
||||
pClSubDevice->incRefInternal();
|
||||
pClSubDevice->decRefApi();
|
||||
|
||||
@@ -61,6 +61,9 @@ ClDevice::ClDevice(Device &device, Platform *platform) : device(device), platfor
|
||||
}
|
||||
}
|
||||
|
||||
ClDevice::ClDevice(Device &device, Platform *platformId) : ClDevice(device, *this, platformId) {
|
||||
}
|
||||
|
||||
ClDevice::~ClDevice() {
|
||||
|
||||
if (getSharedDeviceInfo().debuggerActive && getSourceLevelDebugger()) {
|
||||
@@ -123,7 +126,17 @@ ClDevice *ClDevice::getSubDevice(uint32_t deviceId) const {
|
||||
return subDevices[deviceId].get();
|
||||
}
|
||||
|
||||
ClDevice *ClDevice::getThisOrNextNonRootCsrDevice(uint32_t deviceId) {
|
||||
ClDevice *ClDevice::getNearestGenericSubDevice(uint32_t deviceId) {
|
||||
/*
|
||||
* EngineInstanced: Upper level
|
||||
* Generic SubDevice: 'this'
|
||||
* RootCsr Device: Next level SubDevice (generic)
|
||||
*/
|
||||
|
||||
if (getDevice().isEngineInstanced()) {
|
||||
return rootClDevice.getNearestGenericSubDevice(Math::log2(static_cast<uint32_t>(getDeviceBitfield().to_ulong())));
|
||||
}
|
||||
|
||||
if (subDevices.empty() || !getDevice().hasRootCsr()) {
|
||||
return const_cast<ClDevice *>(this);
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ class ClDevice : public BaseObject<_cl_device_id> {
|
||||
ClDevice(const ClDevice &) = delete;
|
||||
|
||||
explicit ClDevice(Device &device, Platform *platformId);
|
||||
explicit ClDevice(Device &device, ClDevice &rootClDevice, Platform *platformId);
|
||||
~ClDevice() override;
|
||||
|
||||
void incRefInternal();
|
||||
@@ -116,7 +117,7 @@ class ClDevice : public BaseObject<_cl_device_id> {
|
||||
const ClDeviceInfo &getDeviceInfo() const { return deviceInfo; }
|
||||
const DeviceInfo &getSharedDeviceInfo() const;
|
||||
ClDevice *getSubDevice(uint32_t deviceId) const;
|
||||
ClDevice *getThisOrNextNonRootCsrDevice(uint32_t deviceId);
|
||||
ClDevice *getNearestGenericSubDevice(uint32_t deviceId);
|
||||
const std::string &peekCompilerExtensions() const;
|
||||
const std::string &peekCompilerExtensionsWithFeatures() const;
|
||||
DeviceBitfield getDeviceBitfield() const;
|
||||
@@ -138,6 +139,7 @@ class ClDevice : public BaseObject<_cl_device_id> {
|
||||
const std::string getClDeviceName(const HardwareInfo &hwInfo) const;
|
||||
|
||||
Device &device;
|
||||
ClDevice &rootClDevice;
|
||||
std::vector<std::unique_ptr<ClDevice>> subDevices;
|
||||
cl_platform_id platformId;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user