Skip to content

Commit f20cdac

Browse files
Zebin: add support for has_dpas
Signed-off-by: Krystian Chmielewski <[email protected]>
1 parent 8c6fed2 commit f20cdac

File tree

8 files changed

+19
-16
lines changed

8 files changed

+19
-16
lines changed

opencl/source/kernel/kernel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2788,7 +2788,7 @@ void Kernel::reconfigureKernel() {
27882788
maxKernelWorkGroupSize >>= 1;
27892789
}
27902790
this->containsStatelessWrites = kernelDescriptor.kernelAttributes.flags.usesStatelessWrites;
2791-
this->specialPipelineSelectMode = kernelDescriptor.extendedInfo.get() ? kernelDescriptor.extendedInfo->specialPipelineSelectModeRequired() : false;
2791+
this->specialPipelineSelectMode = kernelDescriptor.kernelAttributes.flags.usesSpecialPipelineSelectMode;
27922792
}
27932793
bool Kernel::requiresCacheFlushCommand(const CommandQueue &commandQueue) const {
27942794
if (false == HwHelper::cacheFlushAfterWalkerSupported(commandQueue.getDevice().getHardwareInfo())) {

shared/source/command_container/command_encoder_xehp_and_later.inl

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,10 @@ void EncodeDispatchKernel<Family>::encode(CommandContainer &container,
7070
container.allocateNextCommandBuffer();
7171
}
7272

73-
if (kernelDescriptor.extendedInfo) {
74-
bool specialModeRequired = kernelDescriptor.extendedInfo->specialPipelineSelectModeRequired();
75-
if (PreambleHelper<Family>::isSpecialPipelineSelectModeChanged(container.lastPipelineSelectModeRequired, specialModeRequired, hwInfo)) {
76-
container.lastPipelineSelectModeRequired = specialModeRequired;
77-
EncodeComputeMode<Family>::adjustPipelineSelect(container, kernelDescriptor);
78-
}
73+
bool specialModeRequired = kernelDescriptor.kernelAttributes.flags.usesSpecialPipelineSelectMode;
74+
if (PreambleHelper<Family>::isSpecialPipelineSelectModeChanged(container.lastPipelineSelectModeRequired, specialModeRequired, hwInfo)) {
75+
container.lastPipelineSelectModeRequired = specialModeRequired;
76+
EncodeComputeMode<Family>::adjustPipelineSelect(container, kernelDescriptor);
7977
}
8078

8179
WALKER_TYPE walkerCmd = Family::cmdInitGpgpuWalker;
@@ -581,7 +579,7 @@ template <typename Family>
581579
void EncodeComputeMode<Family>::adjustPipelineSelect(CommandContainer &container, const NEO::KernelDescriptor &kernelDescriptor) {
582580
using PIPELINE_SELECT = typename Family::PIPELINE_SELECT;
583581
auto pipelineSelectCmd = Family::cmdInitPipelineSelect;
584-
auto isSpecialModeSelected = kernelDescriptor.extendedInfo && kernelDescriptor.extendedInfo->specialPipelineSelectModeRequired();
582+
auto isSpecialModeSelected = kernelDescriptor.kernelAttributes.flags.usesSpecialPipelineSelectMode;
585583

586584
PreambleHelper<Family>::appendProgramPipelineSelect(&pipelineSelectCmd, isSpecialModeSelected, container.getDevice()->getHardwareInfo());
587585

shared/source/device_binary_format/elf/zebin_elf.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ static constexpr ConstStringRef disableMidThreadPreemption("disable_mid_thread_p
171171
static constexpr ConstStringRef grfCount("grf_count");
172172
static constexpr ConstStringRef has4gbBuffers("has_4gb_buffers");
173173
static constexpr ConstStringRef hasDeviceEnqueue("has_device_enqueue");
174+
static constexpr ConstStringRef hasDpas("has_dpas");
174175
static constexpr ConstStringRef hasFenceForImageAccess("has_fence_for_image_access");
175176
static constexpr ConstStringRef hasGlobalAtomics("has_global_atomics");
176177
static constexpr ConstStringRef hasMultiScratchSpaces("has_multi_scratch_spaces");
@@ -287,6 +288,7 @@ using DisableMidThreadPreemptionT = bool;
287288
using GrfCountT = int32_t;
288289
using Has4GBBuffersT = bool;
289290
using HasDeviceEnqueueT = bool;
291+
using HasDpasT = bool;
290292
using HasFenceForImageAccessT = bool;
291293
using HasGlobalAtomicsT = bool;
292294
using HasMultiScratchSpacesT = bool;
@@ -309,6 +311,7 @@ static constexpr BarrierCountT barrierCount = 0;
309311
static constexpr DisableMidThreadPreemptionT disableMidThreadPreemption = false;
310312
static constexpr Has4GBBuffersT has4GBBuffers = false;
311313
static constexpr HasDeviceEnqueueT hasDeviceEnqueue = false;
314+
static constexpr HasDpasT hasDpas = false;
312315
static constexpr HasFenceForImageAccessT hasFenceForImageAccess = false;
313316
static constexpr HasGlobalAtomicsT hasGlobalAtomics = false;
314317
static constexpr HasMultiScratchSpacesT hasMultiScratchSpaces = false;
@@ -338,6 +341,7 @@ struct ExecutionEnvBaseT {
338341
GrfCountT grfCount = -1;
339342
Has4GBBuffersT has4GBBuffers = Defaults::has4GBBuffers;
340343
HasDeviceEnqueueT hasDeviceEnqueue = Defaults::hasDeviceEnqueue;
344+
HasDpasT hasDpas = Defaults::hasDpas;
341345
HasFenceForImageAccessT hasFenceForImageAccess = Defaults::hasFenceForImageAccess;
342346
HasGlobalAtomicsT hasGlobalAtomics = Defaults::hasGlobalAtomics;
343347
HasMultiScratchSpacesT hasMultiScratchSpaces = Defaults::hasMultiScratchSpaces;

shared/source/device_binary_format/zebin_decoder.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ DecodeError readZeInfoExecutionEnvironment(const NEO::Yaml::YamlParser &parser,
253253
validExecEnv = validExecEnv & readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.has4GBBuffers, context, outErrReason);
254254
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::ExecutionEnv::hasDeviceEnqueue == key) {
255255
validExecEnv = validExecEnv & readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.hasDeviceEnqueue, context, outErrReason);
256+
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::ExecutionEnv::hasDpas == key) {
257+
validExecEnv = validExecEnv & readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.hasDpas, context, outErrReason);
256258
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::ExecutionEnv::hasFenceForImageAccess == key) {
257259
validExecEnv = validExecEnv & readZeInfoValueChecked(parser, execEnvMetadataNd, outExecEnv.hasFenceForImageAccess, context, outErrReason);
258260
} else if (NEO::Elf::ZebinKernelMetadata::Tags::Kernel::ExecutionEnv::hasGlobalAtomics == key) {
@@ -1005,6 +1007,7 @@ NEO::DecodeError populateKernelDescriptor(NEO::ProgramInfo &dst, NEO::Elf::Elf<N
10051007
kernelDescriptor.kernelAttributes.flags.usesFencesForReadWriteImages = execEnv.hasFenceForImageAccess;
10061008
kernelDescriptor.kernelAttributes.flags.useGlobalAtomics = execEnv.hasGlobalAtomics;
10071009
kernelDescriptor.kernelAttributes.flags.usesStatelessWrites = (false == execEnv.hasNoStatelessWrite);
1010+
kernelDescriptor.kernelAttributes.flags.usesSpecialPipelineSelectMode = execEnv.hasDpas;
10081011
kernelDescriptor.entryPoints.skipPerThreadDataLoad = execEnv.offsetToSkipPerThreadDataLoad;
10091012
kernelDescriptor.entryPoints.skipSetFFIDGP = execEnv.offsetToSkipSetFfidGp;
10101013
kernelDescriptor.kernelMetadata.requiredSubGroupSize = execEnv.requiredSubGroupSize;

shared/source/kernel/kernel_descriptor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ using InstructionsSegmentOffset = uint16_t;
2828

2929
struct ExtendedInfoBase {
3030
virtual ~ExtendedInfoBase() = default;
31-
virtual bool specialPipelineSelectModeRequired() const { return false; }
3231
};
3332

3433
struct KernelDescriptor {
@@ -84,6 +83,7 @@ struct KernelDescriptor {
8483

8584
union {
8685
struct {
86+
bool usesSpecialPipelineSelectMode : 1;
8787
bool usesStringMapForPrintf : 1;
8888
bool usesPrintf : 1;
8989
bool usesFencesForReadWriteImages : 1;

shared/source/kernel/kernel_descriptor_from_patchtokens.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@ void populateKernelDescriptor(KernelDescriptor &dst, const SPatchExecutionEnviro
5555
dst.kernelAttributes.simdSize = execEnv.LargestCompiledSIMDSize;
5656
dst.kernelAttributes.barrierCount = execEnv.HasBarriers;
5757

58-
dst.kernelAttributes.flags.usesDeviceSideEnqueue = (0 != execEnv.HasDeviceEnqueue);
5958
dst.kernelAttributes.flags.requiresDisabledMidThreadPreemption = (0 != execEnv.DisableMidThreadPreemption);
60-
dst.kernelAttributes.flags.usesFencesForReadWriteImages = (0 != execEnv.UsesFencesForReadWriteImages);
6159
dst.kernelAttributes.flags.requiresSubgroupIndependentForwardProgress = (0 != execEnv.SubgroupIndependentForwardProgressRequired);
6260
dst.kernelAttributes.flags.useGlobalAtomics = (0 != execEnv.HasGlobalAtomics);
61+
dst.kernelAttributes.flags.usesDeviceSideEnqueue = (0 != execEnv.HasDeviceEnqueue);
62+
dst.kernelAttributes.flags.usesFencesForReadWriteImages = (0 != execEnv.UsesFencesForReadWriteImages);
63+
dst.kernelAttributes.flags.usesSpecialPipelineSelectMode = (0 != execEnv.HasDPAS);
6364
dst.kernelAttributes.flags.usesStatelessWrites = (0 != execEnv.StatelessWritesCount);
6465

6566
dst.kernelMetadata.compiledSubGroupsNumber = execEnv.CompiledSubGroupsNumber;

shared/test/unit_test/device_binary_format/zebin_decoder_tests.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,7 @@ TEST(ReadZeInfoExecutionEnvironment, GivenValidYamlEntriesThenSetProperMembers)
946946
grf_count : 13
947947
has_4gb_buffers : true
948948
has_device_enqueue : true
949+
has_dpas : true
949950
has_fence_for_image_access : true
950951
has_global_atomics : true
951952
has_multi_scratch_spaces : true
@@ -987,6 +988,7 @@ TEST(ReadZeInfoExecutionEnvironment, GivenValidYamlEntriesThenSetProperMembers)
987988
EXPECT_EQ(13, execEnv.grfCount);
988989
EXPECT_TRUE(execEnv.has4GBBuffers);
989990
EXPECT_TRUE(execEnv.hasDeviceEnqueue);
991+
EXPECT_TRUE(execEnv.hasDpas);
990992
EXPECT_TRUE(execEnv.hasFenceForImageAccess);
991993
EXPECT_TRUE(execEnv.hasGlobalAtomics);
992994
EXPECT_TRUE(execEnv.hasMultiScratchSpaces);

shared/test/unit_test/kernel/kernel_descriptor_tests.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,3 @@ TEST(KernelDescriptorAttributesSupportsBuffersBiggerThan4Gb, GivenStatefulBuffer
109109
desc.kernelAttributes.bufferAddressingMode = NEO::KernelDescriptor::BindlessAndStateless;
110110
EXPECT_FALSE(desc.kernelAttributes.supportsBuffersBiggerThan4Gb());
111111
}
112-
113-
TEST(KernelDescriptorTest, givenExtendedInfoWhenAskingForSpecialPipelineSelectModeThenReturnFalse) {
114-
NEO::ExtendedInfoBase extendedInfo;
115-
EXPECT_FALSE(extendedInfo.specialPipelineSelectModeRequired());
116-
}

0 commit comments

Comments
 (0)