mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-06 02:18:05 +08:00
fix: reset all slm arguments of inactive kernel in mutable group
Signed-off-by: Zbigniew Zdanowicz <zbigniew.zdanowicz@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
57add55b20
commit
e768366eac
@@ -390,7 +390,8 @@ inline ze_result_t MutableCommandListCoreFamily<gfxCoreFamily>::appendLaunchKern
|
|||||||
this->appendKernelMutableComputeWalker = (*mutableWalkerCmds.rbegin()).get();
|
this->appendKernelMutableComputeWalker = (*mutableWalkerCmds.rbegin()).get();
|
||||||
retVal = this->parseDispatchedKernel(kernel, appendKernelMutableComputeWalker, mutableCmdlistAppendLaunchParams.extraPayloadSpaceForKernelGroup,
|
retVal = this->parseDispatchedKernel(kernel, appendKernelMutableComputeWalker, mutableCmdlistAppendLaunchParams.extraPayloadSpaceForKernelGroup,
|
||||||
static_cast<L0::KernelImp *>(kernel)->getSyncBufferAllocation(),
|
static_cast<L0::KernelImp *>(kernel)->getSyncBufferAllocation(),
|
||||||
static_cast<L0::KernelImp *>(kernel)->getRegionGroupBarrierAllocation());
|
static_cast<L0::KernelImp *>(kernel)->getRegionGroupBarrierAllocation(),
|
||||||
|
false);
|
||||||
if (retVal != ZE_RESULT_SUCCESS) {
|
if (retVal != ZE_RESULT_SUCCESS) {
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
@@ -910,7 +911,8 @@ ze_result_t MutableCommandListCoreFamily<gfxCoreFamily>::captureKernelGroupVaria
|
|||||||
viewKernelMutableComputeWalker,
|
viewKernelMutableComputeWalker,
|
||||||
(parentMutableAppendLaunchParams.maxKernelGroupIndirectHeap - mutableKernel->getKernel()->getIndirectSize()),
|
(parentMutableAppendLaunchParams.maxKernelGroupIndirectHeap - mutableKernel->getKernel()->getIndirectSize()),
|
||||||
nullptr,
|
nullptr,
|
||||||
nullptr);
|
nullptr,
|
||||||
|
true);
|
||||||
if (retVal != ZE_RESULT_SUCCESS) {
|
if (retVal != ZE_RESULT_SUCCESS) {
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
@@ -955,9 +957,6 @@ ze_result_t MutableCommandListCoreFamily<gfxCoreFamily>::captureKernelGroupVaria
|
|||||||
if (viewKernelAppendLaunchParams.globalOffsetVariable != nullptr) {
|
if (viewKernelAppendLaunchParams.globalOffsetVariable != nullptr) {
|
||||||
viewKernelAppendLaunchParams.globalOffsetVariable->resetGlobalOffsetVariable();
|
viewKernelAppendLaunchParams.globalOffsetVariable->resetGlobalOffsetVariable();
|
||||||
}
|
}
|
||||||
if (viewKernelAppendLaunchParams.lastSlmArgumentVariable != nullptr) {
|
|
||||||
viewKernelAppendLaunchParams.lastSlmArgumentVariable->resetSlmVariable();
|
|
||||||
}
|
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -261,7 +261,8 @@ KernelData *MutableCommandListImp::getKernelData(L0::Kernel *kernel) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ze_result_t MutableCommandListImp::parseDispatchedKernel(L0::Kernel *kernel, MutableComputeWalker *mutableComputeWalker,
|
ze_result_t MutableCommandListImp::parseDispatchedKernel(L0::Kernel *kernel, MutableComputeWalker *mutableComputeWalker,
|
||||||
size_t extraHeapSize, NEO::GraphicsAllocation *syncBuffer, NEO::GraphicsAllocation *regionBarrier) {
|
size_t extraHeapSize, NEO::GraphicsAllocation *syncBuffer, NEO::GraphicsAllocation *regionBarrier,
|
||||||
|
bool resetSlmArgumentValues) {
|
||||||
auto kernelData = getKernelData(kernel);
|
auto kernelData = getKernelData(kernel);
|
||||||
auto &kernelDescriptor = kernel->getKernelDescriptor();
|
auto &kernelDescriptor = kernel->getKernelDescriptor();
|
||||||
|
|
||||||
@@ -336,13 +337,20 @@ ze_result_t MutableCommandListImp::parseDispatchedKernel(L0::Kernel *kernel, Mut
|
|||||||
DEBUG_BREAK_IF(args.size() != vars.size());
|
DEBUG_BREAK_IF(args.size() != vars.size());
|
||||||
auto &slmArgOffsetValues = static_cast<L0::KernelImp *>(kernel)->getSlmArgOffsetValues();
|
auto &slmArgOffsetValues = static_cast<L0::KernelImp *>(kernel)->getSlmArgOffsetValues();
|
||||||
auto &slmArgSizes = static_cast<L0::KernelImp *>(kernel)->getSlmArgSizes();
|
auto &slmArgSizes = static_cast<L0::KernelImp *>(kernel)->getSlmArgSizes();
|
||||||
|
auto currentSlmArgSize = undefined<SlmOffset>;
|
||||||
|
auto currentSlmArgOffset = undefined<SlmOffset>;
|
||||||
for (size_t i = 0; i < args.size(); ++i) {
|
for (size_t i = 0; i < args.size(); ++i) {
|
||||||
if (vars[i] == nullptr) {
|
if (vars[i] == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (resetSlmArgumentValues == false) {
|
||||||
|
currentSlmArgSize = slmArgSizes[i];
|
||||||
|
currentSlmArgOffset = slmArgOffsetValues[i];
|
||||||
|
}
|
||||||
auto retVal = Variable::fromHandle(vars[i])->addKernelArgUsage(args[i], kernelIohStartOffset, kernelFullOffset, kernelSshOffset,
|
auto retVal = Variable::fromHandle(vars[i])->addKernelArgUsage(args[i], kernelIohStartOffset, kernelFullOffset, kernelSshOffset,
|
||||||
slmArgSizes[i], slmArgOffsetValues[i],
|
currentSlmArgSize, currentSlmArgOffset,
|
||||||
walkerCmdOffset, mutableComputeWalker, kernelData->passInlineData);
|
walkerCmdOffset, mutableComputeWalker,
|
||||||
|
kernelData->passInlineData);
|
||||||
if (retVal != ZE_RESULT_SUCCESS) {
|
if (retVal != ZE_RESULT_SUCCESS) {
|
||||||
DEBUG_BREAK_IF(true);
|
DEBUG_BREAK_IF(true);
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|||||||
@@ -150,7 +150,8 @@ struct MutableCommandListImp : public MutableCommandList {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
ze_result_t parseDispatchedKernel(L0::Kernel *kernel, MutableComputeWalker *mutableComputeWalker,
|
ze_result_t parseDispatchedKernel(L0::Kernel *kernel, MutableComputeWalker *mutableComputeWalker,
|
||||||
size_t extraHeapSize, NEO::GraphicsAllocation *syncBuffer, NEO::GraphicsAllocation *regionBarrier);
|
size_t extraHeapSize, NEO::GraphicsAllocation *syncBuffer, NEO::GraphicsAllocation *regionBarrier,
|
||||||
|
bool resetSlmArgumentValues);
|
||||||
ze_result_t addVariableDispatch(const NEO::KernelDescriptor &kernelDescriptor, KernelDispatch &kernelDispatch, Variable *groupSize, Variable *groupCount, Variable *globalOffset,
|
ze_result_t addVariableDispatch(const NEO::KernelDescriptor &kernelDescriptor, KernelDispatch &kernelDispatch, Variable *groupSize, Variable *groupCount, Variable *globalOffset,
|
||||||
Variable *lastSlmArgumentVariable, MutableComputeWalker *mutableComputeWalker, const MutableKernelDispatchParameters &dispatchParams);
|
Variable *lastSlmArgumentVariable, MutableComputeWalker *mutableComputeWalker, const MutableKernelDispatchParameters &dispatchParams);
|
||||||
|
|
||||||
|
|||||||
@@ -2258,5 +2258,60 @@ HWCMDTEST_F(IGFX_XE_HP_CORE,
|
|||||||
EXPECT_TRUE(isAllocationInMutableResidency(mutableCommandList.get(), kernelSlmRegularIsaAllocation));
|
EXPECT_TRUE(isAllocationInMutableResidency(mutableCommandList.get(), kernelSlmRegularIsaAllocation));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWCMDTEST_F(IGFX_XE_HP_CORE,
|
||||||
|
MutableCommandListKernelTest,
|
||||||
|
givenKernelWithTwoSlmArgumentsWhenProvidedAsInactiveInMutableKernelGroupThenItsSlmVariablesAreUndefined) {
|
||||||
|
|
||||||
|
// set kernel arg 0, 1 => slm, slm
|
||||||
|
resizeKernelArg(2);
|
||||||
|
prepareKernelArg(0, L0::MCL::VariableType::slmBuffer, kernelAllMask);
|
||||||
|
prepareKernelArg(1, L0::MCL::VariableType::slmBuffer, kernelAllMask);
|
||||||
|
|
||||||
|
uint32_t slmSize = 512;
|
||||||
|
|
||||||
|
auto result = kernel->setArgBuffer(0, slmSize, nullptr);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
result = kernel->setArgBuffer(1, slmSize, nullptr);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
|
||||||
|
result = kernel2->setArgBuffer(0, slmSize, nullptr);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
result = kernel2->setArgBuffer(1, slmSize, nullptr);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
|
||||||
|
mutableCommandIdDesc.flags = kernelIsaMutationFlags;
|
||||||
|
|
||||||
|
result = mutableCommandList->getNextCommandId(&mutableCommandIdDesc, 2, kernelMutationGroup, &commandId);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
|
||||||
|
result = mutableCommandList->appendLaunchKernel(kernelHandle, this->testGroupCount, nullptr, 0, nullptr, this->testLaunchParams);
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
|
||||||
|
result = mutableCommandList->close();
|
||||||
|
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||||
|
|
||||||
|
auto kernelSlmBufferVariables = getVariableList(commandId, L0::MCL::VariableType::slmBuffer, kernel.get());
|
||||||
|
ASSERT_EQ(2u, kernelSlmBufferVariables.size());
|
||||||
|
|
||||||
|
auto kernel1SlmBufferVariable1 = static_cast<Variable *>(kernelSlmBufferVariables[0]);
|
||||||
|
EXPECT_EQ(slmSize, kernel1SlmBufferVariable1->slmValue.slmSize);
|
||||||
|
EXPECT_NE(undefined<L0::MCL::SlmOffset>, kernel1SlmBufferVariable1->slmValue.slmOffsetValue);
|
||||||
|
|
||||||
|
auto kernel1SlmBufferVariable2 = static_cast<Variable *>(kernelSlmBufferVariables[0]);
|
||||||
|
EXPECT_EQ(slmSize, kernel1SlmBufferVariable2->slmValue.slmSize);
|
||||||
|
EXPECT_NE(undefined<L0::MCL::SlmOffset>, kernel1SlmBufferVariable2->slmValue.slmOffsetValue);
|
||||||
|
|
||||||
|
kernelSlmBufferVariables = getVariableList(commandId, L0::MCL::VariableType::slmBuffer, kernel2.get());
|
||||||
|
ASSERT_EQ(2u, kernelSlmBufferVariables.size());
|
||||||
|
|
||||||
|
auto kernel2SlmBufferVariable1 = static_cast<Variable *>(kernelSlmBufferVariables[0]);
|
||||||
|
EXPECT_EQ(undefined<L0::MCL::SlmOffset>, kernel2SlmBufferVariable1->slmValue.slmSize);
|
||||||
|
EXPECT_EQ(undefined<L0::MCL::SlmOffset>, kernel2SlmBufferVariable1->slmValue.slmOffsetValue);
|
||||||
|
|
||||||
|
auto kernel2SlmBufferVariable2 = static_cast<Variable *>(kernelSlmBufferVariables[0]);
|
||||||
|
EXPECT_EQ(undefined<L0::MCL::SlmOffset>, kernel2SlmBufferVariable2->slmValue.slmSize);
|
||||||
|
EXPECT_EQ(undefined<L0::MCL::SlmOffset>, kernel2SlmBufferVariable2->slmValue.slmOffsetValue);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ult
|
} // namespace ult
|
||||||
} // namespace L0
|
} // namespace L0
|
||||||
|
|||||||
Reference in New Issue
Block a user