Use timestamp post sync always for multi tile partitioned walkers

Related-To: NEO-6262

Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
Zbigniew Zdanowicz 2021-12-16 14:29:15 +00:00 committed by Compute-Runtime-Automation
parent e040c8c6bb
commit 0a139caf77
2 changed files with 44 additions and 8 deletions

View File

@ -274,6 +274,9 @@ void EncodeDispatchKernel<Family>::encode(CommandContainer &container,
if (ImplicitScalingHelper::isImplicitScalingEnabled(device->getDeviceBitfield(), !isCooperative) &&
!isInternal) {
const uint64_t workPartitionAllocationGpuVa = device->getDefaultEngine().commandStreamReceiver->getWorkPartitionAllocationGpuAddress();
if (eventAddress != 0) {
postSync.setOperation(POSTSYNC_DATA::OPERATION_WRITE_TIMESTAMP);
}
ImplicitScalingDispatch<Family>::dispatchCommands(*listCmdBufferStream,
walkerCmd,
device->getDeviceBitfield(),

View File

@ -887,6 +887,7 @@ struct CommandEncodeStatesImplicitScalingFixture : public CommandEncodeStatesFix
DebugManager.flags.CreateMultipleSubDevices.set(2);
osLocalMemoryBackup = std::make_unique<VariableBackup<bool>>(&OSInterface::osEnableLocalMemory, true);
mockDeviceBackup = std::make_unique<VariableBackup<bool>>(&MockDevice::createSingleDevice, false);
apiSupportBackup = std::make_unique<VariableBackup<bool>>(&ImplicitScaling::apiSupport, true);
CommandEncodeStatesFixture::SetUp();
}
@ -898,27 +899,62 @@ struct CommandEncodeStatesImplicitScalingFixture : public CommandEncodeStatesFix
DebugManagerStateRestore restorer;
std::unique_ptr<VariableBackup<bool>> osLocalMemoryBackup;
std::unique_ptr<VariableBackup<bool>> mockDeviceBackup;
std::unique_ptr<VariableBackup<bool>> apiSupportBackup;
};
struct CommandEncodeStatesDynamicImplicitScaling : ::testing::Test, CommandEncodeStatesImplicitScalingFixture {
void SetUp() override {
using CommandEncodeStatesImplicitScaling = Test<CommandEncodeStatesImplicitScalingFixture>;
HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesImplicitScaling,
givenStaticPartitioningWhenNonTimestampEventProvidedThenExpectTimestampComputeWalkerPostSync) {
using WALKER_TYPE = typename FamilyType::WALKER_TYPE;
using POSTSYNC_DATA = typename FamilyType::POSTSYNC_DATA;
uint32_t dims[] = {16, 1, 1};
std::unique_ptr<MockDispatchKernelEncoder> dispatchInterface(new MockDispatchKernelEncoder());
uint32_t partitionCount = 0;
bool requiresUncachedMocs = false;
uint64_t eventAddress = 0xFF112233000;
constexpr bool timestampEvent = false;
EncodeDispatchKernel<FamilyType>::encode(*cmdContainer.get(), dims, false, false, dispatchInterface.get(), eventAddress, timestampEvent, false, pDevice,
NEO::PreemptionMode::Disabled, requiresUncachedMocs, false, partitionCount, false, false);
size_t usedBuffer = cmdContainer->getCommandStream()->getUsed();
EXPECT_EQ(2u, partitionCount);
GenCmdList partitionedWalkerList;
CmdParse<FamilyType>::parseCommandBuffer(
partitionedWalkerList,
cmdContainer->getCommandStream()->getCpuBase(),
usedBuffer);
auto itor = find<WALKER_TYPE *>(partitionedWalkerList.begin(), partitionedWalkerList.end());
ASSERT_NE(itor, partitionedWalkerList.end());
auto partitionWalkerCmd = genCmdCast<WALKER_TYPE *>(*itor);
auto &postSync = partitionWalkerCmd->getPostSync();
EXPECT_EQ(POSTSYNC_DATA::OPERATION_WRITE_TIMESTAMP, postSync.getOperation());
EXPECT_EQ(eventAddress, postSync.getDestinationAddress());
}
struct CommandEncodeStatesDynamicImplicitScalingFixture : CommandEncodeStatesImplicitScalingFixture {
void SetUp() {
DebugManager.flags.EnableStaticPartitioning.set(0);
CommandEncodeStatesImplicitScalingFixture::SetUp();
}
void TearDown() override {
void TearDown() {
CommandEncodeStatesImplicitScalingFixture::TearDown();
}
DebugManagerStateRestore restore{};
};
using CommandEncodeStatesDynamicImplicitScaling = Test<CommandEncodeStatesDynamicImplicitScalingFixture>;
HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesDynamicImplicitScaling, givenImplicitScalingWhenEncodingDispatchKernelThenExpectPartitionCommandBuffer) {
using WALKER_TYPE = typename FamilyType::WALKER_TYPE;
using BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
VariableBackup<bool> backup(&ImplicitScaling::apiSupport, true);
uint32_t dims[] = {16, 1, 1};
std::unique_ptr<MockDispatchKernelEncoder> dispatchInterface(new MockDispatchKernelEncoder());
@ -986,7 +1022,6 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesDynamicImplicitScaling, givenImp
using MI_ATOMIC = typename FamilyType::MI_ATOMIC;
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
VariableBackup<bool> backup(&ImplicitScaling::apiSupport, true);
VariableBackup<bool> pipeControlConfigBackup(&ImplicitScalingDispatch<FamilyType>::getPipeControlStallRequired(), true);
uint32_t dims[] = {16, 1, 1};
@ -1093,7 +1128,6 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesDynamicImplicitScaling,
using MI_ATOMIC = typename FamilyType::MI_ATOMIC;
using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
VariableBackup<bool> backup(&ImplicitScaling::apiSupport, true);
VariableBackup<bool> pipeControlConfigBackup(&ImplicitScalingDispatch<FamilyType>::getPipeControlStallRequired(), false);
uint32_t dims[] = {16, 1, 1};
@ -1161,7 +1195,6 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesDynamicImplicitScaling, givenImp
using WALKER_TYPE = typename FamilyType::WALKER_TYPE;
using BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
VariableBackup<bool> backup(&ImplicitScaling::apiSupport, true);
uint32_t dims[] = {16, 1, 1};
std::unique_ptr<MockDispatchKernelEncoder> dispatchInterface(new MockDispatchKernelEncoder());