Skip to content

Commit 1390af6

Browse files
Make usesStringMap flag independent of implicit args requirements
This commits removes part of condition requiring requiresImplicitArgs flag set in kernel descriptor in order to set usesStringMap flag. Related-To: NEO-6604 Signed-off-by: Kacper Nowak <[email protected]>
1 parent ae357c7 commit 1390af6

File tree

4 files changed

+57
-76
lines changed

4 files changed

+57
-76
lines changed

level_zero/core/source/printf_handler/printf_handler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void PrintfHandler::printOutput(const KernelImmutableData *kernelData,
3030
NEO::GraphicsAllocation *printfBuffer, Device *device) {
3131
bool using32BitGpuPointers = kernelData->getDescriptor().kernelAttributes.gpuPointerSize == 4u;
3232

33-
auto usesStringMap = kernelData->getDescriptor().kernelAttributes.flags.usesStringMapForPrintf || kernelData->getDescriptor().kernelAttributes.flags.requiresImplicitArgs;
33+
auto usesStringMap = kernelData->getDescriptor().kernelAttributes.flags.usesStringMapForPrintf;
3434
NEO::PrintFormatter printfFormatter{
3535
static_cast<uint8_t *>(printfBuffer->getUnderlyingBuffer()),
3636
static_cast<uint32_t>(printfBuffer->getUnderlyingBufferSize()),

level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp

Lines changed: 54 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2187,6 +2187,60 @@ TEST_F(PrintfTest, WhenCreatingPrintfBufferThenCrossThreadDataIsPatched) {
21872187
mockKernel.crossThreadData.release();
21882188
}
21892189

2190+
using KernelPrintfStringMapTests = Test<ModuleImmutableDataFixture>;
2191+
2192+
TEST_F(KernelPrintfStringMapTests, givenKernelWithPrintfStringsMapUsageEnabledWhenPrintOutputThenProperStringIsPrinted) {
2193+
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u);
2194+
2195+
auto kernelDescriptor = mockKernelImmData->kernelDescriptor;
2196+
kernelDescriptor->kernelAttributes.flags.usesPrintf = true;
2197+
kernelDescriptor->kernelAttributes.flags.usesStringMapForPrintf = true;
2198+
std::string expectedString("test123");
2199+
kernelDescriptor->kernelMetadata.printfStringsMap.insert(std::make_pair(0u, expectedString));
2200+
2201+
createModuleFromBinary(0u, false, mockKernelImmData.get());
2202+
2203+
auto kernel = std::make_unique<MockKernel>(module.get());
2204+
2205+
ze_kernel_desc_t kernelDesc{ZE_STRUCTURE_TYPE_KERNEL_DESC};
2206+
kernel->initialize(&kernelDesc);
2207+
2208+
auto printfAllocation = reinterpret_cast<uint32_t *>(kernel->getPrintfBufferAllocation()->getUnderlyingBuffer());
2209+
printfAllocation[0] = 8;
2210+
printfAllocation[1] = 0;
2211+
2212+
testing::internal::CaptureStdout();
2213+
kernel->printPrintfOutput();
2214+
std::string output = testing::internal::GetCapturedStdout();
2215+
EXPECT_STREQ(expectedString.c_str(), output.c_str());
2216+
}
2217+
2218+
TEST_F(KernelPrintfStringMapTests, givenKernelWithPrintfStringsMapUsageDisabledWhenPrintOutputThenNothingIsPrinted) {
2219+
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u);
2220+
2221+
auto kernelDescriptor = mockKernelImmData->kernelDescriptor;
2222+
kernelDescriptor->kernelAttributes.flags.usesPrintf = true;
2223+
kernelDescriptor->kernelAttributes.flags.usesStringMapForPrintf = false;
2224+
std::string expectedString("test123");
2225+
kernelDescriptor->kernelMetadata.printfStringsMap.insert(std::make_pair(0u, expectedString));
2226+
2227+
createModuleFromBinary(0u, false, mockKernelImmData.get());
2228+
2229+
auto kernel = std::make_unique<MockKernel>(module.get());
2230+
2231+
ze_kernel_desc_t kernelDesc{ZE_STRUCTURE_TYPE_KERNEL_DESC};
2232+
kernel->initialize(&kernelDesc);
2233+
2234+
auto printfAllocation = reinterpret_cast<uint32_t *>(kernel->getPrintfBufferAllocation()->getUnderlyingBuffer());
2235+
printfAllocation[0] = 8;
2236+
printfAllocation[1] = 0;
2237+
2238+
testing::internal::CaptureStdout();
2239+
kernel->printPrintfOutput();
2240+
std::string output = testing::internal::GetCapturedStdout();
2241+
EXPECT_STREQ("", output.c_str());
2242+
}
2243+
21902244
using KernelImplicitArgTests = Test<ModuleImmutableDataFixture>;
21912245

