feature: adjust required engines count for aggregated split

Related-To: NEO-14557

Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2025-07-25 13:27:26 +00:00
committed by Compute-Runtime-Automation
parent fa7d69209c
commit 8156c9d5aa
9 changed files with 25 additions and 8 deletions

View File

@@ -20,7 +20,7 @@ namespace L0 {
bool BcsSplit::setupDevice(uint32_t productFamily, bool internalUsage, const ze_command_queue_desc_t *desc, NEO::CommandStreamReceiver *csr) {
auto &productHelper = this->device.getProductHelper();
auto bcsSplitSettings = productHelper.getBcsSplitSettings();
auto bcsSplitSettings = productHelper.getBcsSplitSettings(this->device.getHwInfo());
if (NEO::debugManager.flags.SplitBcsRequiredTileCount.get() != -1) {
bcsSplitSettings.requiredTileCount = static_cast<uint32_t>(NEO::debugManager.flags.SplitBcsRequiredTileCount.get());
@@ -70,6 +70,10 @@ bool BcsSplit::setupQueues(const NEO::BcsSplitSettings &settings, uint32_t produ
csrs.push_back(engine->commandStreamReceiver);
}
}
if (csrs.size() >= settings.minRequiredTotalCsrCount) {
break;
}
}
}

View File

@@ -1090,6 +1090,19 @@ struct AggregatedBcsSplitTests : public ::testing::Test {
uint32_t expectedNumRootDevices = 1;
};
HWTEST2_F(AggregatedBcsSplitTests, givenLimitedEnginesCountWhenCreatingBcsSplitThenCreateCorrectQueues, IsAtLeastXeHpcCore) {
expectedEnginesCount = 2;
debugManager.flags.SplitBcsRequiredEnginesCount.set(expectedEnginesCount);
BcsSplit bcsSplit(static_cast<L0::DeviceImp &>(*device));
bcsSplit.setupDevice(device->getHwInfo().platform.eProductFamily, false, nullptr, cmdList->getCsr(false));
EXPECT_EQ(expectedEnginesCount, bcsSplit.cmdQs.size());
bcsSplit.releaseResources();
}
HWTEST_F(AggregatedBcsSplitTests, givenTransferDirectionWhenAskingIfSplitIsNeededThenReturnCorrectValue) {
debugManager.flags.SplitBcsTransferDirectionMask.set(-1);

View File

@@ -693,7 +693,7 @@ uint64_t Device::getProfilingTimerClock() {
bool Device::isBcsSplitSupported() {
auto &productHelper = getProductHelper();
auto bcsSplit = productHelper.getBcsSplitSettings().enabled && Device::isBlitSplitEnabled();
auto bcsSplit = productHelper.getBcsSplitSettings(getHardwareInfo()).enabled && Device::isBlitSplitEnabled();
if (debugManager.flags.SplitBcsCopy.get() != -1) {
bcsSplit = debugManager.flags.SplitBcsCopy.get();

View File

@@ -156,7 +156,7 @@ class ProductHelper {
virtual bool isTilePlacementResourceWaRequired(const HardwareInfo &hwInfo) const = 0;
virtual bool allowMemoryPrefetch(const HardwareInfo &hwInfo) const = 0;
virtual bool isBcsReportWaRequired(const HardwareInfo &hwInfo) const = 0;
virtual BcsSplitSettings getBcsSplitSettings() const = 0;
virtual BcsSplitSettings getBcsSplitSettings(const HardwareInfo &hwInfo) const = 0;
virtual bool isBlitCopyRequiredForLocalMemory(const RootDeviceEnvironment &rootDeviceEnvironment, const GraphicsAllocation &allocation) const = 0;
virtual bool isInitDeviceWithFirstSubmissionRequired(const HardwareInfo &hwInfo) const = 0;
virtual bool isImplicitScalingSupported(const HardwareInfo &hwInfo) const = 0;

View File

@@ -561,7 +561,7 @@ bool ProductHelperHw<gfxProduct>::isBcsReportWaRequired(const HardwareInfo &hwIn
}
template <PRODUCT_FAMILY gfxProduct>
BcsSplitSettings ProductHelperHw<gfxProduct>::getBcsSplitSettings() const {
BcsSplitSettings ProductHelperHw<gfxProduct>::getBcsSplitSettings(const HardwareInfo &hwInfo) const {
return {};
}

View File

@@ -96,7 +96,7 @@ class ProductHelperHw : public ProductHelper {
bool isCooperativeEngineSupported(const HardwareInfo &hwInfo) const override;
bool isTimestampWaitSupportedForEvents() const override;
bool isTilePlacementResourceWaRequired(const HardwareInfo &hwInfo) const override;
BcsSplitSettings getBcsSplitSettings() const override;
BcsSplitSettings getBcsSplitSettings(const HardwareInfo &hwInfo) const override;
bool isInitDeviceWithFirstSubmissionRequired(const HardwareInfo &hwInfo) const override;
bool allowMemoryPrefetch(const HardwareInfo &hwInfo) const override;
bool isBcsReportWaRequired(const HardwareInfo &hwInfo) const override;

View File

@@ -175,7 +175,7 @@ bool ProductHelperHw<gfxProduct>::isTlbFlushRequired() const {
}
template <>
BcsSplitSettings ProductHelperHw<gfxProduct>::getBcsSplitSettings() const {
BcsSplitSettings ProductHelperHw<gfxProduct>::getBcsSplitSettings(const HardwareInfo &hwInfo) const {
constexpr BcsInfoMask oddLinkedCopyEnginesMask = NEO::EngineHelpers::oddLinkedCopyEnginesMask;
return {

View File

@@ -100,7 +100,7 @@ HWTEST_F(ProductHelperTest, givenProductHelperWhenGettingSharedSystemMemCapabili
HWTEST_F(ProductHelperTest, givenProductHelperWhenAskedIfIsBlitSplitEnqueueWARequiredThenReturnFalse) {
EXPECT_FALSE(productHelper->getBcsSplitSettings().enabled);
EXPECT_FALSE(productHelper->getBcsSplitSettings(pInHwInfo).enabled);
}
HWTEST_F(ProductHelperTest, givenProductHelperWhenGettingMemoryCapabilitiesThenCorrectValueIsReturned) {

View File

@@ -96,7 +96,7 @@ PVCTEST_F(PvcProductHelperLinux, givenOsInterfaceIsNullWhenGetDeviceMemoryPhysic
}
PVCTEST_F(PvcProductHelperLinux, givenProductHelperWhenAskedIsBlitSplitEnqueueWARequiredThenReturnTrue) {
auto bcsSplitSettings = productHelper->getBcsSplitSettings();
auto bcsSplitSettings = productHelper->getBcsSplitSettings(pInHwInfo);
EXPECT_TRUE(bcsSplitSettings.enabled);
EXPECT_EQ(NEO::EngineHelpers::oddLinkedCopyEnginesMask, bcsSplitSettings.allEngines.to_ulong());