@@ -54,6 +54,10 @@ def __init__(
5454 ):
5555 self .context = codegen_targetctx
5656 self .builder = builder
57+ # TODO: get dpex RT from cached property once the PR is merged
58+ # https://github.com/IntelPython/numba-dpex/pull/1027
59+ # and get rid of the global variable. Use self.context.dpexrt instead.
60+ self .dpexrt = DpexRTContext (self .context )
5761
5862 if config .DEBUG_KERNEL_LAUNCHER :
5963 cgutils .printf (
@@ -139,7 +143,7 @@ def get_queue_ref_val(
139143
140144 return ptr_to_queue_ref
141145
142- def get_kernel (self , qref , kernel_module : _KernelModule ):
146+ def get_kernel (self , queue_ref , kernel_module : _KernelModule ):
143147 """Returns the pointer to the sycl::kernel object in a passed in
144148 sycl::kernel_bundle wrapper object.
145149 """
@@ -150,23 +154,32 @@ def get_kernel(self, qref, kernel_module: _KernelModule):
150154 bytes = kernel_module .kernel_bitcode ,
151155 )
152156
153- # Create a sycl::kernel_bundle object and return it as an opaque pointer
154- # using dpctl's libsyclinterface.
155- kbref = self .create_kernel_bundle_from_spirv (
156- queue_ref = qref ,
157- kernel_bc = kernel_bc_byte_str ,
158- kernel_bc_size_in_bytes = len (kernel_module .kernel_bitcode ),
159- )
160-
161157 kernel_name = self .context .insert_const_string (
162158 self .builder .module , kernel_module .kernel_name
163159 )
164160
165- kernel_ref = sycl .dpctl_kernel_bundle_get_kernel (
166- self .builder , kbref , kernel_name
161+ context_ref = sycl .dpctl_queue_get_context (self .builder , queue_ref )
162+ device_ref = sycl .dpctl_queue_get_device (self .builder , queue_ref )
163+
164+ kernel_ref = self .dpexrt .build_or_get_kernel (
165+ self .builder ,
166+ [
167+ context_ref ,
168+ device_ref ,
169+ llvmir .Constant (
170+ llvmir .IntType (64 ), hash (kernel_module .kernel_bitcode )
171+ ),
172+ kernel_bc_byte_str ,
173+ llvmir .Constant (
174+ llvmir .IntType (64 ), len (kernel_module .kernel_bitcode )
175+ ),
176+ self .builder .load (create_null_ptr (self .builder , self .context )),
177+ kernel_name ,
178+ ],
167179 )
168180
169- sycl .dpctl_kernel_bundle_delete (self .builder , kbref )
181+ sycl .dpctl_context_delete (self .builder , context_ref )
182+ sycl .dpctl_device_delete (self .builder , device_ref )
170183
171184 return kernel_ref
172185
@@ -210,36 +223,6 @@ def create_llvm_values_for_index_space(
210223
211224 return LLRange (global_range_extents , local_range_extents )
212225
213- def create_kernel_bundle_from_spirv (
214- self ,
215- queue_ref : llvmir .PointerType ,
216- kernel_bc : llvmir .Constant ,
217- kernel_bc_size_in_bytes : int ,
218- ) -> llvmir .CallInstr :
219- """Calls DPCTLKernelBundle_CreateFromSpirv to create an opaque pointer
220- to a sycl::kernel_bundle from the SPIR-V generated for a kernel.
221- """
222- device_ref = sycl .dpctl_queue_get_device (self .builder , queue_ref )
223- context_ref = sycl .dpctl_queue_get_context (self .builder , queue_ref )
224- args = [
225- context_ref ,
226- device_ref ,
227- kernel_bc ,
228- llvmir .Constant (llvmir .IntType (64 ), kernel_bc_size_in_bytes ),
229- self .builder .load (create_null_ptr (self .builder , self .context )),
230- ]
231- kb_ref = sycl .dpctl_kernel_bundle_create_from_spirv (self .builder , * args )
232- sycl .dpctl_context_delete (self .builder , context_ref )
233- sycl .dpctl_device_delete (self .builder , device_ref )
234-
235- if config .DEBUG_KERNEL_LAUNCHER :
236- cgutils .printf (
237- self .builder ,
238- "DPEX-DEBUG: Generated kernel_bundle from SPIR-V.\n " ,
239- )
240-
241- return kb_ref
242-
243226 def acquire_meminfo_and_schedule_release (
244227 self ,
245228 queue_ref ,
@@ -259,12 +242,7 @@ def acquire_meminfo_and_schedule_release(
259242 status_ptr = cgutils .alloca_once (
260243 self .builder , self .context .get_value_type (types .uint64 )
261244 )
262- # TODO: get dpex RT from cached property once the PR is merged
263- # https://github.com/IntelPython/numba-dpex/pull/1027
264- # host_eref = ctx.dpexrt.acquire_meminfo_and_schedule_release( # noqa: W0621
265- host_eref = DpexRTContext (
266- self .context
267- ).acquire_meminfo_and_schedule_release (
245+ host_eref = self .dpexrt .acquire_meminfo_and_schedule_release (
268246 self .builder ,
269247 [
270248 self .context .nrt .get_nrt_api (self .builder ),
0 commit comments