Skip to content

Commit 5a7f844

Browse files
Jaime ArteagaCompute-Runtime-Automation
authored andcommitted
Revert "Defer builtin initialization until first use"
This reverts commit df84232. Signed-off-by: Jaime Arteaga <[email protected]>
1 parent 5132fde commit 5a7f844

File tree

8 files changed

+142
-219
lines changed

8 files changed

+142
-219
lines changed

level_zero/core/source/builtin/builtin_functions_lib.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ struct BuiltinFunctionsLib {
5656

5757
virtual Kernel *getFunction(Builtin func) = 0;
5858
virtual Kernel *getImageFunction(ImageBuiltin func) = 0;
59-
virtual void initBuiltinKernel(Builtin builtId) = 0;
60-
virtual void initBuiltinImageKernel(ImageBuiltin func) = 0;
59+
virtual void initFunctions() = 0;
60+
virtual void initImageFunctions() = 0;
6161
virtual Kernel *getPageFaultFunction() = 0;
6262
virtual void initPageFaultFunction() = 0;
6363
MOCKABLE_VIRTUAL std::unique_lock<MutexType> obtainUniqueOwnership();

level_zero/core/source/builtin/builtin_functions_lib_impl.cpp

Lines changed: 112 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -15,138 +15,128 @@ std::unique_lock<BuiltinFunctionsLib::MutexType> BuiltinFunctionsLib::obtainUniq
1515
return std::unique_lock<BuiltinFunctionsLib::MutexType>(this->ownershipMutex);
1616
}
1717

18-
void BuiltinFunctionsLibImpl::initBuiltinKernel(Builtin func) {
19-
auto builtId = static_cast<uint32_t>(func);
20-
21-
const char *builtinName = nullptr;
22-
NEO::EBuiltInOps::Type builtin;
23-
24-
switch (static_cast<Builtin>(builtId)) {
25-
case Builtin::CopyBufferBytes:
26-
builtinName = "copyBufferToBufferBytesSingle";
27-
builtin = NEO::EBuiltInOps::CopyBufferToBuffer;
28-
break;
29-
case Builtin::CopyBufferRectBytes2d:
30-
builtinName = "CopyBufferRectBytes2d";
31-
builtin = NEO::EBuiltInOps::CopyBufferRect;
32-
break;
33-
case Builtin::CopyBufferRectBytes3d:
34-
builtinName = "CopyBufferRectBytes3d";
35-
builtin = NEO::EBuiltInOps::CopyBufferRect;
36-
break;
37-
case Builtin::CopyBufferToBufferMiddle:
38-
builtinName = "CopyBufferToBufferMiddleRegion";
39-
builtin = NEO::EBuiltInOps::CopyBufferToBuffer;
40-
break;
41-
case Builtin::CopyBufferToBufferSide:
42-
builtinName = "CopyBufferToBufferSideRegion";
43-
builtin = NEO::EBuiltInOps::CopyBufferToBuffer;
44-
break;
45-
case Builtin::FillBufferImmediate:
46-
builtinName = "FillBufferImmediate";
47-
builtin = NEO::EBuiltInOps::FillBuffer;
48-
break;
49-
case Builtin::FillBufferSSHOffset:
50-
builtinName = "FillBufferSSHOffset";
51-
builtin = NEO::EBuiltInOps::FillBuffer;
52-
break;
53-
case Builtin::FillBufferMiddle:
54-
builtinName = "FillBufferMiddle";
55-
builtin = NEO::EBuiltInOps::FillBuffer;
56-
break;
57-
case Builtin::FillBufferRightLeftover:
58-
builtinName = "FillBufferRightLeftover";
59-
builtin = NEO::EBuiltInOps::FillBuffer;
60-
break;
61-
case Builtin::QueryKernelTimestamps:
62-
builtinName = "QueryKernelTimestamps";
63-
builtin = NEO::EBuiltInOps::QueryKernelTimestamps;
64-
break;
65-
case Builtin::QueryKernelTimestampsWithOffsets:
66-
builtinName = "QueryKernelTimestampsWithOffsets";
67-
builtin = NEO::EBuiltInOps::QueryKernelTimestamps;
68-
break;
69-
default:
70-
UNRECOVERABLE_IF(true);
71-
};
72-
73-
builtins[builtId] = loadBuiltIn(builtin, builtinName);
18+
void BuiltinFunctionsLibImpl::initFunctions() {
19+
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(Builtin::COUNT); builtId++) {
20+
const char *builtinName = nullptr;
21+
NEO::EBuiltInOps::Type builtin;
22+
23+
switch (static_cast<Builtin>(builtId)) {
24+
case Builtin::CopyBufferBytes:
25+
builtinName = "copyBufferToBufferBytesSingle";
26+
builtin = NEO::EBuiltInOps::CopyBufferToBuffer;
27+
break;
28+
case Builtin::CopyBufferRectBytes2d:
29+
builtinName = "CopyBufferRectBytes2d";
30+
builtin = NEO::EBuiltInOps::CopyBufferRect;
31+
break;
32+
case Builtin::CopyBufferRectBytes3d:
33+
builtinName = "CopyBufferRectBytes3d";
34+
builtin = NEO::EBuiltInOps::CopyBufferRect;
35+
break;
36+
case Builtin::CopyBufferToBufferMiddle:
37+
builtinName = "CopyBufferToBufferMiddleRegion";
38+
builtin = NEO::EBuiltInOps::CopyBufferToBuffer;
39+
break;
40+
case Builtin::CopyBufferToBufferSide:
41+
builtinName = "CopyBufferToBufferSideRegion";
42+
builtin = NEO::EBuiltInOps::CopyBufferToBuffer;
43+
break;
44+
case Builtin::FillBufferImmediate:
45+
builtinName = "FillBufferImmediate";
46+
builtin = NEO::EBuiltInOps::FillBuffer;
47+
break;
48+
case Builtin::FillBufferSSHOffset:
49+
builtinName = "FillBufferSSHOffset";
50+
builtin = NEO::EBuiltInOps::FillBuffer;
51+
break;
52+
case Builtin::FillBufferMiddle:
53+
builtinName = "FillBufferMiddle";
54+
builtin = NEO::EBuiltInOps::FillBuffer;
55+
break;
56+
case Builtin::FillBufferRightLeftover:
57+
builtinName = "FillBufferRightLeftover";
58+
builtin = NEO::EBuiltInOps::FillBuffer;
59+
break;
60+
case Builtin::QueryKernelTimestamps:
61+
builtinName = "QueryKernelTimestamps";
62+
builtin = NEO::EBuiltInOps::QueryKernelTimestamps;
63+
break;
64+
case Builtin::QueryKernelTimestampsWithOffsets:
65+
builtinName = "QueryKernelTimestampsWithOffsets";
66+
builtin = NEO::EBuiltInOps::QueryKernelTimestamps;
67+
break;
68+
default:
69+
continue;
70+
};
71+
72+
builtins[builtId] = loadBuiltIn(builtin, builtinName);
73+
}
7474
}
7575

