Skip to content

Commit e295e74

Browse files
Add preemption flags creation to shared code
Signed-off-by: Zbigniew Zdanowicz <[email protected]>
1 parent 3b35ba5 commit e295e74

File tree

7 files changed

+61
-78
lines changed

7 files changed

+61
-78
lines changed

level_zero/core/source/cmdlist/cmdlist.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,7 @@ bool CommandList::isCopyOnly() const {
116116
}
117117

118118
NEO::PreemptionMode CommandList::obtainFunctionPreemptionMode(Kernel *kernel) {
119-
auto functionAttributes = kernel->getImmutableData()->getDescriptor().kernelAttributes;
120-
NEO::PreemptionFlags flags = {};
121-
flags.flags.disabledMidThreadPreemptionKernel = functionAttributes.flags.requiresDisabledMidThreadPreemption;
122-
flags.flags.usesFencesForReadWriteImages = functionAttributes.flags.usesFencesForReadWriteImages;
123-
flags.flags.deviceSupportsVmePreemption = device->getDeviceInfo().vmeAvcSupportsPreemption;
124-
flags.flags.disablePerCtxtPreemptionGranularityControl = device->getHwInfo().workaroundTable.waDisablePerCtxtPreemptionGranularityControl;
125-
flags.flags.disableLSQCROPERFforOCL = device->getHwInfo().workaroundTable.waDisableLSQCROPERFforOCL;
126-
119+
NEO::PreemptionFlags flags = NEO::PreemptionHelper::createPreemptionLevelFlags(*device->getNEODevice(), &kernel->getImmutableData()->getDescriptor(), false);
127120
return NEO::PreemptionHelper::taskPreemptionMode(device->getDevicePreemptionMode(), flags);
128121
}
129122

opencl/source/helpers/cl_preemption_helper.cpp

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,20 @@
1111

1212
namespace NEO {
1313

14-
void ClPreemptionHelper::setPreemptionLevelFlags(PreemptionFlags &flags, Device &device, Kernel *kernel) {
15-
if (kernel) {
16-
const auto &kernelDescriptor = kernel->getKernelInfo().kernelDescriptor;
17-
flags.flags.disabledMidThreadPreemptionKernel = kernelDescriptor.kernelAttributes.flags.requiresDisabledMidThreadPreemption;
18-
flags.flags.vmeKernel = kernel->isVmeKernel();
19-
flags.flags.usesFencesForReadWriteImages = kernelDescriptor.kernelAttributes.flags.usesFencesForReadWriteImages;
20-
flags.flags.schedulerKernel = kernel->isSchedulerKernel;
21-
}
22-
flags.flags.deviceSupportsVmePreemption = device.getDeviceInfo().vmeAvcSupportsPreemption;
23-
flags.flags.disablePerCtxtPreemptionGranularityControl = device.getHardwareInfo().workaroundTable.waDisablePerCtxtPreemptionGranularityControl;
24-
flags.flags.disableLSQCROPERFforOCL = device.getHardwareInfo().workaroundTable.waDisableLSQCROPERFforOCL;
25-
}
26-
2714
PreemptionMode ClPreemptionHelper::taskPreemptionMode(Device &device, const MultiDispatchInfo &multiDispatchInfo) {
2815
PreemptionMode devMode = device.getPreemptionMode();
2916

3017
for (const auto &di : multiDispatchInfo) {
3118
auto kernel = di.getKernel();
3219

33-
PreemptionFlags flags = {};
34-
setPreemptionLevelFlags(flags, device, kernel);
20+
const KernelDescriptor *kernelDescriptor = nullptr;
21+
bool schedulerKernel = false;
22+
if (kernel != nullptr) {
23+
kernelDescriptor = &kernel->getDescriptor();
24+
schedulerKernel = kernel->isSchedulerKernel;
25+
}
3526

27+
PreemptionFlags flags = PreemptionHelper::createPreemptionLevelFlags(device, kernelDescriptor, schedulerKernel);
3628
PreemptionMode taskMode = PreemptionHelper::taskPreemptionMode(devMode, flags);
3729
if (devMode > taskMode) {
3830
devMode = taskMode;

opencl/source/helpers/cl_preemption_helper.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ struct MultiDispatchInfo;
1616
class ClPreemptionHelper {
1717
public:
1818
static PreemptionMode taskPreemptionMode(Device &device, const MultiDispatchInfo &multiDispatchInfo);
19-
static void setPreemptionLevelFlags(PreemptionFlags &flags, Device &device, Kernel *kernel);
2019
};
2120

2221
} // namespace NEO

opencl/test/unit_test/gen8/test_preemption_gen8.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ using Gen8PreemptionEnqueueKernelTest = PreemptionEnqueueKernelTest;
2020
using Gen8ClPreemptionTests = DevicePreemptionTests;
2121

2222
GEN8TEST_F(Gen8ClPreemptionTests, GivenEmptyFlagsWhenSettingPreemptionLevelFlagsThenThreadGroupPreemptionIsAllowed) {
23-
PreemptionFlags flags = {};
24-
ClPreemptionHelper::setPreemptionLevelFlags(flags, device->getDevice(), kernel.get());
23+
PreemptionFlags flags = PreemptionHelper::createPreemptionLevelFlags(device->getDevice(), &kernel->getDescriptor(), kernel->isSchedulerKernel);
2524
EXPECT_TRUE(PreemptionHelper::allowThreadGroupPreemption(flags));
2625
}
2726

@@ -71,8 +70,7 @@ GEN8TEST_F(Gen8PreemptionEnqueueKernelTest, givenValidKernelForPreemptionWhenEnq
7170
pDevice->resetCommandStreamReceiver(mockCsr);
7271

7372
MockKernelWithInternals mockKernel(*pClDevice);
74-
PreemptionFlags flags = {};
75-
ClPreemptionHelper::setPreemptionLevelFlags(flags, *pDevice, mockKernel.mockKernel);
73+
PreemptionFlags flags = PreemptionHelper::createPreemptionLevelFlags(*pDevice, &mockKernel.mockKernel->getDescriptor(), mockKernel.mockKernel->isSchedulerKernel);
7674
EXPECT_EQ(PreemptionMode::ThreadGroup, PreemptionHelper::taskPreemptionMode(pDevice->getPreemptionMode(), flags));
7775

7876
UserEvent userEventObj;
@@ -94,8 +92,7 @@ GEN8TEST_F(Gen8PreemptionEnqueueKernelTest, givenDisabledPreemptionWhenEnqueueKe
9492
pDevice->resetCommandStreamReceiver(mockCsr);
9593

9694
MockKernelWithInternals mockKernel(*pClDevice);
97-
PreemptionFlags flags = {};
98-
ClPreemptionHelper::setPreemptionLevelFlags(flags, *pDevice, mockKernel.mockKernel);
95+
PreemptionFlags flags = PreemptionHelper::createPreemptionLevelFlags(*pDevice, &mockKernel.mockKernel->getDescriptor(), mockKernel.mockKernel->isSchedulerKernel);
9996
EXPECT_EQ(PreemptionMode::Disabled, PreemptionHelper::taskPreemptionMode(pDevice->getPreemptionMode(), flags));
10097

10198
size_t gws[3] = {1, 0, 0};

0 commit comments

Comments
 (0)