Skip to content

Commit 6986d5d

Browse files
Add helper functions for memory compression to CSR
Signed-off-by: Slawomir Milczarek <[email protected]>
1 parent fb75390 commit 6986d5d

23 files changed

+180
-46
lines changed

level_zero/core/source/cmdqueue/cmdqueue_hw_base.inl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ void CommandQueueHw<gfxCoreFamily>::programGeneralStateBaseAddress(uint64_t gsba
6262
neoDevice->getMemoryManager()->getInternalHeapBaseAddress(device->getRootDeviceIndex(), !hwHelper.useSystemMemoryPlacementForISA(hwInfo)),
6363
true,
6464
neoDevice->getGmmHelper(),
65-
false);
65+
false,
66+
NEO::MemoryCompressionState::NotApplicable);
6667
*pSbaCmd = sbaCmd;
6768
gsbaInit = true;
6869

opencl/source/command_queue/enqueue_common.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
676676
auto specialPipelineSelectMode = false;
677677
Kernel *kernel = nullptr;
678678
bool usePerDssBackedBuffer = false;
679+
bool auxTranslationRequired = false;
679680

680681
for (auto &dispatchInfo : multiDispatchInfo) {
681682
if (kernel != dispatchInfo.getKernel()) {
@@ -689,6 +690,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
689690
auto numGrfRequiredByKernel = static_cast<uint32_t>(kernel->getKernelInfo(rootDeviceIndex).kernelDescriptor.kernelAttributes.numGrfRequired);
690691
numGrfRequired = std::max(numGrfRequired, numGrfRequiredByKernel);
691692
specialPipelineSelectMode |= kernel->requiresSpecialPipelineSelectMode();
693+
auxTranslationRequired |= kernel->isAuxTranslationRequired();
692694
if (kernel->hasUncacheableStatelessArgs()) {
693695
anyUncacheableArgs = true;
694696
}
@@ -734,6 +736,8 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
734736
}
735737
}
736738

