Skip to content

Commit b626752

Browse files
Refactor source level debugger notification in OCL. [2/2]
Refactor source level debugger notification about debug data in OCL (build/link path). - Share common code - Remove unnecessary function(s) - Zebin-related ULTs refactor Related-To: NEO-6644 Signed-off-by: Kacper Nowak <[email protected]>
1 parent c30ee61 commit b626752

File tree

5 files changed

+50
-76
lines changed

5 files changed

+50
-76
lines changed

opencl/source/program/build.cpp

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -186,26 +186,7 @@ cl_int Program::build(
186186
if (BuildPhase::DebugDataNotification == phaseReached[rootDeviceIndex]) {
187187
continue;
188188
}
189-
auto refBin = ArrayRef<const uint8_t>(reinterpret_cast<const uint8_t *>(this->buildInfos[clDevice->getRootDeviceIndex()].unpackedDeviceBinary.get()), this->buildInfos[clDevice->getRootDeviceIndex()].unpackedDeviceBinarySize);
190-
if (NEO::isDeviceBinaryFormat<NEO::DeviceBinaryFormat::Zebin>(refBin)) {
191-
createDebugZebin(clDevice->getRootDeviceIndex());
192-
if (clDevice->getSourceLevelDebugger()) {
193-
NEO::DebugData debugData;
194-
debugData.vIsa = reinterpret_cast<const char *>(this->buildInfos[clDevice->getRootDeviceIndex()].debugData.get());
195-
debugData.vIsaSize = static_cast<uint32_t>(this->buildInfos[clDevice->getRootDeviceIndex()].debugDataSize);
196-
clDevice->getSourceLevelDebugger()->notifyKernelDebugData(&debugData, "debug_zebin", nullptr, 0);
197-
}
198-
} else {
199-
processDebugData(clDevice->getRootDeviceIndex());
200-
if (clDevice->getSourceLevelDebugger()) {
201-
for (auto kernelInfo : buildInfos[rootDeviceIndex].kernelInfoArray) {
202-
clDevice->getSourceLevelDebugger()->notifyKernelDebugData(&kernelInfo->debugData,
203-
kernelInfo->kernelDescriptor.kernelMetadata.kernelName,
204-
kernelInfo->heapInfo.pKernelHeap,
205-
kernelInfo->heapInfo.KernelHeapSize);
206-
}
207-
}
208-
}
189+
notifyDebuggerWithDebugData(clDevice);
209190
phaseReached[rootDeviceIndex] = BuildPhase::DebugDataNotification;
210191
}
211192
}

opencl/source/program/link.cpp

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include "shared/source/device_binary_format/elf/ocl_elf.h"
1414
#include "shared/source/execution_environment/execution_environment.h"
1515
#include "shared/source/program/kernel_info.h"
16-
#include "shared/source/source_level_debugger/source_level_debugger.h"
1716
#include "shared/source/utilities/stackvec.h"
1817

1918
#include "opencl/source/cl_device/cl_device.h"
@@ -171,13 +170,7 @@ cl_int Program::link(
171170
if (kernelDebugDataNotified[rootDeviceIndex]) {
172171
continue;
173172
}
174-
createDebugData(rootDeviceIndex);
175-
for (auto kernelInfo : buildInfos[rootDeviceIndex].kernelInfoArray) {
176-
device->getSourceLevelDebugger()->notifyKernelDebugData(&kernelInfo->debugData,
177-
kernelInfo->kernelDescriptor.kernelMetadata.kernelName,
178-
kernelInfo->heapInfo.pKernelHeap,
179-
kernelInfo->heapInfo.KernelHeapSize);
180-
}
173+
notifyDebuggerWithDebugData(device);
181174
kernelDebugDataNotified[device->getRootDeviceIndex()] = true;
182175
}
183176
}

opencl/source/program/process_device_binary.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "shared/source/program/kernel_info.h"
1616
#include "shared/source/program/program_info.h"
1717
#include "shared/source/program/program_initialization.h"
18+
#include "shared/source/source_level_debugger/source_level_debugger.h"
1819

1920
#include "opencl/source/cl_device/cl_device.h"
2021
#include "opencl/source/context/context.h"
@@ -297,12 +298,28 @@ void Program::createDebugZebin(uint32_t rootDeviceIndex) {
297298
debugZebin.data(), debugZebin.size());
298299
}
299300

