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> =//
2
3
//
3
4
// Data Parallel Control (dpctl)
4
5
//
@@ -63,6 +64,35 @@ static const int clLibLoadFlags = 0;
63
64
#error "OpenCL program compilation is unavailable for this platform"
64
65
#endif
65
66
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
+
66
96
typedef cl_program (*clCreateProgramWithSourceFT)(cl_context,
67
97
cl_uint,
68
98
const char **,
@@ -71,16 +101,8 @@ typedef cl_program (*clCreateProgramWithSourceFT)(cl_context,
71
101
const char *clCreateProgramWithSource_Name = " clCreateProgramWithSource" ;
72
102
clCreateProgramWithSourceFT get_clCreateProgramWithSource ()
73
103
{
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
-
82
104
static auto st_clCreateProgramWithSourceF =
83
- clLib .getSymbol <clCreateProgramWithSourceFT>(
105
+ cl_loader::get () .getSymbol <clCreateProgramWithSourceFT>(
84
106
clCreateProgramWithSource_Name);
85
107
86
108
return st_clCreateProgramWithSourceF;
@@ -93,15 +115,9 @@ typedef cl_program (*clCreateProgramWithILFT)(cl_context,
93
115
const char *clCreateProgramWithIL_Name = " clCreateProgramWithIL" ;
94
116
clCreateProgramWithILFT get_clCreateProgramWithIL ()
95
117
{
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
- }
103
118
static auto st_clCreateProgramWithILF =
104
- clLib.getSymbol <clCreateProgramWithILFT>(clCreateProgramWithIL_Name);
119
+ cl_loader::get ().getSymbol <clCreateProgramWithILFT>(
120
+ clCreateProgramWithIL_Name);
105
121
106
122
return st_clCreateProgramWithILF;
107
123
}
@@ -114,15 +130,8 @@ typedef cl_int (*clBuildProgramFT)(cl_program,
114
130
const char *clBuildProgram_Name = " clBuildProgram" ;
115
131
clBuildProgramFT get_clBuldProgram ()
116
132
{
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
- }
124
133
static auto st_clBuildProgramF =
125
- clLib .getSymbol <clBuildProgramFT>(clBuildProgram_Name);
134
+ cl_loader::get () .getSymbol <clBuildProgramFT>(clBuildProgram_Name);
126
135
127
136
return st_clBuildProgramF;
128
137
}
@@ -183,8 +192,6 @@ std::string _GetErrorCode_ocl_impl(cl_int code)
183
192
std::to_string (static_cast <int >(code)) + " )" ;
184
193
}
185
194
186
- constexpr backend cl_be = backend::opencl;
187
-
188
195
DPCTLSyclKernelBundleRef
189
196
_CreateKernelBundle_common_ocl_impl (cl_program clProgram,
190
197
const context &ctx,
@@ -354,6 +361,33 @@ static const int zeLibLoadFlags = 0;
354
361
355
362
constexpr sycl::backend ze_be = sycl::backend::ext_oneapi_level_zero;
356
363
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
+
357
391
typedef ze_result_t (*zeModuleCreateFT)(ze_context_handle_t ,
358
392
ze_device_handle_t ,
359
393
const ze_module_desc_t *,
@@ -362,15 +396,8 @@ typedef ze_result_t (*zeModuleCreateFT)(ze_context_handle_t,
362
396
const char *zeModuleCreate_Name = " zeModuleCreate" ;
363
397
zeModuleCreateFT get_zeModuleCreate ()
364
398
{
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
- }
372
399
static auto st_zeModuleCreateF =
373
- zeLib .getSymbol <zeModuleCreateFT>(zeModuleCreate_Name);
400
+ ze_loader::get () .getSymbol <zeModuleCreateFT>(zeModuleCreate_Name);
374
401
375
402
return st_zeModuleCreateF;
376
403
}
@@ -379,15 +406,8 @@ typedef ze_result_t (*zeModuleDestroyFT)(ze_module_handle_t);
379
406
const char *zeModuleDestroy_Name = " zeModuleDestroy" ;
380
407
zeModuleDestroyFT get_zeModuleDestroy ()
381
408
{
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
- }
389
409
static auto st_zeModuleDestroyF =
390
- zeLib .getSymbol <zeModuleDestroyFT>(zeModuleDestroy_Name);
410
+ ze_loader::get () .getSymbol <zeModuleDestroyFT>(zeModuleDestroy_Name);
391
411
392
412
return st_zeModuleDestroyF;
393
413
}
@@ -398,15 +418,8 @@ typedef ze_result_t (*zeKernelCreateFT)(ze_module_handle_t,
398
418
const char *zeKernelCreate_Name = " zeKernelCreate" ;
399
419
zeKernelCreateFT get_zeKernelCreate ()
400
420
{
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
- }
408
421
static auto st_zeKernelCreateF =
409
- zeLib .getSymbol <zeKernelCreateFT>(zeKernelCreate_Name);
422
+ ze_loader::get () .getSymbol <zeKernelCreateFT>(zeKernelCreate_Name);
410
423
411
424
return st_zeKernelCreateF;
412
425
}
0 commit comments