Fix generating localIDs in zebin

This commit fixes generating localIDs in zebin.
With thix fix, Emit Local in compute walker will be set accordingly with
the size of local_id argtype (currently, Emit Local is set to Emit None,
which prevents generating local IDs).

Related-To: NEO-6089
Signed-off-by: Kacper Nowak <kacper.nowak@intel.com>
This commit is contained in:
Kacper Nowak
2022-02-21 14:27:41 +00:00
committed by Compute-Runtime-Automation
parent b84b0015d5
commit 441fe1f589
2 changed files with 19 additions and 3 deletions

View File

@@ -687,6 +687,9 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
dst.kernelAttributes.numLocalIdChannels = static_cast<uint8_t>(tupleSize);
break;
}
dst.kernelAttributes.localId[0] = tupleSize > 0;
dst.kernelAttributes.localId[1] = tupleSize > 1;
dst.kernelAttributes.localId[2] = tupleSize > 2;
dst.kernelAttributes.perThreadDataSize = dst.kernelAttributes.simdSize;
dst.kernelAttributes.perThreadDataSize *= sizeof(LocalIdT);
dst.kernelAttributes.perThreadDataSize = alignUp(dst.kernelAttributes.perThreadDataSize, grfSize);
@@ -711,6 +714,9 @@ NEO::DecodeError populateArgDescriptor(const NEO::Elf::ZebinKernelMetadata::Type
dst.kernelAttributes.numLocalIdChannels = static_cast<uint8_t>(tupleSize);
break;
}
dst.kernelAttributes.localId[0] = tupleSize > 0;
dst.kernelAttributes.localId[1] = tupleSize > 1;
dst.kernelAttributes.localId[2] = tupleSize > 2;
dst.kernelAttributes.simdSize = 1;
dst.kernelAttributes.perThreadDataSize = dst.kernelAttributes.simdSize;
dst.kernelAttributes.perThreadDataSize *= dst.kernelAttributes.numLocalIdChannels;

View File

@@ -3808,7 +3808,7 @@ kernels:
EXPECT_TRUE(warnings.empty()) << warnings;
}
TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypeLocalIdWhenSizeIsValidThenCalculateNumChannelAccordingly) {
TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypeLocalIdWhenSizeIsValidThenCalculateNumChannelAndSetEmitLocalIdAccordingly) {
uint32_t simdSizes[] = {8, 16, 32};
uint32_t numChannelsOpts[] = {1, 2, 3};
@@ -3849,6 +3849,11 @@ TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypeLocalIdWhenSizeIsValidTh
ASSERT_EQ(1U, programInfo.kernelInfos.size());
EXPECT_EQ(numChannels, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.numLocalIdChannels) << warnings << "simd : " << simdSize << ", num channels : " << numChannels;
EXPECT_EQ(simdSize, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.simdSize) << warnings << "simd : " << simdSize << ", num channels : " << numChannels;
const auto &emitLocalId = programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.localId;
EXPECT_EQ(static_cast<uint8_t>(numChannels > 0), emitLocalId[0]);
EXPECT_EQ(static_cast<uint8_t>(numChannels > 1), emitLocalId[1]);
EXPECT_EQ(static_cast<uint8_t>(numChannels > 2), emitLocalId[2]);
}
}
}
@@ -3919,7 +3924,7 @@ kernels:
EXPECT_TRUE(warnings.empty()) << warnings;
}
TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypePackedLocalIdWhenSizeIsValidThenCalculateNumChannelAccordingly) {
TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypePackedLocalIdWhenSizeIsValidThenCalculateNumChannelAndSetEmitLocalIdAccordingly) {
uint32_t simdSizes[] = {1};
uint32_t numChannelsOpts[] = {1, 2, 3};
@@ -3960,6 +3965,11 @@ TEST(PopulateArgDescriptorPerThreadPayload, GivenArgTypePackedLocalIdWhenSizeIsV
ASSERT_EQ(1U, programInfo.kernelInfos.size());
EXPECT_EQ(numChannels, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.numLocalIdChannels) << warnings << "simd : " << simdSize << ", num channels : " << numChannels;
EXPECT_EQ(simdSize, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.simdSize) << warnings << "simd : " << simdSize << ", num channels : " << numChannels;
const auto &emitLocalId = programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.localId;
EXPECT_EQ(static_cast<uint8_t>(numChannels > 0), emitLocalId[0]);
EXPECT_EQ(static_cast<uint8_t>(numChannels > 1), emitLocalId[1]);
EXPECT_EQ(static_cast<uint8_t>(numChannels > 2), emitLocalId[2]);
}
}
}
@@ -5099,4 +5109,4 @@ TEST_F(IntelGTNotesFixture, WhenValidatingTargetDeviceGivenValidTargetDeviceAndI
ASSERT_TRUE(outErrReason.empty());
EXPECT_FALSE(validateTargetDevice(elf, targetDevice));
}
}