300-
void Program::createDebugData(uint32_t rootDeviceIndex) {
301-
auto refBin = ArrayRef<const uint8_t>(reinterpret_cast<const uint8_t *>(buildInfos[rootDeviceIndex].unpackedDeviceBinary.get()), buildInfos[rootDeviceIndex].unpackedDeviceBinarySize);
302-
if (isDeviceBinaryFormat<DeviceBinaryFormat::Zebin>(refBin)) {
301+
void Program::notifyDebuggerWithDebugData(ClDevice *clDevice) {
302+
auto rootDeviceIndex = clDevice->getRootDeviceIndex();
303+
auto &buildInfo = this->buildInfos[rootDeviceIndex];
304+
auto refBin = ArrayRef<const uint8_t>(reinterpret_cast<const uint8_t *>(buildInfo.unpackedDeviceBinary.get()), buildInfo.unpackedDeviceBinarySize);
305+
if (NEO::isDeviceBinaryFormat<NEO::DeviceBinaryFormat::Zebin>(refBin)) {
303306
createDebugZebin(rootDeviceIndex);
307+
if (clDevice->getSourceLevelDebugger()) {
308+
NEO::DebugData debugData;
309+
debugData.vIsa = reinterpret_cast<const char *>(buildInfo.debugData.get());
310+
debugData.vIsaSize = static_cast<uint32_t>(buildInfo.debugDataSize);
311+
clDevice->getSourceLevelDebugger()->notifyKernelDebugData(&debugData, "debug_zebin", nullptr, 0);
312+
}
304313
} else {
305314
processDebugData(rootDeviceIndex);
315+
if (clDevice->getSourceLevelDebugger()) {
316+
for (auto &kernelInfo : buildInfo.kernelInfoArray) {
317+
clDevice->getSourceLevelDebugger()->notifyKernelDebugData(&kernelInfo->debugData,
318+
kernelInfo->kernelDescriptor.kernelMetadata.kernelName,
319+
kernelInfo->heapInfo.pKernelHeap,
320+
kernelInfo->heapInfo.KernelHeapSize);
321+
}
322+
}
306323
}
307324
}
308325
} // namespace NEO

opencl/source/program/program.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ class Program : public BaseObject<_cl_program> {
276276
this->context = pContext;
277277
}
278278

279-
void createDebugData(uint32_t rootDeviceIndex);
279+
void notifyDebuggerWithDebugData(ClDevice *clDevice);
280280
MOCKABLE_VIRTUAL void createDebugZebin(uint32_t rootDeviceIndex);
281281
Debug::Segments getZebinSegments(uint32_t rootDeviceIndex);
282282

opencl/test/unit_test/program/program_with_zebin_tests.cpp

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,6 @@ TEST_F(ProgramWithZebinFixture, givenEmptyDebugDataThenDebugZebinIsCreatedAndSto
6565
EXPECT_NE(nullptr, program->buildInfos[rootDeviceIndex].debugData.get());
6666
}
6767

68-
TEST_F(ProgramWithZebinFixture, givenZebinaryFormatInCreateDebugDataThenCreateDebugZebinIsCalled) {
69-
addEmptyZebin(program.get());
70-
program->createDebugData(rootDeviceIndex);
71-
EXPECT_TRUE(program->wasCreateDebugZebinCalled);
72-
EXPECT_FALSE(program->wasProcessDebugDataCalled);
73-
}
74-
75-
TEST_F(ProgramWithZebinFixture, givenNonZebinaryFormatInCreateDebugDataThenProcessDebugDataIsCalled) {
76-
size_t fakeBinarySize = 8u;
77-
program->buildInfos[rootDeviceIndex].unpackedDeviceBinarySize = fakeBinarySize;
78-
program->buildInfos[rootDeviceIndex].unpackedDeviceBinary.reset(new char[fakeBinarySize]);
79-
program->createDebugData(rootDeviceIndex);
80-
EXPECT_FALSE(program->wasCreateDebugZebinCalled);
81-
EXPECT_TRUE(program->wasProcessDebugDataCalled);
82-
}
83-
8468
TEST_F(ProgramWithZebinFixture, givenEmptyDebugDataAndZebinBinaryFormatThenCreateDebugZebinAndReturnOnGetInfo) {
8569
addEmptyZebin(program.get());
8670
populateProgramWithSegments(program.get());
@@ -131,41 +115,40 @@ TEST_F(ProgramWithZebinFixture, givenEmptyDebugDataAndZebinBinaryFormatThenCreat
131115
EXPECT_EQ(numDevices * sizeof(debugData), retData);
132116
}
133117

134-
TEST_F(ProgramWithZebinFixture, givenZebinBinaryFormatWhenProgramIsBuiltWithKernelDebugEnabledAndDebuggerAvailableThenDebugZebinCreationIsCalledAndDebuggerNotified) {
118+
TEST_F(ProgramWithZebinFixture, givenZebinFormatAndDebuggerNotAvailableWhenNotifyingDebuggerThenCreateDebugZebinIsCalled) {
119+
pClDevice->getExecutionEnvironment()->rootDeviceEnvironments[pDevice->getRootDeviceIndex()]->debugger.reset(nullptr);
120+
135121
addEmptyZebin(program.get());
122+
populateProgramWithSegments(program.get());
123+
auto &buildInfo = program->buildInfos[rootDeviceIndex];
124+
buildInfo.debugDataSize = 0u;
125+
buildInfo.debugData.reset(nullptr);
126+
for (auto &device : program->getDevices()) {
127+
program->notifyDebuggerWithDebugData(device);
128+
}
129+
EXPECT_TRUE(program->wasCreateDebugZebinCalled);
130+
EXPECT_FALSE(program->wasProcessDebugDataCalled);
131+
EXPECT_NE(nullptr, program->buildInfos[rootDeviceIndex].debugData);
132+
EXPECT_GT(program->buildInfos[rootDeviceIndex].debugDataSize, 0u);
133+
}
136134

135+
TEST_F(ProgramWithZebinFixture, givenZebinFormatAndDebuggerAvailableWhenNotifyingDebuggerThenCreateDebugZebinIsCalledAndDebuggerNotified) {
137136
MockSourceLevelDebugger *sourceLevelDebugger = new MockSourceLevelDebugger;
138137
sourceLevelDebugger->setActive(true);
139138
pClDevice->getExecutionEnvironment()->rootDeviceEnvironments[pDevice->getRootDeviceIndex()]->debugger.reset(sourceLevelDebugger);
140139

141-
program->createdFrom = Program::CreatedFrom::BINARY;
142-
program->isCreatedFromBinary = true;
143-
program->enableKernelDebug();
144-
auto retVal = program->build(
145-
program->getDevices(),
146-
nullptr,
147-
false);
148-
149-
EXPECT_EQ(CL_SUCCESS, retVal);
150-
EXPECT_TRUE(program->wasCreateDebugZebinCalled);
151-
EXPECT_FALSE(program->wasProcessDebugDataCalled);
152-
EXPECT_EQ(1u, sourceLevelDebugger->notifyKernelDebugDataCalled);
153-
}
154-
155-
TEST_F(ProgramWithZebinFixture, givenZebinBinaryFormatWhenProgramIsBuiltWithKernelDebugEnabledAndNoDebuggerThenDebugZebinCreationIsCalled) {
156140
addEmptyZebin(program.get());
157-
158-
pClDevice->getExecutionEnvironment()->rootDeviceEnvironments[pDevice->getRootDeviceIndex()]->debugger.reset(nullptr);
159-
160-
program->createdFrom = Program::CreatedFrom::BINARY;
161-
program->isCreatedFromBinary = true;
162-
program->enableKernelDebug();
163-
auto retVal = program->build(
164-
program->getDevices(),
165-
nullptr,
166-
false);
167-
168-
EXPECT_EQ(CL_SUCCESS, retVal);
141+
populateProgramWithSegments(program.get());
142+
auto &buildInfo = program->buildInfos[rootDeviceIndex];
143+
buildInfo.debugDataSize = 0u;
144+
buildInfo.debugData.reset(nullptr);
145+
for (auto &device : program->getDevices()) {
146+
program->notifyDebuggerWithDebugData(device);
147+
}
169148
EXPECT_TRUE(program->wasCreateDebugZebinCalled);
170149
EXPECT_FALSE(program->wasProcessDebugDataCalled);
150+
EXPECT_NE(nullptr, program->buildInfos[rootDeviceIndex].debugData);
151+
EXPECT_GT(program->buildInfos[rootDeviceIndex].debugDataSize, 0u);
152+
153+
EXPECT_EQ(1u, sourceLevelDebugger->notifyKernelDebugDataCalled);
171154
}

0 commit comments

Comments
 (0)