is_simt_thread token support

Change-Id: I8cee6ff26229f0f492ba0d1e5e61d6e46e0c2486
Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2020-10-13 13:14:51 +02:00
committed by sys_ocldev
parent a06369230c
commit 1926ef8319
17 changed files with 183 additions and 27 deletions

View File

@@ -700,6 +700,7 @@ Kernel-scope tokens section size : )==="
uint32_t DataParamOffset;// = 0
uint32_t DataParamSize;// = 0
uint32_t PerThreadPrivateMemorySize;// = 0
uint32_t IsSimtThread;// = 0
}
struct SPatchAllocateStatelessConstantMemorySurfaceWithInitialization :
SPatchItemHeader (Token=39(PATCH_TOKEN_ALLOCATE_CONSTANT_MEMORY_SURFACE_WITH_INITIALIZATION), Size=)==="

View File

@@ -2189,6 +2189,42 @@ kernels:
EXPECT_TRUE(warnings.empty()) << warnings;
ASSERT_EQ(1U, programInfo.kernelInfos.size());
EXPECT_EQ(256U, programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.perThreadPrivateMemorySize);
EXPECT_FALSE(programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.flags.isSimtThread);
}
TEST(PopulateKernelDescriptor, givenSimtThreadSetWhenPopulatingThenUpdateKernelAttributes) {
NEO::ConstStringRef zeinfo = R"===(
kernels:
- name : some_kernel
execution_env:
simd_size: 8
per_thread_memory_buffers:
- type: global
usage: private_space
size: 256
is_simt_thread: true
)===";
NEO::ProgramInfo programInfo;
ZebinTestData::ValidEmptyProgram zebin;
zebin.appendSection(NEO::Elf::SHT_PROGBITS, NEO::Elf::SectionsNamesZebin::textPrefix.str() + "some_kernel", {});
std::string errors, warnings;
auto elf = NEO::Elf::decodeElf(zebin.storage, errors, warnings);
ASSERT_NE(nullptr, elf.elfFileHeader) << errors << " " << warnings;
NEO::Yaml::YamlParser parser;
bool parseSuccess = parser.parse(zeinfo, errors, warnings);
ASSERT_TRUE(parseSuccess) << errors << " " << warnings;
NEO::ZebinSections zebinSections;
auto extractErr = NEO::extractZebinSections(elf, zebinSections, errors, warnings);
ASSERT_EQ(NEO::DecodeError::Success, extractErr) << errors << " " << warnings;
auto &kernelNode = *parser.createChildrenRange(*parser.findNodeWithKeyDfs("kernels")).begin();
auto err = NEO::populateKernelDescriptor(programInfo, elf, zebinSections, parser, kernelNode, errors, warnings);
EXPECT_EQ(NEO::DecodeError::Success, err);
EXPECT_TRUE(errors.empty()) << errors;
EXPECT_TRUE(warnings.empty()) << warnings;
EXPECT_TRUE(programInfo.kernelInfos[0]->kernelDescriptor.kernelAttributes.flags.isSimtThread);
}
TEST(PopulateKernelDescriptor, GivenPerThreadMemoryBufferWhenTypeIsScratchThenSetsProperFieldsInDescriptor) {

View File

@@ -267,9 +267,11 @@ TEST(KernelDescriptorFromPatchtokens, GivenImplicitArgsThenSetsProperPartsOfDesc
privateSurface.DataParamSize = 3;
privateSurface.PerThreadPrivateMemorySize = 5;
privateSurface.SurfaceStateHeapOffset = 7;
privateSurface.IsSimtThread = true;
kernelTokens.tokens.allocateStatelessPrivateSurface = &privateSurface;
NEO::populateKernelDescriptor(kernelDescriptor, kernelTokens, 4);
EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.usesPrivateMemory);
EXPECT_TRUE(kernelDescriptor.kernelAttributes.flags.isSimtThread);
EXPECT_EQ(privateSurface.PerThreadPrivateMemorySize, kernelDescriptor.kernelAttributes.perThreadPrivateMemorySize);
EXPECT_EQ(privateSurface.DataParamOffset, kernelDescriptor.payloadMappings.implicitArgs.privateMemoryAddress.stateless);
EXPECT_EQ(privateSurface.DataParamSize, kernelDescriptor.payloadMappings.implicitArgs.privateMemoryAddress.pointerSize);

View File

@@ -13,6 +13,7 @@
TEST(KernelDescriptor, WhenDefaultInitializedThenValuesAreCleared) {
NEO::KernelDescriptor desc;
EXPECT_EQ(0U, desc.kernelAttributes.flags.packed);
EXPECT_FALSE(desc.kernelAttributes.flags.isSimtThread);
EXPECT_EQ(0U, desc.kernelAttributes.slmInlineSize);
EXPECT_EQ(0U, desc.kernelAttributes.perThreadScratchSize[0]);
EXPECT_EQ(0U, desc.kernelAttributes.perThreadScratchSize[1]);