mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-19 06:24:51 +08:00
fix: correct maxOsContextCount with multiple subdevices and context group
Related-To: NEO-12257 Signed-off-by: Mateusz Hoppe <mateusz.hoppe@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
bca8478bd4
commit
4c172a406d
@@ -3296,10 +3296,32 @@ HWTEST_F(EventTests, GivenEventWhenHostSynchronizeCalledThenExpectDownloadEventA
|
||||
event->destroy();
|
||||
}
|
||||
|
||||
HWTEST_F(EventTests, givenSecondaryCsrWhenDownloadingAllocationThenUseCorrectCsr) {
|
||||
DebugManagerStateRestore restore;
|
||||
debugManager.flags.ContextGroupSize.set(2);
|
||||
struct EventContextGroupFixture : public EventFixture<1, 0> {
|
||||
using BaseClass = EventFixture<1, 0>;
|
||||
void setUp() {
|
||||
HardwareInfo hwInfo = *defaultHwInfo;
|
||||
if (hwInfo.capabilityTable.defaultEngineType != aub_stream::EngineType::ENGINE_CCS) {
|
||||
skipped = true;
|
||||
GTEST_SKIP();
|
||||
}
|
||||
|
||||
debugManager.flags.ContextGroupSize.set(2);
|
||||
BaseClass::setUp();
|
||||
}
|
||||
|
||||
void tearDown() {
|
||||
if (!skipped) {
|
||||
BaseClass::tearDown();
|
||||
}
|
||||
}
|
||||
|
||||
DebugManagerStateRestore restore;
|
||||
bool skipped = false;
|
||||
};
|
||||
|
||||
using EventContextGroupTests = Test<EventContextGroupFixture>;
|
||||
|
||||
HWTEST_F(EventContextGroupTests, givenSecondaryCsrWhenDownloadingAllocationThenUseCorrectCsr) {
|
||||
neoDevice->getExecutionEnvironment()->calculateMaxOsContextCount();
|
||||
|
||||
neoDevice->getUltCommandStreamReceiver<FamilyType>().commandStreamReceiverType = CommandStreamReceiverType::tbx;
|
||||
@@ -3318,9 +3340,10 @@ HWTEST_F(EventTests, givenSecondaryCsrWhenDownloadingAllocationThenUseCorrectCsr
|
||||
*eventAddress = Event::STATE_INITIAL;
|
||||
|
||||
auto ultCsr = new UltCommandStreamReceiver<FamilyType>(*neoDevice->getExecutionEnvironment(), 0, 1);
|
||||
|
||||
neoDevice->secondaryCsrs.push_back(std::unique_ptr<UltCommandStreamReceiver<FamilyType>>(ultCsr));
|
||||
|
||||
OsContext osContext(0, static_cast<uint32_t>(neoDevice->getAllEngines().size() + 1), EngineDescriptorHelper::getDefaultDescriptor());
|
||||
OsContext osContext(0, static_cast<uint32_t>(neoDevice->getAllEngines().size()), EngineDescriptorHelper::getDefaultDescriptor());
|
||||
|
||||
ultCsr->setupContext(osContext);
|
||||
|
||||
|
||||
@@ -108,13 +108,14 @@ void ExecutionEnvironment::calculateMaxOsContextCount() {
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t numSecondaryContexts = 0;
|
||||
if (gfxCoreHelper.getContextGroupContextsCount() > 0) {
|
||||
MemoryManager::maxOsContextCount += numRegularEngines * gfxCoreHelper.getContextGroupContextsCount();
|
||||
MemoryManager::maxOsContextCount += numHpEngines * gfxCoreHelper.getContextGroupContextsCount();
|
||||
MemoryManager::maxOsContextCount += static_cast<uint32_t>(hwInfo->featureTable.ftrBcsInfo.count()); // LP contexts
|
||||
numSecondaryContexts += numRegularEngines * gfxCoreHelper.getContextGroupContextsCount();
|
||||
numSecondaryContexts += numHpEngines * gfxCoreHelper.getContextGroupContextsCount();
|
||||
osContextCount -= (numRegularEngines + numHpEngines);
|
||||
}
|
||||
|
||||
MemoryManager::maxOsContextCount += osContextCount * subDevicesCount + hasRootCsr;
|
||||
MemoryManager::maxOsContextCount += (numSecondaryContexts + osContextCount) * subDevicesCount + hasRootCsr;
|
||||
|
||||
if (ccsCount > 1 && debugManager.flags.EngineInstancedSubDevices.get()) {
|
||||
MemoryManager::maxOsContextCount += ccsCount * subDevicesCount;
|
||||
|
||||
@@ -5548,10 +5548,56 @@ HWTEST_F(CommandStreamReceiverContextGroupTest, givenContextGroupWhenCreatingEng
|
||||
}
|
||||
}
|
||||
|
||||
auto osContextCount = static_cast<uint32_t>(engineInstances.size()) +
|
||||
auto nonGroupCount = static_cast<uint32_t>(engineInstances.size()) - numRegularEngines - numHpEngines;
|
||||
|
||||
auto osContextCount = nonGroupCount +
|
||||
(numRegularEngines * device->getGfxCoreHelper().getContextGroupContextsCount()) +
|
||||
(numHpEngines * device->getGfxCoreHelper().getContextGroupContextsCount()) +
|
||||
static_cast<uint32_t>(hwInfo.featureTable.ftrBcsInfo.count());
|
||||
(numHpEngines * device->getGfxCoreHelper().getContextGroupContextsCount());
|
||||
|
||||
EXPECT_EQ(osContextCount, MemoryManager::maxOsContextCount);
|
||||
}
|
||||
HWTEST_F(CommandStreamReceiverContextGroupTest, givenMultipleSubDevicesAndContextGroupWhenCreatingEnginesThenSetCorrectMaxOsContextCount) {
|
||||
|
||||
HardwareInfo hwInfo = *defaultHwInfo;
|
||||
if (hwInfo.capabilityTable.defaultEngineType != aub_stream::EngineType::ENGINE_CCS) {
|
||||
GTEST_SKIP();
|
||||
}
|
||||
|
||||
DebugManagerStateRestore dbgRestorer;
|
||||
debugManager.flags.ContextGroupSize.set(8);
|
||||
debugManager.flags.CreateMultipleSubDevices.set(2);
|
||||
|
||||
hwInfo.featureTable.flags.ftrCCSNode = true;
|
||||
hwInfo.featureTable.ftrBcsInfo = 0b110;
|
||||
hwInfo.capabilityTable.blitterOperationsSupported = true;
|
||||
hwInfo.capabilityTable.defaultEngineType = aub_stream::ENGINE_CCS;
|
||||
hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 1;
|
||||
hwInfo.capabilityTable.defaultPreemptionMode = PreemptionMode::MidThread;
|
||||
|
||||
auto device = std::unique_ptr<MockDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(&hwInfo));
|
||||
|
||||
device->getExecutionEnvironment()->calculateMaxOsContextCount();
|
||||
|
||||
auto &engineInstances = device->getGfxCoreHelper().getGpgpuEngineInstances(*device->getExecutionEnvironment()->rootDeviceEnvironments[0]);
|
||||
uint32_t numRegularEngines = 0;
|
||||
uint32_t numHpEngines = 0;
|
||||
|
||||
for (const auto &engine : engineInstances) {
|
||||
if (engine.second == EngineUsage::regular) {
|
||||
numRegularEngines++;
|
||||
}
|
||||
if (engine.second == EngineUsage::highPriority) {
|
||||
numHpEngines++;
|
||||
}
|
||||
}
|
||||
|
||||
auto nonGroupCount = static_cast<uint32_t>(engineInstances.size()) - numRegularEngines - numHpEngines;
|
||||
|
||||
auto osContextCount = nonGroupCount +
|
||||
(numRegularEngines * device->getGfxCoreHelper().getContextGroupContextsCount()) +
|
||||
(numHpEngines * device->getGfxCoreHelper().getContextGroupContextsCount());
|
||||
|
||||
osContextCount = osContextCount * 2 + 1;
|
||||
|
||||
EXPECT_EQ(osContextCount, MemoryManager::maxOsContextCount);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user