739+
auto memoryCompressionState = getGpgpuCommandStreamReceiver().getMemoryCompressionState(auxTranslationRequired);
740+
737741
DispatchFlags dispatchFlags(
738742
{}, //csrDependencies
739743
&timestampPacketDependencies.barrierNodes, //barrierTimestampPacketNodes
@@ -746,6 +750,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
746750
kernel->getThreadArbitrationPolicy(), //threadArbitrationPolicy
747751
kernel->getAdditionalKernelExecInfo(), //additionalKernelExecInfo
748752
kernel->getExecutionType(), //kernelExecutionType
753+
memoryCompressionState, //memoryCompressionState
749754
getSliceCount(), //sliceCount
750755
blocking, //blocking
751756
shouldFlushDC(commandType, printfHandler) || allocNeedsFlushDC, //dcFlush
@@ -961,6 +966,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
961966
ThreadArbitrationPolicy::NotPresent, //threadArbitrationPolicy
962967
AdditionalKernelExecInfo::NotApplicable, //additionalKernelExecInfo
963968
KernelExecutionType::NotApplicable, //kernelExecutionType
969+
MemoryCompressionState::NotApplicable, //memoryCompressionState
964970
getSliceCount(), //sliceCount
965971
blocking, //blocking
966972
false, //dcFlush

opencl/source/helpers/task_information.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ CompletionStamp &CommandMapUnmap::submit(uint32_t taskLevel, bool terminated) {
6262
ThreadArbitrationPolicy::NotPresent, //threadArbitrationPolicy
6363
AdditionalKernelExecInfo::NotApplicable, //additionalKernelExecInfo
6464
KernelExecutionType::NotApplicable, //kernelExecutionType
65+
MemoryCompressionState::NotApplicable, //memoryCompressionState
6566
commandQueue.getSliceCount(), //sliceCount
6667
true, //blocking
6768
true, //dcFlush
@@ -212,6 +213,8 @@ CompletionStamp &CommandComputeKernel::submit(uint32_t taskLevel, bool terminate
212213
auto rootDeviceIndex = commandQueue.getDevice().getRootDeviceIndex();
213214
const auto &kernelDescriptor = kernel->getKernelInfo(rootDeviceIndex).kernelDescriptor;
214215

216+
auto memoryCompressionState = commandStreamReceiver.getMemoryCompressionState(kernel->isAuxTranslationRequired());
217+
215218
DispatchFlags dispatchFlags(
216219
{}, //csrDependencies
217220
nullptr, //barrierTimestampPacketNodes
@@ -224,6 +227,7 @@ CompletionStamp &CommandComputeKernel::submit(uint32_t taskLevel, bool terminate
224227
kernel->getThreadArbitrationPolicy(), //threadArbitrationPolicy
225228
kernel->getAdditionalKernelExecInfo(), //additionalKernelExecInfo
226229
kernel->getExecutionType(), //kernelExecutionType
230+
memoryCompressionState, //memoryCompressionState
227231
commandQueue.getSliceCount(), //sliceCount
228232
true, //blocking
229233
flushDC, //dcFlush
@@ -346,6 +350,7 @@ CompletionStamp &CommandWithoutKernel::submit(uint32_t taskLevel, bool terminate
346350
ThreadArbitrationPolicy::NotPresent, //threadArbitrationPolicy
347351
AdditionalKernelExecInfo::NotApplicable, //additionalKernelExecInfo
348352
KernelExecutionType::NotApplicable, //kernelExecutionType
353+
MemoryCompressionState::NotApplicable, //memoryCompressionState
349354
commandQueue.getSliceCount(), //sliceCount
350355
true, //blocking
351356
false, //dcFlush

opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_1_tests.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1190,3 +1190,52 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenDispatchFlagsWhenCallFlushTas
11901190

11911191
EXPECT_EQ(dispatchFlags.threadArbitrationPolicy, mockCsr->requiredThreadArbitrationPolicy);
11921192
}
1193+
1194+
class CommandStreamReceiverFlushTaskMemoryCompressionTests : public UltCommandStreamReceiverTest,
1195+
public ::testing::WithParamInterface<MemoryCompressionState> {};
1196+
1197+
HWTEST_P(CommandStreamReceiverFlushTaskMemoryCompressionTests, givenCsrWithMemoryCompressionStateApplicableWhenFlushTaskIsCalledThenUpdateLastMemoryCompressionState) {
1198+
auto &mockCsr = pDevice->getUltCommandStreamReceiver<FamilyType>();
1199+
1200+
CommandQueueHw<FamilyType> commandQueue(nullptr, pClDevice, 0, false);
1201+
auto &commandStream = commandQueue.getCS(4096u);
1202+
DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
1203+
1204+
dispatchFlags.memoryCompressionState = GetParam();
1205+
1206+
if (dispatchFlags.memoryCompressionState == MemoryCompressionState::NotApplicable) {
1207+
1208+
for (auto memoryCompressionState : {MemoryCompressionState::NotApplicable, MemoryCompressionState::Disabled, MemoryCompressionState::Enabled}) {
1209+
mockCsr.lastMemoryCompressionState = memoryCompressionState;
1210+
MemoryCompressionState lastMemoryCompressionState = mockCsr.lastMemoryCompressionState;
1211+
mockCsr.flushTask(commandStream,
1212+
0,
1213+
dsh,
1214+
ioh,
1215+
ssh,
1216+
taskLevel,
1217+
dispatchFlags,
1218+
*pDevice);
1219+
EXPECT_EQ(lastMemoryCompressionState, mockCsr.lastMemoryCompressionState);
1220+
}
1221+
} else {
1222+
1223+
for (auto memoryCompressionState : {MemoryCompressionState::NotApplicable, MemoryCompressionState::Disabled, MemoryCompressionState::Enabled}) {
1224+
mockCsr.lastMemoryCompressionState = memoryCompressionState;
1225+
mockCsr.flushTask(commandStream,
1226+
0,
1227+
dsh,
1228+
ioh,
1229+
ssh,
1230+
taskLevel,
1231+
dispatchFlags,
1232+
*pDevice);
1233+
EXPECT_EQ(dispatchFlags.memoryCompressionState, mockCsr.lastMemoryCompressionState);
1234+
}
1235+
}
1236+
}
1237+
1238+
INSTANTIATE_TEST_CASE_P(
1239+
CommandStreamReceiverFlushTaskMemoryCompressionTestsValues,
1240+
CommandStreamReceiverFlushTaskMemoryCompressionTests,
1241+
testing::Values(MemoryCompressionState::NotApplicable, MemoryCompressionState::Disabled, MemoryCompressionState::Enabled));

opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_2_tests.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1208,7 +1208,8 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, givenCsrWhenGen
12081208
generalStateBaseAddress,
12091209
true,
12101210
pDevice->getGmmHelper(),
1211-
false);
1211+
false,
1212+
MemoryCompressionState::NotApplicable);
12121213

12131214
EXPECT_NE(generalStateBaseAddress, sbaCmd.getGeneralStateBaseAddress());
12141215
EXPECT_EQ(GmmHelper::decanonize(generalStateBaseAddress), sbaCmd.getGeneralStateBaseAddress());
@@ -1229,7 +1230,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenNonZeroGeneralStateBaseAddres
12291230
generalStateBaseAddress,
12301231
true,
12311232
pDevice->getGmmHelper(),
1232-
false);
1233+
false,
1234+
MemoryCompressionState::NotApplicable);
12331235

12341236
EXPECT_EQ(0ull, sbaCmd.getGeneralStateBaseAddress());
12351237
EXPECT_EQ(0u, sbaCmd.getGeneralStateBufferSize());
@@ -1252,7 +1254,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenNonZeroInternalHeapBaseAddres
12521254
0,
12531255
false,
12541256
pDevice->getGmmHelper(),
1255-
false);
1257+
false,
1258+
MemoryCompressionState::NotApplicable);
12561259

