Coverage for cuda / bindings / _internal / nvvm.pyx: 63%
215 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-10 01:19 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-10 01:19 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
4#
5# This code was automatically generated across versions from 12.0.1 to 13.1.0. Do not modify it directly.
7from libc.stdint cimport intptr_t, uintptr_t
9import threading
10from .utils import FunctionNotFoundError, NotSupportedError
12from cuda.pathfinder import load_nvidia_dynamic_lib
15###############################################################################
16# Extern
17###############################################################################
19# You must 'from .utils import NotSupportedError' before using this template
21cdef extern from "<dlfcn.h>" nogil:
22 void* dlopen(const char*, int)
23 char* dlerror()
24 void* dlsym(void*, const char*)
25 int dlclose(void*)
27 enum:
28 RTLD_LAZY
29 RTLD_NOW
30 RTLD_GLOBAL
31 RTLD_LOCAL
33 const void* RTLD_DEFAULT 'RTLD_DEFAULT'
35cdef int get_cuda_version():
36 cdef void* handle = NULL
37 cdef int err, driver_ver = 0
39 # Load driver to check version
40 handle = dlopen('libcuda.so.1', RTLD_NOW | RTLD_GLOBAL)
41 if handle == NULL:
42 err_msg = dlerror()
43 raise NotSupportedError(f'CUDA driver is not found ({err_msg.decode()})')
44 cuDriverGetVersion = dlsym(handle, "cuDriverGetVersion")
45 if cuDriverGetVersion == NULL:
46 raise RuntimeError('Did not find cuDriverGetVersion symbol in libcuda.so.1')
47 err = (<int (*)(int*) noexcept nogil>cuDriverGetVersion)(&driver_ver)
48 if err != 0:
49 raise RuntimeError(f'cuDriverGetVersion returned error code {err}')
51 return driver_ver
55###############################################################################
56# Wrapper init
57###############################################################################
59cdef object __symbol_lock = threading.Lock()
60cdef bint __py_nvvm_init = False
62cdef void* __nvvmGetErrorString = NULL
63cdef void* __nvvmVersion = NULL
64cdef void* __nvvmIRVersion = NULL
65cdef void* __nvvmCreateProgram = NULL
66cdef void* __nvvmDestroyProgram = NULL
67cdef void* __nvvmAddModuleToProgram = NULL
68cdef void* __nvvmLazyAddModuleToProgram = NULL
69cdef void* __nvvmCompileProgram = NULL
70cdef void* __nvvmVerifyProgram = NULL
71cdef void* __nvvmGetCompiledResultSize = NULL
72cdef void* __nvvmGetCompiledResult = NULL
73cdef void* __nvvmGetProgramLogSize = NULL
74cdef void* __nvvmGetProgramLog = NULL
77cdef void* load_library() except* with gil:
78 cdef uintptr_t handle = load_nvidia_dynamic_lib("nvvm")._handle_uint
79 return <void*>handle
82cdef int _init_nvvm() except -1 nogil:
83 global __py_nvvm_init
85 cdef void* handle = NULL
87 with gil, __symbol_lock:
88 # Recheck the flag after obtaining the locks
89 if __py_nvvm_init:
90 return 0
92 # Load function
93 global __nvvmGetErrorString
94 __nvvmGetErrorString = dlsym(RTLD_DEFAULT, 'nvvmGetErrorString')
95 if __nvvmGetErrorString == NULL:
96 if handle == NULL:
97 handle = load_library()
98 __nvvmGetErrorString = dlsym(handle, 'nvvmGetErrorString')
100 global __nvvmVersion
101 __nvvmVersion = dlsym(RTLD_DEFAULT, 'nvvmVersion')
102 if __nvvmVersion == NULL:
103 if handle == NULL:
104 handle = load_library()
105 __nvvmVersion = dlsym(handle, 'nvvmVersion')
107 global __nvvmIRVersion
108 __nvvmIRVersion = dlsym(RTLD_DEFAULT, 'nvvmIRVersion')
109 if __nvvmIRVersion == NULL:
110 if handle == NULL:
111 handle = load_library()
112 __nvvmIRVersion = dlsym(handle, 'nvvmIRVersion')
114 global __nvvmCreateProgram
115 __nvvmCreateProgram = dlsym(RTLD_DEFAULT, 'nvvmCreateProgram')
116 if __nvvmCreateProgram == NULL:
117 if handle == NULL:
118 handle = load_library()
119 __nvvmCreateProgram = dlsym(handle, 'nvvmCreateProgram')
121 global __nvvmDestroyProgram
122 __nvvmDestroyProgram = dlsym(RTLD_DEFAULT, 'nvvmDestroyProgram')
123 if __nvvmDestroyProgram == NULL:
124 if handle == NULL:
125 handle = load_library()
126 __nvvmDestroyProgram = dlsym(handle, 'nvvmDestroyProgram')
128 global __nvvmAddModuleToProgram
129 __nvvmAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmAddModuleToProgram')
130 if __nvvmAddModuleToProgram == NULL:
131 if handle == NULL:
132 handle = load_library()
133 __nvvmAddModuleToProgram = dlsym(handle, 'nvvmAddModuleToProgram')
135 global __nvvmLazyAddModuleToProgram
136 __nvvmLazyAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmLazyAddModuleToProgram')
137 if __nvvmLazyAddModuleToProgram == NULL:
138 if handle == NULL:
139 handle = load_library()
140 __nvvmLazyAddModuleToProgram = dlsym(handle, 'nvvmLazyAddModuleToProgram')
142 global __nvvmCompileProgram
143 __nvvmCompileProgram = dlsym(RTLD_DEFAULT, 'nvvmCompileProgram')
144 if __nvvmCompileProgram == NULL:
145 if handle == NULL:
146 handle = load_library()
147 __nvvmCompileProgram = dlsym(handle, 'nvvmCompileProgram')
149 global __nvvmVerifyProgram
150 __nvvmVerifyProgram = dlsym(RTLD_DEFAULT, 'nvvmVerifyProgram')
151 if __nvvmVerifyProgram == NULL:
152 if handle == NULL:
153 handle = load_library()
154 __nvvmVerifyProgram = dlsym(handle, 'nvvmVerifyProgram')
156 global __nvvmGetCompiledResultSize
157 __nvvmGetCompiledResultSize = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResultSize')
158 if __nvvmGetCompiledResultSize == NULL:
159 if handle == NULL:
160 handle = load_library()
161 __nvvmGetCompiledResultSize = dlsym(handle, 'nvvmGetCompiledResultSize')
163 global __nvvmGetCompiledResult
164 __nvvmGetCompiledResult = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResult')
165 if __nvvmGetCompiledResult == NULL:
166 if handle == NULL:
167 handle = load_library()
168 __nvvmGetCompiledResult = dlsym(handle, 'nvvmGetCompiledResult')
170 global __nvvmGetProgramLogSize
171 __nvvmGetProgramLogSize = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLogSize')
172 if __nvvmGetProgramLogSize == NULL:
173 if handle == NULL:
174 handle = load_library()
175 __nvvmGetProgramLogSize = dlsym(handle, 'nvvmGetProgramLogSize')
177 global __nvvmGetProgramLog
178 __nvvmGetProgramLog = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLog')
179 if __nvvmGetProgramLog == NULL:
180 if handle == NULL:
181 handle = load_library()
182 __nvvmGetProgramLog = dlsym(handle, 'nvvmGetProgramLog')
184 __py_nvvm_init = True
185 return 0
188cdef inline int _check_or_init_nvvm() except -1 nogil:
189 if __py_nvvm_init:
190 return 0
192 return _init_nvvm()
195cdef dict func_ptrs = None
198cpdef dict _inspect_function_pointers():
199 global func_ptrs
200 if func_ptrs is not None:
201 return func_ptrs
203 _check_or_init_nvvm()
204 cdef dict data = {}
206 global __nvvmGetErrorString
207 data["__nvvmGetErrorString"] = <intptr_t>__nvvmGetErrorString
209 global __nvvmVersion
210 data["__nvvmVersion"] = <intptr_t>__nvvmVersion
212 global __nvvmIRVersion
213 data["__nvvmIRVersion"] = <intptr_t>__nvvmIRVersion
215 global __nvvmCreateProgram
216 data["__nvvmCreateProgram"] = <intptr_t>__nvvmCreateProgram
218 global __nvvmDestroyProgram
219 data["__nvvmDestroyProgram"] = <intptr_t>__nvvmDestroyProgram
221 global __nvvmAddModuleToProgram
222 data["__nvvmAddModuleToProgram"] = <intptr_t>__nvvmAddModuleToProgram
224 global __nvvmLazyAddModuleToProgram
225 data["__nvvmLazyAddModuleToProgram"] = <intptr_t>__nvvmLazyAddModuleToProgram
227 global __nvvmCompileProgram
228 data["__nvvmCompileProgram"] = <intptr_t>__nvvmCompileProgram
230 global __nvvmVerifyProgram
231 data["__nvvmVerifyProgram"] = <intptr_t>__nvvmVerifyProgram
233 global __nvvmGetCompiledResultSize
234 data["__nvvmGetCompiledResultSize"] = <intptr_t>__nvvmGetCompiledResultSize
236 global __nvvmGetCompiledResult
237 data["__nvvmGetCompiledResult"] = <intptr_t>__nvvmGetCompiledResult
239 global __nvvmGetProgramLogSize
240 data["__nvvmGetProgramLogSize"] = <intptr_t>__nvvmGetProgramLogSize
242 global __nvvmGetProgramLog
243 data["__nvvmGetProgramLog"] = <intptr_t>__nvvmGetProgramLog
245 func_ptrs = data
246 return data
249cpdef _inspect_function_pointer(str name):
250 global func_ptrs
251 if func_ptrs is None:
252 func_ptrs = _inspect_function_pointers()
253 return func_ptrs[name]
256###############################################################################
257# Wrapper functions
258###############################################################################
260cdef const char* _nvvmGetErrorString(nvvmResult result) except?NULL nogil:
261 global __nvvmGetErrorString
262 _check_or_init_nvvm()
263 if __nvvmGetErrorString == NULL:
264 with gil:
265 raise FunctionNotFoundError("function nvvmGetErrorString is not found")
266 return (<const char* (*)(nvvmResult) noexcept nogil>__nvvmGetErrorString)(
267 result)
270cdef nvvmResult _nvvmVersion(int* major, int* minor) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
271 global __nvvmVersion
272 _check_or_init_nvvm()
273 if __nvvmVersion == NULL:
274 with gil:
275 raise FunctionNotFoundError("function nvvmVersion is not found")
276 return (<nvvmResult (*)(int*, int*) noexcept nogil>__nvvmVersion)(
277 major, minor)
280cdef nvvmResult _nvvmIRVersion(int* majorIR, int* minorIR, int* majorDbg, int* minorDbg) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
281 global __nvvmIRVersion
282 _check_or_init_nvvm()
283 if __nvvmIRVersion == NULL:
284 with gil:
285 raise FunctionNotFoundError("function nvvmIRVersion is not found")
286 return (<nvvmResult (*)(int*, int*, int*, int*) noexcept nogil>__nvvmIRVersion)(
287 majorIR, minorIR, majorDbg, minorDbg)
290cdef nvvmResult _nvvmCreateProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
291 global __nvvmCreateProgram
292 _check_or_init_nvvm()
293 if __nvvmCreateProgram == NULL:
294 with gil:
295 raise FunctionNotFoundError("function nvvmCreateProgram is not found")
296 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmCreateProgram)(
297 prog)
300cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
301 global __nvvmDestroyProgram
302 _check_or_init_nvvm()
303 if __nvvmDestroyProgram == NULL:
304 with gil:
305 raise FunctionNotFoundError("function nvvmDestroyProgram is not found")
306 return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmDestroyProgram)(
307 prog)
310cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
311 global __nvvmAddModuleToProgram
312 _check_or_init_nvvm()
313 if __nvvmAddModuleToProgram == NULL:
314 with gil:
315 raise FunctionNotFoundError("function nvvmAddModuleToProgram is not found")
316 return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmAddModuleToProgram)(
317 prog, buffer, size, name)
320cdef nvvmResult _nvvmLazyAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
321 global __nvvmLazyAddModuleToProgram
322 _check_or_init_nvvm()
323 if __nvvmLazyAddModuleToProgram == NULL:
324 with gil:
325 raise FunctionNotFoundError("function nvvmLazyAddModuleToProgram is not found")
326 return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmLazyAddModuleToProgram)(
327 prog, buffer, size, name)
330cdef nvvmResult _nvvmCompileProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
331 global __nvvmCompileProgram
332 _check_or_init_nvvm()
333 if __nvvmCompileProgram == NULL:
334 with gil:
335 raise FunctionNotFoundError("function nvvmCompileProgram is not found")
336 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmCompileProgram)(
337 prog, numOptions, options)
340cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
341 global __nvvmVerifyProgram
342 _check_or_init_nvvm()
343 if __nvvmVerifyProgram == NULL:
344 with gil:
345 raise FunctionNotFoundError("function nvvmVerifyProgram is not found")
346 return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmVerifyProgram)(
347 prog, numOptions, options)
350cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
351 global __nvvmGetCompiledResultSize
352 _check_or_init_nvvm()
353 if __nvvmGetCompiledResultSize == NULL:
354 with gil:
355 raise FunctionNotFoundError("function nvvmGetCompiledResultSize is not found")
356 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetCompiledResultSize)(
357 prog, bufferSizeRet)
360cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
361 global __nvvmGetCompiledResult
362 _check_or_init_nvvm()
363 if __nvvmGetCompiledResult == NULL:
364 with gil:
365 raise FunctionNotFoundError("function nvvmGetCompiledResult is not found")
366 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetCompiledResult)(
367 prog, buffer)
370cdef nvvmResult _nvvmGetProgramLogSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
371 global __nvvmGetProgramLogSize
372 _check_or_init_nvvm()
373 if __nvvmGetProgramLogSize == NULL:
374 with gil:
375 raise FunctionNotFoundError("function nvvmGetProgramLogSize is not found")
376 return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetProgramLogSize)(
377 prog, bufferSizeRet)
380cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
381 global __nvvmGetProgramLog
382 _check_or_init_nvvm()
383 if __nvvmGetProgramLog == NULL:
384 with gil:
385 raise FunctionNotFoundError("function nvvmGetProgramLog is not found")
386 return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetProgramLog)(
387 prog, buffer)