76-
void BuiltinFunctionsLibImpl::initBuiltinImageKernel(ImageBuiltin func) {
77-
auto builtId = static_cast<uint32_t>(func);
78-
79-
const char *builtinName = nullptr;
80-
NEO::EBuiltInOps::Type builtin;
81-
82-
switch (static_cast<ImageBuiltin>(builtId)) {
83-
case ImageBuiltin::CopyBufferToImage3d16Bytes:
84-
builtinName = "CopyBufferToImage3d16Bytes";
85-
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
86-
break;
87-
case ImageBuiltin::CopyBufferToImage3d2Bytes:
88-
builtinName = "CopyBufferToImage3d2Bytes";
89-
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
90-
break;
91-
case ImageBuiltin::CopyBufferToImage3d4Bytes:
92-
builtinName = "CopyBufferToImage3d4Bytes";
93-
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
94-
break;
95-
case ImageBuiltin::CopyBufferToImage3d8Bytes:
96-
builtinName = "CopyBufferToImage3d8Bytes";
97-
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
98-
break;
99-
case ImageBuiltin::CopyBufferToImage3dBytes:
100-
builtinName = "CopyBufferToImage3dBytes";
101-
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
102-
break;
103-
case ImageBuiltin::CopyImage3dToBuffer16Bytes:
104-
builtinName = "CopyImage3dToBuffer16Bytes";
105-
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
106-
break;
107-
case ImageBuiltin::CopyImage3dToBuffer2Bytes:
108-
builtinName = "CopyImage3dToBuffer2Bytes";
109-
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
110-
break;
111-
case ImageBuiltin::CopyImage3dToBuffer4Bytes:
112-
builtinName = "CopyImage3dToBuffer4Bytes";
113-
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
114-
break;
115-
case ImageBuiltin::CopyImage3dToBuffer8Bytes:
116-
builtinName = "CopyImage3dToBuffer8Bytes";
117-
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
118-
break;
119-
case ImageBuiltin::CopyImage3dToBufferBytes:
120-
builtinName = "CopyImage3dToBufferBytes";
121-
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
122-
break;
123-
case ImageBuiltin::CopyImageRegion:
124-
builtinName = "CopyImageToImage3d";
125-
builtin = NEO::EBuiltInOps::CopyImageToImage3d;
126-
break;
127-
default:
128-
UNRECOVERABLE_IF(true);
129-
};
130-
131-
imageBuiltins[builtId] = loadBuiltIn(builtin, builtinName);
76+
void BuiltinFunctionsLibImpl::initImageFunctions() {
77+
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(ImageBuiltin::COUNT); builtId++) {
78+
const char *builtinName = nullptr;
79+
NEO::EBuiltInOps::Type builtin;
80+
81+
switch (static_cast<ImageBuiltin>(builtId)) {
82+
case ImageBuiltin::CopyBufferToImage3d16Bytes:
83+
builtinName = "CopyBufferToImage3d16Bytes";
84+
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
85+
break;
86+
case ImageBuiltin::CopyBufferToImage3d2Bytes:
87+
builtinName = "CopyBufferToImage3d2Bytes";
88+
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
89+
break;
90+
case ImageBuiltin::CopyBufferToImage3d4Bytes:
91+
builtinName = "CopyBufferToImage3d4Bytes";
92+
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
93+
break;
94+
case ImageBuiltin::CopyBufferToImage3d8Bytes:
95+
builtinName = "CopyBufferToImage3d8Bytes";
96+
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
97+
break;
98+
case ImageBuiltin::CopyBufferToImage3dBytes:
99+
builtinName = "CopyBufferToImage3dBytes";
100+
builtin = NEO::EBuiltInOps::CopyBufferToImage3d;
101+
break;
102+
case ImageBuiltin::CopyImage3dToBuffer16Bytes:
103+
builtinName = "CopyImage3dToBuffer16Bytes";
104+
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
105+
break;
106+
case ImageBuiltin::CopyImage3dToBuffer2Bytes:
107+
builtinName = "CopyImage3dToBuffer2Bytes";
108+
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
109+
break;
110+
case ImageBuiltin::CopyImage3dToBuffer4Bytes:
111+
builtinName = "CopyImage3dToBuffer4Bytes";
112+
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
113+
break;
114+
case ImageBuiltin::CopyImage3dToBuffer8Bytes:
115+
builtinName = "CopyImage3dToBuffer8Bytes";
116+
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
117+
break;
118+
case ImageBuiltin::CopyImage3dToBufferBytes:
119+
builtinName = "CopyImage3dToBufferBytes";
120+
builtin = NEO::EBuiltInOps::CopyImage3dToBuffer;
121+
break;
122+
case ImageBuiltin::CopyImageRegion:
123+
builtinName = "CopyImageToImage3d";
124+
builtin = NEO::EBuiltInOps::CopyImageToImage3d;
125+
break;
126+
default:
127+
continue;
128+
};
129+
130+
imageBuiltins[builtId] = loadBuiltIn(builtin, builtinName);
131+
}
132132
}
133133

