Skip to content

Commit 4b300e8

Browse files
Engine instanced SubDevices [2/n]
Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent b881e5f commit 4b300e8

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

opencl/test/unit_test/device/sub_device_tests.cpp

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,11 +333,17 @@ TEST(SubDevicesTest, givenDebugFlagSetAndSingleCcsWhenCreatingRootDeviceWithoutG
333333
EXPECT_FALSE(rootDevice->getDeviceById(0)->isSubDevice());
334334
}
335335

336-
TEST(SubDevicesTest, givenDebugFlagSetWhenCreatingRootDeviceWithGenericSubDevicesThenDontCreateEngineInstanced) {
336+
TEST(SubDevicesTest, givenDebugFlagSetWhenCreatingRootDeviceWithGenericSubDevicesAndSingleCcsThenDontCreateEngineInstanced) {
337337
DebugManagerStateRestore restorer;
338338
DebugManager.flags.EngineInstancedSubDevices.set(true);
339339

340-
UltDeviceFactory deviceFactory(1, 2);
340+
auto executionEnvironment = new ExecutionEnvironment();
341+
executionEnvironment->prepareRootDeviceEnvironments(1);
342+
343+
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
344+
executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 1;
345+
346+
UltDeviceFactory deviceFactory(1, 2, *executionEnvironment);
341347

342348
auto &rootDevice = deviceFactory.rootDevices[0];
343349

@@ -351,6 +357,44 @@ TEST(SubDevicesTest, givenDebugFlagSetWhenCreatingRootDeviceWithGenericSubDevice
351357
}
352358
}
353359

360+
TEST(SubDevicesTest, givenDebugFlagSetWhenCreatingRootDeviceWithGenericSubDevicesThenCreateEngineInstanced) {
361+
DebugManagerStateRestore restorer;
362+
DebugManager.flags.EngineInstancedSubDevices.set(true);
363+
364+
uint32_t ccsCount = 2;
365+
366+
auto executionEnvironment = new ExecutionEnvironment();
367+
executionEnvironment->prepareRootDeviceEnvironments(1);
368+
369+
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(defaultHwInfo.get());
370+
executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->gtSystemInfo.CCSInfo.NumberOfCCSEnabled = ccsCount;
371+
372+
UltDeviceFactory deviceFactory(1, 2, *executionEnvironment);
373+
374+
auto &rootDevice = deviceFactory.rootDevices[0];
375+
376+
for (uint32_t i = 0; i < 2; i++) {
377+
auto subDevice = static_cast<MockSubDevice *>(rootDevice->getDeviceById(i));
378+
ASSERT_NE(nullptr, subDevice);
379+
380+
EXPECT_FALSE(subDevice->engineInstanced);
381+
EXPECT_EQ(ccsCount, subDevice->getNumAvailableDevices());
382+
EXPECT_EQ(aub_stream::EngineType::NUM_ENGINES, subDevice->engineType);
383+
384+
for (uint32_t j = 0; j < ccsCount; j++) {
385+
auto engineType = static_cast<aub_stream::EngineType>(aub_stream::EngineType::ENGINE_CCS + j);
386+
auto engineSubDevice = static_cast<MockSubDevice *>(subDevice->getDeviceById(j));
387+
ASSERT_NE(nullptr, engineSubDevice);
388+
389+
EXPECT_TRUE(engineSubDevice->engineInstanced);
390+
EXPECT_EQ(1u, engineSubDevice->getNumAvailableDevices());
391+
EXPECT_EQ(engineType, engineSubDevice->engineType);
392+
EXPECT_EQ(subDevice->getSubDeviceIndex(), engineSubDevice->getSubDeviceIndex());
393+
EXPECT_EQ(subDevice->getDeviceBitfield(), engineSubDevice->getDeviceBitfield());
394+
}
395+
}
396+
}
397+
354398
TEST(SubDevicesTest, whenInitializeRootCsrThenDirectSubmissionIsNotInitialized) {
355399
auto device = std::make_unique<MockDevice>();
356400
device->initializeRootCommandStreamReceiver();

shared/source/device/sub_device.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "shared/source/device/sub_device.h"
99

10+
#include "shared/source/debug_settings/debug_settings_manager.h"
1011
#include "shared/source/device/root_device.h"
1112

1213
namespace NEO {
@@ -48,4 +49,13 @@ uint64_t SubDevice::getGlobalMemorySize(uint32_t deviceBitfield) const {
4849
return globalMemorySize / rootDevice.getNumAvailableDevices();
4950
}
5051

52+
bool SubDevice::engineInstancedSubDevicesAllowed() const {
53+
if (engineInstanced) {
54+
return false;
55+
}
56+
57+
return (DebugManager.flags.EngineInstancedSubDevices.get() &&
58+
(getHardwareInfo().gtSystemInfo.CCSInfo.NumberOfCCSEnabled > 1));
59+
}
60+
5161
} // namespace NEO

shared/source/device/sub_device.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class SubDevice : public Device {
2727
protected:
2828
uint64_t getGlobalMemorySize(uint32_t deviceBitfield) const override;
2929
bool genericSubDevicesAllowed() override { return false; };
30-
bool engineInstancedSubDevicesAllowed() const override { return false; };
30+
bool engineInstancedSubDevicesAllowed() const override;
3131

3232
RootDevice &rootDevice;
3333
const uint32_t subDeviceIndex;

0 commit comments

Comments
 (0)