Skip to content

Commit 5746028

Browse files
Modularized symbol getters
1 parent 36c0b7e commit 5746028

File tree

1 file changed

+65
-52
lines changed

1 file changed

+65
-52
lines changed

libsyclinterface/source/dpctl_sycl_program_interface.cpp

Lines changed: 65 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
//===- dpctl_sycl_program_interface.cpp - Implements C API for sycl::program =//
1+
//===- dpctl_sycl_program_interface.cpp - Implements C API for
2+
// sycl::kernel_bundle<sycl::bundle_state::executable> =//
23
//
34
// Data Parallel Control (dpctl)
45
//
@@ -63,6 +64,35 @@ static const int clLibLoadFlags = 0;
6364
#error "OpenCL program compilation is unavailable for this platform"
6465
#endif
6566

67+
constexpr backend cl_be = backend::opencl;
68+
69+
struct cl_loader
70+
{
71+
public:
72+
static cl_loader &get()
73+
{
74+
static cl_loader _loader;
75+
return _loader;
76+
}
77+
78+
template <typename retTy> retTy getSymbol(const char *name)
79+
{
80+
if (!opened) {
81+
error_handler("The OpenCL loader dynamic library could not "
82+
"be opened.",
83+
__FILE__, __func__, __LINE__);
84+
85+
return nullptr;
86+
}
87+
return clLib.getSymbol<retTy>(name);
88+
}
89+
90+
private:
91+
dpctl::DynamicLibHelper clLib;
92+
bool opened;
93+
cl_loader() : clLib(clLoaderName, clLibLoadFlags), opened(clLib.opened()) {}
94+
};
95+
6696
typedef cl_program (*clCreateProgramWithSourceFT)(cl_context,
6797
cl_uint,
6898
const char **,
@@ -71,16 +101,8 @@ typedef cl_program (*clCreateProgramWithSourceFT)(cl_context,
71101
const char *clCreateProgramWithSource_Name = "clCreateProgramWithSource";
72102
clCreateProgramWithSourceFT get_clCreateProgramWithSource()
73103
{
74-
static dpctl::DynamicLibHelper clLib(clLoaderName, clLibLoadFlags);
75-
if (!clLib.opened()) {
76-
error_handler("The OpenCL loader dynamic library could not "
77-
"be opened.",
78-
__FILE__, __func__, __LINE__);
79-
return nullptr;
80-
}
81-
82104
static auto st_clCreateProgramWithSourceF =
83-
clLib.getSymbol<clCreateProgramWithSourceFT>(
105+
cl_loader::get().getSymbol<clCreateProgramWithSourceFT>(
84106
clCreateProgramWithSource_Name);
85107

86108
return st_clCreateProgramWithSourceF;
@@ -93,15 +115,9 @@ typedef cl_program (*clCreateProgramWithILFT)(cl_context,
93115
const char *clCreateProgramWithIL_Name = "clCreateProgramWithIL";
94116
clCreateProgramWithILFT get_clCreateProgramWithIL()
95117
{
96-
static dpctl::DynamicLibHelper clLib(clLoaderName, clLibLoadFlags);
97-
if (!clLib.opened()) {
98-
error_handler("The OpenCL loader dynamic library could not "
99-
"be opened.",
100-
__FILE__, __func__, __LINE__);
101-
return nullptr;
102-
}
103118
static auto st_clCreateProgramWithILF =
104-
clLib.getSymbol<clCreateProgramWithILFT>(clCreateProgramWithIL_Name);
119+
cl_loader::get().getSymbol<clCreateProgramWithILFT>(
120+
clCreateProgramWithIL_Name);
105121

106122
return st_clCreateProgramWithILF;
107123
}
@@ -114,15 +130,8 @@ typedef cl_int (*clBuildProgramFT)(cl_program,
114130
const char *clBuildProgram_Name = "clBuildProgram";
115131
clBuildProgramFT get_clBuldProgram()
116132
{
117-
static dpctl::DynamicLibHelper clLib(clLoaderName, clLibLoadFlags);
118-
if (!clLib.opened()) {
119-
error_handler("The OpenCL loader dynamic library could not "
120-
"be opened.",
121-
__FILE__, __func__, __LINE__);
122-
return nullptr;
123-
}
124133
static auto st_clBuildProgramF =
125-
clLib.getSymbol<clBuildProgramFT>(clBuildProgram_Name);
134+
cl_loader::get().getSymbol<clBuildProgramFT>(clBuildProgram_Name);
126135

127136
return st_clBuildProgramF;
128137
}
@@ -183,8 +192,6 @@ std::string _GetErrorCode_ocl_impl(cl_int code)
183192
std::to_string(static_cast<int>(code)) + ")";
184193
}
185194

186-
constexpr backend cl_be = backend::opencl;
187-
188195
DPCTLSyclKernelBundleRef
189196
_CreateKernelBundle_common_ocl_impl(cl_program clProgram,
190197
const context &ctx,
@@ -354,6 +361,33 @@ static const int zeLibLoadFlags = 0;
354361

355362
constexpr sycl::backend ze_be = sycl::backend::ext_oneapi_level_zero;
356363

364+
struct ze_loader
365+
{
366+
public:
367+
static ze_loader &get()
368+
{
369+
static ze_loader _loader;
370+
return _loader;
371+
}
372+
373+
template <typename retTy> retTy getSymbol(const char *name)
374+
{
375+
if (!opened) {
376+
error_handler("The Level-Zero loader dynamic library could not "
377+
"be opened.",
378+
__FILE__, __func__, __LINE__);
379+
380+
return nullptr;
381+
}
382+
return zeLib.getSymbol<retTy>(name);
383+
}
384+
385+
private:
386+
dpctl::DynamicLibHelper zeLib;
387+
bool opened;
388+
ze_loader() : zeLib(zeLoaderName, zeLibLoadFlags), opened(zeLib.opened()) {}
389+
};
390+
357391
typedef ze_result_t (*zeModuleCreateFT)(ze_context_handle_t,
358392
ze_device_handle_t,
359393
const ze_module_desc_t *,
@@ -362,15 +396,8 @@ typedef ze_result_t (*zeModuleCreateFT)(ze_context_handle_t,
362396
const char *zeModuleCreate_Name = "zeModuleCreate";
363397
zeModuleCreateFT get_zeModuleCreate()
364398
{
365-
static dpctl::DynamicLibHelper zeLib(zeLoaderName, zeLibLoadFlags);
366-
if (!zeLib.opened()) {
367-
error_handler("The level zero loader dynamic library could not "
368-
"be opened.",
369-
__FILE__, __func__, __LINE__);
370-
return nullptr;
371-
}
372399
static auto st_zeModuleCreateF =
373-
zeLib.getSymbol<zeModuleCreateFT>(zeModuleCreate_Name);
400+
ze_loader::get().getSymbol<zeModuleCreateFT>(zeModuleCreate_Name);
374401

375402
return st_zeModuleCreateF;
376403
}
@@ -379,15 +406,8 @@ typedef ze_result_t (*zeModuleDestroyFT)(ze_module_handle_t);
379406
const char *zeModuleDestroy_Name = "zeModuleDestroy";
380407
zeModuleDestroyFT get_zeModuleDestroy()
381408
{
382-
static dpctl::DynamicLibHelper zeLib(zeLoaderName, zeLibLoadFlags);
383-
if (!zeLib.opened()) {
384-
error_handler("The level zero loader dynamic library could not "
385-
"be opened.",
386-
__FILE__, __func__, __LINE__);
387-
return nullptr;
388-
}
389409
static auto st_zeModuleDestroyF =
390-
zeLib.getSymbol<zeModuleDestroyFT>(zeModuleDestroy_Name);
410+
ze_loader::get().getSymbol<zeModuleDestroyFT>(zeModuleDestroy_Name);
391411

392412
return st_zeModuleDestroyF;
393413
}
@@ -398,15 +418,8 @@ typedef ze_result_t (*zeKernelCreateFT)(ze_module_handle_t,
398418
const char *zeKernelCreate_Name = "zeKernelCreate";
399419
zeKernelCreateFT get_zeKernelCreate()
400420
{
401-
static dpctl::DynamicLibHelper zeLib(zeLoaderName, zeLibLoadFlags);
402-
if (!zeLib.opened()) {
403-
error_handler("The level zero loader dynamic library could not "
404-
"be opened.",
405-
__FILE__, __func__, __LINE__);
406-
return nullptr;
407-
}
408421
static auto st_zeKernelCreateF =
409-
zeLib.getSymbol<zeKernelCreateFT>(zeKernelCreate_Name);
422+
ze_loader::get().getSymbol<zeKernelCreateFT>(zeKernelCreate_Name);
410423

411424
return st_zeKernelCreateF;
412425
}

0 commit comments

Comments
 (0)