21922246
TEST_F(KernelImplicitArgTests, givenKernelWithImplicitArgsWhenInitializeThenPrintfSurfaceIsCreatedAndProperlyPatchedInImplicitArgs) {
@@ -2272,36 +2326,6 @@ TEST_F(KernelImplicitArgTests, givenKernelWithImplicitArgsWhenSettingKernelParam
22722326
EXPECT_EQ(0, memcmp(pImplicitArgs, &expectedImplicitArgs, sizeof(ImplicitArgs)));
22732327
}
22742328

2275-
TEST_F(KernelImplicitArgTests, givenKernelWithImplicitArgsAndPrintfStringsMapWhenPrintOutputThenProperStringIsPrinted) {
2276-
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u);
2277-
2278-
auto kernelDescriptor = mockKernelImmData->kernelDescriptor;
2279-
kernelDescriptor->kernelAttributes.flags.requiresImplicitArgs = true;
2280-
kernelDescriptor->kernelAttributes.flags.usesPrintf = false;
2281-
kernelDescriptor->kernelAttributes.flags.usesStringMapForPrintf = false;
2282-
std::string expectedString("test123");
2283-
kernelDescriptor->kernelMetadata.printfStringsMap.insert(std::make_pair(0u, expectedString));
2284-
2285-
createModuleFromBinary(0u, false, mockKernelImmData.get());
2286-
2287-
auto kernel = std::make_unique<MockKernel>(module.get());
2288-
2289-
ze_kernel_desc_t kernelDesc{ZE_STRUCTURE_TYPE_KERNEL_DESC};
2290-
kernel->initialize(&kernelDesc);
2291-
2292-
auto printfAllocation = reinterpret_cast<uint32_t *>(kernel->getPrintfBufferAllocation()->getUnderlyingBuffer());
2293-
printfAllocation[0] = 8;
2294-
printfAllocation[1] = 0;
2295-
2296-
EXPECT_TRUE(kernel->getKernelDescriptor().kernelAttributes.flags.requiresImplicitArgs);
2297-
ASSERT_NE(nullptr, kernel->getImplicitArgs());
2298-
2299-
testing::internal::CaptureStdout();
2300-
kernel->printPrintfOutput();
2301-
std::string output = testing::internal::GetCapturedStdout();
2302-
EXPECT_STREQ(expectedString.c_str(), output.c_str());
2303-
}
2304-
23052329
TEST_F(KernelImplicitArgTests, givenKernelWithoutImplicitArgsWhenPatchingImplicitArgsThenNothingHappens) {
23062330
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u);
23072331
mockKernelImmData->kernelDescriptor->kernelAttributes.flags.requiresImplicitArgs = false;

opencl/source/program/printf_handler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ void PrintfHandler::makeResident(CommandStreamReceiver &commandStreamReceiver) {
8888
void PrintfHandler::printEnqueueOutput() {
8989
auto &hwInfo = device.getHardwareInfo();
9090

91-
auto usesStringMap = kernel->getDescriptor().kernelAttributes.flags.usesStringMapForPrintf || nullptr != kernel->getImplicitArgs();
91+
auto usesStringMap = kernel->getDescriptor().kernelAttributes.flags.usesStringMapForPrintf;
9292
const auto &hwInfoConfig = *HwInfoConfig::get(hwInfo.platform.eProductFamily);
9393
auto printfOutputBuffer = reinterpret_cast<const uint8_t *>(printfSurface->getUnderlyingBuffer());
9494
auto printfOutputSize = static_cast<uint32_t>(printfSurface->getUnderlyingBufferSize());

opencl/test/unit_test/command_queue/enqueue_kernel_2_tests.cpp

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -624,56 +624,13 @@ HWCMDTEST_P(IGFX_GEN8_CORE, EnqueueKernelPrintfTest, GivenKernelWithPrintfBlocke
624624
}
625625

626626
HWTEST_P(EnqueueKernelPrintfTest, GivenKernelWithPrintfBlockedByEventWhenEventUnblockedThenOutputPrinted) {
627-
testing::internal::CaptureStdout();
628-
629-
auto userEvent = make_releaseable<UserEvent>(context);
630-
631-
MockKernelWithInternals mockKernel(*pClDevice);
632-
mockKernel.kernelInfo.setPrintfSurface(sizeof(uintptr_t), 0);
633-
std::string testString = "test";
634-
mockKernel.kernelInfo.addToPrintfStringsMap(0, testString);
635-
636-
cl_uint workDim = 1;
637-
size_t globalWorkOffset[3] = {0, 0, 0};
638-
639-
FillValues();
640-
641-
cl_event blockedEvent = userEvent.get();
642-
cl_event outEvent{};
643-
auto retVal = pCmdQ->enqueueKernel(
644-
mockKernel,
645-
workDim,
646-
globalWorkOffset,
647-
globalWorkSize,
648-
localWorkSize,
649-
1,
650-
&blockedEvent,
651-
&outEvent);
652-
653-
ASSERT_EQ(CL_SUCCESS, retVal);
654-
655-
auto pOutEvent = castToObject<Event>(outEvent);
656-
657-
auto printfAllocation = reinterpret_cast<uint32_t *>(static_cast<CommandComputeKernel *>(pOutEvent->peekCommand())->peekPrintfHandler()->getSurface()->getUnderlyingBuffer());
658-
printfAllocation[0] = 8;
659-
printfAllocation[1] = 0;
660-
661-
pOutEvent->release();
662-
663-
userEvent->setStatus(CL_COMPLETE);
664-
665-
std::string output = testing::internal::GetCapturedStdout();
666-
EXPECT_STREQ("test", output.c_str());
667-
}
668-
669-
HWTEST_P(EnqueueKernelPrintfTest, GivenKernelWithImplicitArgsWhenEventUnblockedThenOutputPrinted) {
670627
auto userEvent = make_releaseable<UserEvent>(context);
671628

672629
MockKernelWithInternals mockKernel(*pClDevice);
673630
std::string testString = "test";
674631
mockKernel.kernelInfo.addToPrintfStringsMap(0, testString);
675632
mockKernel.kernelInfo.kernelDescriptor.kernelAttributes.flags.usesPrintf = false;
676-
mockKernel.kernelInfo.kernelDescriptor.kernelAttributes.flags.usesStringMapForPrintf = false;
633+
mockKernel.kernelInfo.kernelDescriptor.kernelAttributes.flags.usesStringMapForPrintf = true;
677634
mockKernel.mockKernel->pImplicitArgs = std::make_unique<ImplicitArgs>();
678635
*mockKernel.mockKernel->pImplicitArgs = {};
679636

0 commit comments

Comments
 (0)