134134
Kernel *BuiltinFunctionsLibImpl::getFunction(Builtin func) {
135135
auto builtId = static_cast<uint32_t>(func);
136-
137-
if (builtins[builtId].get() == nullptr) {
138-
initBuiltinKernel(func);
139-
}
140-
141136
return builtins[builtId]->func.get();
142137
}
143138
Kernel *BuiltinFunctionsLibImpl::getImageFunction(ImageBuiltin func) {
144139
auto builtId = static_cast<uint32_t>(func);
145-
146-
if (imageBuiltins[builtId].get() == nullptr) {
147-
initBuiltinImageKernel(func);
148-
}
149-
150140
return imageBuiltins[builtId]->func.get();
151141
}
152142

@@ -155,10 +145,6 @@ void BuiltinFunctionsLibImpl::initPageFaultFunction() {
155145
}
156146

157147
Kernel *BuiltinFunctionsLibImpl::getPageFaultFunction() {
158-
if (pageFaultBuiltin.get() == nullptr) {
159-
initPageFaultFunction();
160-
}
161-
162148
return pageFaultBuiltin->func.get();
163149
}
164150

level_zero/core/source/builtin/builtin_functions_lib_impl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ struct BuiltinFunctionsLibImpl : BuiltinFunctionsLib {
3333
Kernel *getFunction(Builtin func) override;
3434
Kernel *getImageFunction(ImageBuiltin func) override;
3535
Kernel *getPageFaultFunction() override;
36-
void initBuiltinKernel(Builtin builtId) override;
37-
void initBuiltinImageKernel(ImageBuiltin func) override;
36+
void initFunctions() override;
37+
void initImageFunctions() override;
3838
void initPageFaultFunction() override;
3939
MOCKABLE_VIRTUAL std::unique_ptr<BuiltinFunctionsLibImpl::BuiltinData> loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName);
4040

