Skip to content

Commit 6050d70

Browse files
committed
Merge remote-tracking branch 'origin/device-properties' into device-properties
2 parents ce7c11c + 4e0665f commit 6050d70

File tree

17 files changed

+1708
-12
lines changed

17 files changed

+1708
-12
lines changed

.github/actions/fetch_ctk/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,4 @@ runs:
123123
echo "CUDA_PATH=${CUDA_PATH}" >> $GITHUB_ENV
124124
echo "CUDA_HOME=${CUDA_PATH}" >> $GITHUB_ENV
125125
echo "${CUDA_PATH}/bin" >> $GITHUB_PATH
126-
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}:${CUDA_PATH}/lib" >> $GITHUB_ENV
126+
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}:${CUDA_PATH}/lib:${CUDA_PATH}/nvvm/lib64" >> $GITHUB_ENV
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# 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 11.0.3 to 12.8.0. Do not modify it directly.
6+
7+
from ..cynvvm cimport *
8+
9+
10+
###############################################################################
11+
# Wrapper functions
12+
###############################################################################
13+
14+
cdef nvvmResult _nvvmVersion(int* major, int* minor) except* nogil
15+
cdef nvvmResult _nvvmIRVersion(int* majorIR, int* minorIR, int* majorDbg, int* minorDbg) except* nogil
16+
cdef nvvmResult _nvvmCreateProgram(nvvmProgram* prog) except* nogil
17+
cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except* nogil
18+
cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except* nogil
19+
cdef nvvmResult _nvvmLazyAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except* nogil
20+
cdef nvvmResult _nvvmCompileProgram(nvvmProgram prog, int numOptions, const char** options) except* nogil
21+
cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except* nogil
22+
cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except* nogil
23+
cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except* nogil
24+
cdef nvvmResult _nvvmGetProgramLogSize(nvvmProgram prog, size_t* bufferSizeRet) except* nogil
25+
cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except* nogil
Lines changed: 360 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,360 @@
1+
# 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 11.0.3 to 12.8.0. Do not modify it directly.
6+
7+
from libc.stdint cimport intptr_t
8+
9+
from .utils cimport get_nvvm_dso_version_suffix
10+
11+
from .utils import FunctionNotFoundError, NotSupportedError
12+
13+
###############################################################################
14+
# Extern
15+
###############################################################################
16+
17+
cdef extern from "<dlfcn.h>" nogil:
18+
void* dlopen(const char*, int)
19+
char* dlerror()
20+
void* dlsym(void*, const char*)
21+
int dlclose(void*)
22+
23+
enum:
24+
RTLD_LAZY
25+
RTLD_NOW
26+
RTLD_GLOBAL
27+
RTLD_LOCAL
28+
29+
const void* RTLD_DEFAULT 'RTLD_DEFAULT'
30+
31+
32+
###############################################################################
33+
# Wrapper init
34+
###############################################################################
35+
36+
cdef bint __py_nvvm_init = False
37+
cdef void* __cuDriverGetVersion = NULL
38+
39+
cdef void* __nvvmVersion = NULL
40+
cdef void* __nvvmIRVersion = NULL
41+
cdef void* __nvvmCreateProgram = NULL
42+
cdef void* __nvvmDestroyProgram = NULL
43+
cdef void* __nvvmAddModuleToProgram = NULL
44+
cdef void* __nvvmLazyAddModuleToProgram = NULL
45+
cdef void* __nvvmCompileProgram = NULL
46+
cdef void* __nvvmVerifyProgram = NULL
47+
cdef void* __nvvmGetCompiledResultSize = NULL
48+
cdef void* __nvvmGetCompiledResult = NULL
49+
cdef void* __nvvmGetProgramLogSize = NULL
50+
cdef void* __nvvmGetProgramLog = NULL
51+
52+
53+
cdef void* load_library(const int driver_ver) except* with gil:
54+
cdef void* handle
55+
for suffix in get_nvvm_dso_version_suffix(driver_ver):
56+
so_name = "libnvvm.so" + (f".{suffix}" if suffix else suffix)
57+
handle = dlopen(so_name.encode(), RTLD_NOW | RTLD_GLOBAL)
58+
if handle != NULL:
59+
break
60+
else:
61+
err_msg = dlerror()
62+
raise RuntimeError(f'Failed to dlopen libnvvm ({err_msg.decode()})')
63+
return handle
64+
65+
66+
cdef int _check_or_init_nvvm() except -1 nogil:
67+
global __py_nvvm_init
68+
if __py_nvvm_init:
69+
return 0
70+
71+
# Load driver to check version
72+
cdef void* handle = NULL
73+
handle = dlopen('libcuda.so.1', RTLD_NOW | RTLD_GLOBAL)
74+
if handle == NULL:
75+
with gil:
76+
err_msg = dlerror()
77+
raise NotSupportedError(f'CUDA driver is not found ({err_msg.decode()})')
78+
global __cuDriverGetVersion
79+
if __cuDriverGetVersion == NULL:
80+
__cuDriverGetVersion = dlsym(handle, "cuDriverGetVersion")
81+
if __cuDriverGetVersion == NULL:
82+
with gil:
83+
raise RuntimeError('something went wrong')
84+
cdef int err, driver_ver
85+
err = (<int (*)(int*) nogil>__cuDriverGetVersion)(&driver_ver)
86+
if err != 0:
87+
with gil:
88+
raise RuntimeError('something went wrong')
89+
#dlclose(handle)
90+
handle = NULL
91+
92+
# Load function
93+
global __nvvmVersion
94+
__nvvmVersion = dlsym(RTLD_DEFAULT, 'nvvmVersion')
95+
if __nvvmVersion == NULL:
96+
if handle == NULL:
97+
handle = load_library(driver_ver)
98+
__nvvmVersion = dlsym(handle, 'nvvmVersion')
99+
100+
global __nvvmIRVersion
101+
__nvvmIRVersion = dlsym(RTLD_DEFAULT, 'nvvmIRVersion')
102+
if __nvvmIRVersion == NULL:
103+
if handle == NULL:
104+
handle = load_library(driver_ver)
105+
__nvvmIRVersion = dlsym(handle, 'nvvmIRVersion')
106+
107+
global __nvvmCreateProgram
108+
__nvvmCreateProgram = dlsym(RTLD_DEFAULT, 'nvvmCreateProgram')
109+
if __nvvmCreateProgram == NULL:
110+
if handle == NULL:
111+
handle = load_library(driver_ver)
112+
__nvvmCreateProgram = dlsym(handle, 'nvvmCreateProgram')
113+
114+
global __nvvmDestroyProgram
115+
__nvvmDestroyProgram = dlsym(RTLD_DEFAULT, 'nvvmDestroyProgram')
116+
if __nvvmDestroyProgram == NULL:
117+
if handle == NULL:
118+
handle = load_library(driver_ver)
119+
__nvvmDestroyProgram = dlsym(handle, 'nvvmDestroyProgram')
120+
121+
global __nvvmAddModuleToProgram
122+
__nvvmAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmAddModuleToProgram')
123+
if __nvvmAddModuleToProgram == NULL:
124+
if handle == NULL:
125+
handle = load_library(driver_ver)
126+
__nvvmAddModuleToProgram = dlsym(handle, 'nvvmAddModuleToProgram')
127+
128+
global __nvvmLazyAddModuleToProgram
129+
__nvvmLazyAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmLazyAddModuleToProgram')
130+
if __nvvmLazyAddModuleToProgram == NULL:
131+
if handle == NULL:
132+
handle = load_library(driver_ver)
133+
__nvvmLazyAddModuleToProgram = dlsym(handle, 'nvvmLazyAddModuleToProgram')
134+
135+
global __nvvmCompileProgram
136+
__nvvmCompileProgram = dlsym(RTLD_DEFAULT, 'nvvmCompileProgram')
137+
if __nvvmCompileProgram == NULL:
138+
if handle == NULL:
139+
handle = load_library(driver_ver)
140+
__nvvmCompileProgram = dlsym(handle, 'nvvmCompileProgram')
141+
142+
global __nvvmVerifyProgram
143+
__nvvmVerifyProgram = dlsym(RTLD_DEFAULT, 'nvvmVerifyProgram')
144+
if __nvvmVerifyProgram == NULL:
145+
if handle == NULL:
146+
handle = load_library(driver_ver)
147+
__nvvmVerifyProgram = dlsym(handle, 'nvvmVerifyProgram')
148+
149+
global __nvvmGetCompiledResultSize
150+
__nvvmGetCompiledResultSize = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResultSize')
151+
if __nvvmGetCompiledResultSize == NULL:
152+
if handle == NULL:
153+
handle = load_library(driver_ver)
154+
__nvvmGetCompiledResultSize = dlsym(handle, 'nvvmGetCompiledResultSize')
155+
156+
global __nvvmGetCompiledResult
157+
__nvvmGetCompiledResult = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResult')
158+
if __nvvmGetCompiledResult == NULL:
159+
if handle == NULL:
160+
handle = load_library(driver_ver)
161+
__nvvmGetCompiledResult = dlsym(handle, 'nvvmGetCompiledResult')
162+
163+
global __nvvmGetProgramLogSize
164+
__nvvmGetProgramLogSize = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLogSize')
165+
if __nvvmGetProgramLogSize == NULL:
166+
if handle == NULL:
167+
handle = load_library(driver_ver)
168+
__nvvmGetProgramLogSize = dlsym(handle, 'nvvmGetProgramLogSize')
169+
170+
global __nvvmGetProgramLog
171+
__nvvmGetProgramLog = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLog')
172+
if __nvvmGetProgramLog == NULL:
173+
if handle == NULL:
174+
handle = load_library(driver_ver)
175+
__nvvmGetProgramLog = dlsym(handle, 'nvvmGetProgramLog')
176+
177+
__py_nvvm_init = True
178+
return 0
179+
180+
181+
cdef dict func_ptrs = None
182+
183+
184+
cpdef dict _inspect_function_pointers():
185+
global func_ptrs
186+
if func_ptrs is not None:
187+
return func_ptrs
188+
189+
_check_or_init_nvvm()
190+
cdef dict data = {}
191+
192+
global __nvvmVersion
193+
data["__nvvmVersion"] = <intptr_t>__nvvmVersion
194+
195+
global __nvvmIRVersion
196+
data["__nvvmIRVersion"] = <intptr_t>__nvvmIRVersion
197+
198+
global __nvvmCreateProgram
199+
data["__nvvmCreateProgram"] = <intptr_t>__nvvmCreateProgram
200+
201+
global __nvvmDestroyProgram
202+
data["__nvvmDestroyProgram"] = <intptr_t>__nvvmDestroyProgram
203+
204+
global __nvvmAddModuleToProgram
205+
data["__nvvmAddModuleToProgram"] = <intptr_t>__nvvmAddModuleToProgram
206+
207+
global __nvvmLazyAddModuleToProgram
208+
data["__nvvmLazyAddModuleToProgram"] = <intptr_t>__nvvmLazyAddModuleToProgram
209+
210+
global __nvvmCompileProgram
211+
data["__nvvmCompileProgram"] = <intptr_t>__nvvmCompileProgram
212+
213+
global __nvvmVerifyProgram
214+
data["__nvvmVerifyProgram"] = <intptr_t>__nvvmVerifyProgram
215+
216+
global __nvvmGetCompiledResultSize
217+
data["__nvvmGetCompiledResultSize"] = <intptr_t>__nvvmGetCompiledResultSize
218+
219+
global __nvvmGetCompiledResult
220+
data["__nvvmGetCompiledResult"] = <intptr_t>__nvvmGetCompiledResult
221+
222+
global __nvvmGetProgramLogSize
223+
data["__nvvmGetProgramLogSize"] = <intptr_t>__nvvmGetProgramLogSize
224+
225+
global __nvvmGetProgramLog
226+
data["__nvvmGetProgramLog"] = <intptr_t>__nvvmGetProgramLog
227+
228+
func_ptrs = data
229+
return data
230+
231+
232+
cpdef _inspect_function_pointer(str name):
233+
global func_ptrs
234+
if func_ptrs is None:
235+
func_ptrs = _inspect_function_pointers()
236+
return func_ptrs[name]
237+
238+
239+
###############################################################################
240+
# Wrapper functions
241+
###############################################################################
242+
243+
cdef nvvmResult _nvvmVersion(int* major, int* minor) except* nogil:
244+
global __nvvmVersion
245+
_check_or_init_nvvm()
246+
if __nvvmVersion == NULL:
247+
with gil:
248+
raise FunctionNotFoundError("function nvvmVersion is not found")
249+
return (<nvvmResult (*)(int*, int*) nogil>__nvvmVersion)(
250+
major, minor)
251+
252+
253+
cdef nvvmResult _nvvmIRVersion(int* majorIR, int* minorIR, int* majorDbg, int* minorDbg) except* nogil:
254+
global __nvvmIRVersion
255+
_check_or_init_nvvm()
256+
if __nvvmIRVersion == NULL:
257+
with gil:
258+
raise FunctionNotFoundError("function nvvmIRVersion is not found")
259+
return (<nvvmResult (*)(int*, int*, int*, int*) nogil>__nvvmIRVersion)(
260+
majorIR, minorIR, majorDbg, minorDbg)
261+
262+
263+
cdef nvvmResult _nvvmCreateProgram(nvvmProgram* prog) except* nogil:
264+
global __nvvmCreateProgram
265+
_check_or_init_nvvm()
266+
if __nvvmCreateProgram == NULL:
267+
with gil:
268+
raise FunctionNotFoundError("function nvvmCreateProgram is not found")
269+
return (<nvvmResult (*)(nvvmProgram*) nogil>__nvvmCreateProgram)(
270+
prog)
271+
272+
273+
cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except* nogil:
274+
global __nvvmDestroyProgram
275+
_check_or_init_nvvm()
276+
if __nvvmDestroyProgram == NULL:
277+
with gil:
278+
raise FunctionNotFoundError("function nvvmDestroyProgram is not found")
279+
return (<nvvmResult (*)(nvvmProgram*) nogil>__nvvmDestroyProgram)(
280+
prog)
281+
282+
283+
cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except* nogil:
284+
global __nvvmAddModuleToProgram
285+
_check_or_init_nvvm()
286+
if __nvvmAddModuleToProgram == NULL:
287+
with gil:
288+
raise FunctionNotFoundError("function nvvmAddModuleToProgram is not found")
289+
return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) nogil>__nvvmAddModuleToProgram)(
290+
prog, buffer, size, name)
291+
292+
293+
cdef nvvmResult _nvvmLazyAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except* nogil:
294+
global __nvvmLazyAddModuleToProgram
295+
_check_or_init_nvvm()
296+
if __nvvmLazyAddModuleToProgram == NULL:
297+
with gil:
298+
raise FunctionNotFoundError("function nvvmLazyAddModuleToProgram is not found")
299+
return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) nogil>__nvvmLazyAddModuleToProgram)(
300+
prog, buffer, size, name)
301+
302+
303+
cdef nvvmResult _nvvmCompileProgram(nvvmProgram prog, int numOptions, const char** options) except* nogil:
304+
global __nvvmCompileProgram
305+
_check_or_init_nvvm()
306+
if __nvvmCompileProgram == NULL:
307+
with gil:
308+
raise FunctionNotFoundError("function nvvmCompileProgram is not found")
309+
return (<nvvmResult (*)(nvvmProgram, int, const char**) nogil>__nvvmCompileProgram)(
310+
prog, numOptions, options)
311+
312+
313+
cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except* nogil:
314+
global __nvvmVerifyProgram
315+
_check_or_init_nvvm()
316+
if __nvvmVerifyProgram == NULL:
317+
with gil:
318+
raise FunctionNotFoundError("function nvvmVerifyProgram is not found")
319+
return (<nvvmResult (*)(nvvmProgram, int, const char**) nogil>__nvvmVerifyProgram)(
320+
prog, numOptions, options)
321+
322+
323+
cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except* nogil:
324+
global __nvvmGetCompiledResultSize
325+
_check_or_init_nvvm()
326+
if __nvvmGetCompiledResultSize == NULL:
327+
with gil:
328+
raise FunctionNotFoundError("function nvvmGetCompiledResultSize is not found")
329+
return (<nvvmResult (*)(nvvmProgram, size_t*) nogil>__nvvmGetCompiledResultSize)(
330+
prog, bufferSizeRet)
331+
332+
333+
cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except* nogil:
334+
global __nvvmGetCompiledResult
335+
_check_or_init_nvvm()
336+
if __nvvmGetCompiledResult == NULL:
337+
with gil:
338+
raise FunctionNotFoundError("function nvvmGetCompiledResult is not found")
339+
return (<nvvmResult (*)(nvvmProgram, char*) nogil>__nvvmGetCompiledResult)(
340+
prog, buffer)
341+
342+
343+
cdef nvvmResult _nvvmGetProgramLogSize(nvvmProgram prog, size_t* bufferSizeRet) except* nogil:
344+
global __nvvmGetProgramLogSize
345+
_check_or_init_nvvm()
346+
if __nvvmGetProgramLogSize == NULL:
347+
with gil:
348+
raise FunctionNotFoundError("function nvvmGetProgramLogSize is not found")
349+
return (<nvvmResult (*)(nvvmProgram, size_t*) nogil>__nvvmGetProgramLogSize)(
350+
prog, bufferSizeRet)
351+
352+
353+
cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except* nogil:
354+
global __nvvmGetProgramLog
355+
_check_or_init_nvvm()
356+
if __nvvmGetProgramLog == NULL:
357+
with gil:
358+
raise FunctionNotFoundError("function nvvmGetProgramLog is not found")
359+
return (<nvvmResult (*)(nvvmProgram, char*) nogil>__nvvmGetProgramLog)(
360+
prog, buffer)

0 commit comments

Comments
 (0)