Skip to content

Commit 0c9050c

Browse files
Create Root CSR only for Devices with Generic SubDevices
Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent bb9d902 commit 0c9050c

File tree

5 files changed

+21
-4
lines changed

5 files changed

+21
-4
lines changed

opencl/test/unit_test/device/sub_device_tests.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,8 @@ TEST(RootDevicesTest, givenRootDeviceWithSubdevicesWhenCreateEnginesThenDeviceCr
244244

245245
auto executionEnvironment = new MockExecutionEnvironment;
246246
MockDevice device(executionEnvironment, 0);
247-
device.numSubDevices = 2;
247+
device.createSubDevices();
248+
EXPECT_EQ(2u, device.getNumAvailableDevices());
248249
EXPECT_EQ(0u, device.engines.size());
249250
device.createEngines();
250251
EXPECT_EQ(1u, device.engines.size());
@@ -305,6 +306,8 @@ TEST(SubDevicesTest, givenDebugFlagSetAndMoreThanOneCcsWhenCreatingRootDeviceWit
305306

306307
EXPECT_EQ(ccsCount, rootDevice->getNumAvailableDevices());
307308

309+
EXPECT_FALSE(rootDevice->engines[0].osContext->isRootDevice());
310+
308311
for (uint32_t i = 0; i < ccsCount; i++) {
309312
auto engineType = static_cast<aub_stream::EngineType>(aub_stream::EngineType::ENGINE_CCS + i);
310313
auto subDevice = static_cast<MockSubDevice *>(rootDevice->getDeviceById(i));
@@ -329,6 +332,7 @@ TEST(SubDevicesTest, givenDebugFlagSetAndSingleCcsWhenCreatingRootDeviceWithoutG
329332

330333
auto &rootDevice = deviceFactory.rootDevices[0];
331334

335+
EXPECT_FALSE(rootDevice->engines[0].osContext->isRootDevice());
332336
EXPECT_EQ(1u, rootDevice->getNumAvailableDevices());
333337
EXPECT_FALSE(rootDevice->getDeviceById(0)->isSubDevice());
334338
}
@@ -346,11 +350,14 @@ TEST(SubDevicesTest, givenDebugFlagSetWhenCreatingRootDeviceWithGenericSubDevice
346350
UltDeviceFactory deviceFactory(1, 2, *executionEnvironment);
347351

348352
auto &rootDevice = deviceFactory.rootDevices[0];
353+
EXPECT_EQ(1u, rootDevice->engines.size());
354+
EXPECT_TRUE(rootDevice->engines[0].osContext->isRootDevice());
349355

350356
for (uint32_t i = 0; i < 2; i++) {
351357
auto subDevice = static_cast<MockSubDevice *>(rootDevice->getDeviceById(i));
352358
ASSERT_NE(nullptr, subDevice);
353359

360+
EXPECT_FALSE(subDevice->engines[0].osContext->isRootDevice());
354361
EXPECT_FALSE(subDevice->engineInstanced);
355362
EXPECT_EQ(1u, subDevice->getNumAvailableDevices());
356363
EXPECT_EQ(aub_stream::EngineType::NUM_ENGINES, subDevice->engineType);
@@ -373,10 +380,14 @@ TEST(SubDevicesTest, givenDebugFlagSetWhenCreatingRootDeviceWithGenericSubDevice
373380

374381
auto &rootDevice = deviceFactory.rootDevices[0];
375382

383+
EXPECT_EQ(1u, rootDevice->engines.size());
384+
EXPECT_TRUE(rootDevice->engines[0].osContext->isRootDevice());
385+
376386
for (uint32_t i = 0; i < 2; i++) {
377387
auto subDevice = static_cast<MockSubDevice *>(rootDevice->getDeviceById(i));
378388
ASSERT_NE(nullptr, subDevice);
379389

390+
EXPECT_FALSE(subDevice->engines[0].osContext->isRootDevice());
380391
EXPECT_FALSE(subDevice->engineInstanced);
381392
EXPECT_EQ(ccsCount, subDevice->getNumAvailableDevices());
382393
EXPECT_EQ(aub_stream::EngineType::NUM_ENGINES, subDevice->engineType);
@@ -386,6 +397,7 @@ TEST(SubDevicesTest, givenDebugFlagSetWhenCreatingRootDeviceWithGenericSubDevice
386397
auto engineSubDevice = static_cast<MockSubDevice *>(subDevice->getDeviceById(j));
387398
ASSERT_NE(nullptr, engineSubDevice);
388399

400+
EXPECT_FALSE(engineSubDevice->engines[0].osContext->isRootDevice());
389401
EXPECT_TRUE(engineSubDevice->engineInstanced);
390402
EXPECT_EQ(1u, engineSubDevice->getNumAvailableDevices());
391403
EXPECT_EQ(engineType, engineSubDevice->engineType);

shared/source/device/device.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ bool Device::createGenericSubDevices() {
118118
subdevices[i] = subDevice;
119119
}
120120

121+
hasGenericSubDevices = true;
121122
return true;
122123
}
123124

shared/source/device/device.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ class Device : public ReferenceTrackedObject<Device> {
155155
ExecutionEnvironment *executionEnvironment = nullptr;
156156
uint32_t defaultEngineIndex = 0;
157157
uint32_t numSubDevices = 0;
158+
bool hasGenericSubDevices = false;
158159

159160
std::atomic<uint32_t> selectorCopyEngine{0};
160161

shared/source/device/root_device.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ void RootDevice::createBindlessHeapsHelper() {
4444
}
4545

4646
bool RootDevice::createEngines() {
47-
if (getNumSubDevices() < 2) {
48-
return Device::createEngines();
49-
} else {
47+
if (hasGenericSubDevices) {
5048
this->engineGroups.resize(static_cast<uint32_t>(EngineGroupType::MaxEngineGroups));
5149
initializeRootCommandStreamReceiver();
50+
} else {
51+
return Device::createEngines();
5252
}
53+
5354
return true;
5455
}
5556

shared/test/common/mocks/mock_device.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ extern CommandStreamReceiver *createCommandStream(ExecutionEnvironment &executio
2828
const DeviceBitfield deviceBitfield);
2929

3030
struct MockSubDevice : public SubDevice {
31+
using Device::engines;
3132
using SubDevice::engineInstanced;
3233
using SubDevice::engineType;
3334
using SubDevice::getDeviceBitfield;
@@ -45,6 +46,7 @@ class MockDevice : public RootDevice {
4546
using Device::commandStreamReceivers;
4647
using Device::createDeviceInternals;
4748
using Device::createEngine;
49+
using Device::createSubDevices;
4850
using Device::deviceInfo;
4951
using Device::engineGroups;
5052
using Device::engines;

0 commit comments

Comments
 (0)