level_zero/core/source/device/device_imp.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,11 @@ Device *Device::create(DriverHandle *driverHandle, NEO::Device *neoDevice, uint3
578578
}
579579

580580
if (neoDevice->getCompilerInterface()) {
581+
device->getBuiltinFunctionsLib()->initFunctions();
582+
device->getBuiltinFunctionsLib()->initPageFaultFunction();
583+
if (device->getHwInfo().capabilityTable.supportsImages) {
584+
device->getBuiltinFunctionsLib()->initImageFunctions();
585+
}
581586
auto hwInfo = neoDevice->getHardwareInfo();
582587
if (neoDevice->getPreemptionMode() == NEO::PreemptionMode::MidThread || neoDevice->isDebuggerActive()) {
583588
auto sipType = NEO::SipKernel::getSipKernelType(hwInfo.platform.eRenderCoreFamily, neoDevice->isDebuggerActive());

level_zero/core/test/unit_tests/mocks/mock_builtin_functions_lib_impl.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,16 @@ struct MockBuiltinFunctionsLibImpl : BuiltinFunctionsLibImpl {
2222
dummyModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
2323
dummyKernel->module = dummyModule.get();
2424
}
25-
void initBuiltinKernel(L0::Builtin func) override {
26-
auto builtId = static_cast<uint32_t>(func);
27-
if (builtins[builtId].get() == nullptr) {
25+
void initFunctions() override {
26+
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(Builtin::COUNT); builtId++) {
2827
builtins[builtId] = loadBuiltIn(NEO::EBuiltInOps::CopyBufferToBuffer, "copyBufferToBufferBytesSingle");
2928
}
3029
}
31-
void initBuiltinImageKernel(L0::ImageBuiltin func) override {
32-
auto builtId = static_cast<uint32_t>(func);
33-
if (imageBuiltins[builtId].get() == nullptr) {
30+
void initImageFunctions() override {
31+
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(ImageBuiltin::COUNT); builtId++) {
3432
imageBuiltins[builtId] = loadBuiltIn(NEO::EBuiltInOps::CopyImage3dToBuffer, "CopyImage3dToBuffer16Bytes");
3533
}
3634
}
37-
3835
void initPageFaultFunction() override {
3936
pageFaultBuiltin = loadBuiltIn(NEO::EBuiltInOps::CopyBufferToBuffer, "CopyBufferToBufferSideRegion");
4037
}

level_zero/core/test/unit_tests/mocks/mock_builtin_functions_lib_impl_timestamps.h

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,11 @@ struct MockBuiltinFunctionsLibImplTimestamps : BuiltinFunctionsLibImpl {
2323

2424
using BuiltinFunctionsLibImpl::BuiltinFunctionsLibImpl;
2525

26-
void initBuiltinKernel(Builtin func) override {
27-
switch (static_cast<Builtin>(func)) {
28-
case Builtin::QueryKernelTimestamps:
29-
if (builtins[0].get() == nullptr) {
30-
builtins[0] = loadBuiltIn(NEO::EBuiltInOps::QueryKernelTimestamps, "QueryKernelTimestamps");
31-
}
32-
break;
33-
case Builtin::QueryKernelTimestampsWithOffsets:
34-
if (builtins[1].get() == nullptr) {
35-
builtins[1] = loadBuiltIn(NEO::EBuiltInOps::QueryKernelTimestamps, "QueryKernelTimestampsWithOffsets");
36-
}
37-
break;
38-
default:
39-
break;
40-
};
41-
}
42-
void initBuiltinImageKernel(ImageBuiltin func) override {
26+
void initFunctions() override {
27+
builtins[0] = loadBuiltIn(NEO::EBuiltInOps::QueryKernelTimestamps, "QueryKernelTimestamps");
28+
builtins[1] = loadBuiltIn(NEO::EBuiltInOps::QueryKernelTimestamps, "QueryKernelTimestampsWithOffsets");
4329
}
30+
void initImageFunctions() override {}
4431

4532
void initPageFaultFunction() override {}
4633

0 commit comments

Comments
 (0)