12571260
EXPECT_FALSE(sbaCmd.getInstructionBaseAddressModifyEnable());
12581261
EXPECT_EQ(0ull, sbaCmd.getInstructionBaseAddress());
@@ -1280,7 +1283,8 @@ HWCMDTEST_F(IGFX_GEN8_CORE, CommandStreamReceiverFlushTaskTests, givenSbaProgram
12801283
instructionHeapBase,
12811284
true,
12821285
pDevice->getGmmHelper(),
1283-
false);
1286+
false,
1287+
MemoryCompressionState::NotApplicable);
12841288

12851289
EXPECT_FALSE(sbaCmd.getDynamicStateBaseAddressModifyEnable());
12861290
EXPECT_FALSE(sbaCmd.getDynamicStateBufferSizeModifyEnable());

opencl/test/unit_test/command_stream/command_stream_receiver_tests.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,15 @@ TEST(CommandStreamReceiverSimpleTest, givenCsrWhenSubmitiingBatchBufferThenTaskC
299299
executionEnvironment.memoryManager->freeGraphicsMemoryImpl(commandBuffer);
300300
}
301301

302+
HWTEST_F(CommandStreamReceiverTest, givenCommandStreamReceiverWhenCallingGetMemoryCompressionStateThenReturnNotApplicable) {
303+
CommandStreamReceiverHw<FamilyType> commandStreamReceiver(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield());
304+
305+
for (bool auxTranslationRequired : {false, true}) {
306+
auto memoryCompressionState = commandStreamReceiver.getMemoryCompressionState(auxTranslationRequired);
307+
EXPECT_EQ(MemoryCompressionState::NotApplicable, memoryCompressionState);
308+
}
309+
}
310+
302311
HWTEST_F(CommandStreamReceiverTest, givenDebugVariableEnabledWhenCreatingCsrThenEnableTimestampPacketWriteMode) {
303312
DebugManagerStateRestore restore;
304313

opencl/test/unit_test/command_stream/compute_mode_tests.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,6 @@ struct ComputeModeRequirements : public ::testing::Test {
8181

8282
CommandStreamReceiver *csr = nullptr;
8383
std::unique_ptr<MockDevice> device;
84-
DispatchFlags flags{{}, nullptr, {}, nullptr, QueueThrottle::MEDIUM, PreemptionMode::Disabled, GrfConfig::DefaultGrfNumber, L3CachingSettings::l3CacheOn, ThreadArbitrationPolicy::NotPresent, AdditionalKernelExecInfo::NotApplicable, KernelExecutionType::NotApplicable, QueueSliceCount::defaultSliceCount, false, false, false, false, false, false, false, false, false, false, false, false};
84+
DispatchFlags flags{{}, nullptr, {}, nullptr, QueueThrottle::MEDIUM, PreemptionMode::Disabled, GrfConfig::DefaultGrfNumber, L3CachingSettings::l3CacheOn, ThreadArbitrationPolicy::NotPresent, AdditionalKernelExecInfo::NotApplicable, KernelExecutionType::NotApplicable, MemoryCompressionState::NotApplicable, QueueSliceCount::defaultSliceCount, false, false, false, false, false, false, false, false, false, false, false, false};
8585
GraphicsAllocation *alloc = nullptr;
8686
};

opencl/test/unit_test/kernel/kernel_tests.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,10 @@ class CommandStreamReceiverMock : public CommandStreamReceiver {
471471

472472
bool isMultiOsContextCapable() const override { return false; }
473473

474+
MemoryCompressionState getMemoryCompressionState(bool auxTranslationRequired) const override {
475+
return MemoryCompressionState::NotApplicable;
476+
}
477+
474478
CommandStreamReceiverMock() : BaseClass(*(new ExecutionEnvironment), 0, 1) {
475479
this->mockExecutionEnvironment.reset(&this->executionEnvironment);
476480
executionEnvironment.prepareRootDeviceEnvironments(1);

opencl/test/unit_test/libult/ult_command_stream_receiver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class UltCommandStreamReceiver : public CommandStreamReceiverHw<GfxFamily>, publ
7575
using BaseClass::CommandStreamReceiver::isStateSipSent;
7676
using BaseClass::CommandStreamReceiver::lastKernelExecutionType;
7777
using BaseClass::CommandStreamReceiver::lastMediaSamplerConfig;
78+
using BaseClass::CommandStreamReceiver::lastMemoryCompressionState;
7879
using BaseClass::CommandStreamReceiver::lastPreemptionMode;
7980
using BaseClass::CommandStreamReceiver::lastSentCoherencyRequest;
8081
using BaseClass::CommandStreamReceiver::lastSentL3Config;
@@ -289,6 +290,7 @@ class UltCommandStreamReceiver : public CommandStreamReceiverHw<GfxFamily>, publ
289290
bool flushBatchedSubmissionsCalled = false;
290291
bool initProgrammingFlagsCalled = false;
291292
bool multiOsContextCapable = false;
293+
bool memoryCompressionEnabled = false;
292294
bool directSubmissionAvailable = false;
293295
bool blitterDirectSubmissionAvailable = false;
294296
bool callBaseIsMultiOsContextCapable = false;

shared/source/command_container/command_encoder_bdw_plus.inl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,8 @@ void EncodeStateBaseAddress<Family>::encode(CommandContainer &container, STATE_B
354354
container.getInstructionHeapBaseAddress(),
355355
false,
356356
gmmHelper,
357-
false);
357+
false,
358+
MemoryCompressionState::NotApplicable);
358359

359360
auto pCmd = reinterpret_cast<STATE_BASE_ADDRESS *>(container.getCommandStream()->getSpace(sizeof(STATE_BASE_ADDRESS)));
360361
*pCmd = sbaCmd;

0 commit comments

Comments
 (0)