Harmony18090's picture
Add source batch 2/11
76f9669 verified
raw
history blame
14.4 kB
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
#
# This code was automatically generated across versions from 12.0.1 to 12.9.1. Do not modify it directly.
from libc.stdint cimport intptr_t, uintptr_t
import threading
from .utils import FunctionNotFoundError, NotSupportedError
from cuda.pathfinder import load_nvidia_dynamic_lib
###############################################################################
# Extern
###############################################################################
cdef extern from "<dlfcn.h>" nogil:
void* dlopen(const char*, int)
char* dlerror()
void* dlsym(void*, const char*)
int dlclose(void*)
enum:
RTLD_LAZY
RTLD_NOW
RTLD_GLOBAL
RTLD_LOCAL
const void* RTLD_DEFAULT 'RTLD_DEFAULT'
cdef int get_cuda_version():
cdef void* handle = NULL
cdef int err, driver_ver = 0
# Load driver to check version
handle = dlopen('libcuda.so.1', RTLD_NOW | RTLD_GLOBAL)
if handle == NULL:
err_msg = dlerror()
raise NotSupportedError(f'CUDA driver is not found ({err_msg.decode()})')
cuDriverGetVersion = dlsym(handle, "cuDriverGetVersion")
if cuDriverGetVersion == NULL:
raise RuntimeError('Did not find cuDriverGetVersion symbol in libcuda.so.1')
err = (<int (*)(int*) noexcept nogil>cuDriverGetVersion)(&driver_ver)
if err != 0:
raise RuntimeError(f'cuDriverGetVersion returned error code {err}')
return driver_ver
###############################################################################
# Wrapper init
###############################################################################
cdef object __symbol_lock = threading.Lock()
cdef bint __py_nvvm_init = False
cdef void* __cuDriverGetVersion = NULL
cdef void* __nvvmGetErrorString = NULL
cdef void* __nvvmVersion = NULL
cdef void* __nvvmIRVersion = NULL
cdef void* __nvvmCreateProgram = NULL
cdef void* __nvvmDestroyProgram = NULL
cdef void* __nvvmAddModuleToProgram = NULL
cdef void* __nvvmLazyAddModuleToProgram = NULL
cdef void* __nvvmCompileProgram = NULL
cdef void* __nvvmVerifyProgram = NULL
cdef void* __nvvmGetCompiledResultSize = NULL
cdef void* __nvvmGetCompiledResult = NULL
cdef void* __nvvmGetProgramLogSize = NULL
cdef void* __nvvmGetProgramLog = NULL
cdef void* load_library() except* with gil:
cdef uintptr_t handle = load_nvidia_dynamic_lib("nvvm")._handle_uint
return <void*>handle
cdef int __check_or_init_nvvm() except -1 nogil:
global __py_nvvm_init
cdef void* handle = NULL
with gil, __symbol_lock:
# Load function
global __nvvmGetErrorString
__nvvmGetErrorString = dlsym(RTLD_DEFAULT, 'nvvmGetErrorString')
if __nvvmGetErrorString == NULL:
if handle == NULL:
handle = load_library()
__nvvmGetErrorString = dlsym(handle, 'nvvmGetErrorString')
global __nvvmVersion
__nvvmVersion = dlsym(RTLD_DEFAULT, 'nvvmVersion')
if __nvvmVersion == NULL:
if handle == NULL:
handle = load_library()
__nvvmVersion = dlsym(handle, 'nvvmVersion')
global __nvvmIRVersion
__nvvmIRVersion = dlsym(RTLD_DEFAULT, 'nvvmIRVersion')
if __nvvmIRVersion == NULL:
if handle == NULL:
handle = load_library()
__nvvmIRVersion = dlsym(handle, 'nvvmIRVersion')
global __nvvmCreateProgram
__nvvmCreateProgram = dlsym(RTLD_DEFAULT, 'nvvmCreateProgram')
if __nvvmCreateProgram == NULL:
if handle == NULL:
handle = load_library()
__nvvmCreateProgram = dlsym(handle, 'nvvmCreateProgram')
global __nvvmDestroyProgram
__nvvmDestroyProgram = dlsym(RTLD_DEFAULT, 'nvvmDestroyProgram')
if __nvvmDestroyProgram == NULL:
if handle == NULL:
handle = load_library()
__nvvmDestroyProgram = dlsym(handle, 'nvvmDestroyProgram')
global __nvvmAddModuleToProgram
__nvvmAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmAddModuleToProgram')
if __nvvmAddModuleToProgram == NULL:
if handle == NULL:
handle = load_library()
__nvvmAddModuleToProgram = dlsym(handle, 'nvvmAddModuleToProgram')
global __nvvmLazyAddModuleToProgram
__nvvmLazyAddModuleToProgram = dlsym(RTLD_DEFAULT, 'nvvmLazyAddModuleToProgram')
if __nvvmLazyAddModuleToProgram == NULL:
if handle == NULL:
handle = load_library()
__nvvmLazyAddModuleToProgram = dlsym(handle, 'nvvmLazyAddModuleToProgram')
global __nvvmCompileProgram
__nvvmCompileProgram = dlsym(RTLD_DEFAULT, 'nvvmCompileProgram')
if __nvvmCompileProgram == NULL:
if handle == NULL:
handle = load_library()
__nvvmCompileProgram = dlsym(handle, 'nvvmCompileProgram')
global __nvvmVerifyProgram
__nvvmVerifyProgram = dlsym(RTLD_DEFAULT, 'nvvmVerifyProgram')
if __nvvmVerifyProgram == NULL:
if handle == NULL:
handle = load_library()
__nvvmVerifyProgram = dlsym(handle, 'nvvmVerifyProgram')
global __nvvmGetCompiledResultSize
__nvvmGetCompiledResultSize = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResultSize')
if __nvvmGetCompiledResultSize == NULL:
if handle == NULL:
handle = load_library()
__nvvmGetCompiledResultSize = dlsym(handle, 'nvvmGetCompiledResultSize')
global __nvvmGetCompiledResult
__nvvmGetCompiledResult = dlsym(RTLD_DEFAULT, 'nvvmGetCompiledResult')
if __nvvmGetCompiledResult == NULL:
if handle == NULL:
handle = load_library()
__nvvmGetCompiledResult = dlsym(handle, 'nvvmGetCompiledResult')
global __nvvmGetProgramLogSize
__nvvmGetProgramLogSize = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLogSize')
if __nvvmGetProgramLogSize == NULL:
if handle == NULL:
handle = load_library()
__nvvmGetProgramLogSize = dlsym(handle, 'nvvmGetProgramLogSize')
global __nvvmGetProgramLog
__nvvmGetProgramLog = dlsym(RTLD_DEFAULT, 'nvvmGetProgramLog')
if __nvvmGetProgramLog == NULL:
if handle == NULL:
handle = load_library()
__nvvmGetProgramLog = dlsym(handle, 'nvvmGetProgramLog')
__py_nvvm_init = True
return 0
cdef int _check_or_init_nvvm() except -1 nogil:
if __py_nvvm_init:
return 0
return __check_or_init_nvvm()
cdef dict func_ptrs = None
cpdef dict _inspect_function_pointers():
global func_ptrs
if func_ptrs is not None:
return func_ptrs
_check_or_init_nvvm()
cdef dict data = {}
global __nvvmGetErrorString
data["__nvvmGetErrorString"] = <intptr_t>__nvvmGetErrorString
global __nvvmVersion
data["__nvvmVersion"] = <intptr_t>__nvvmVersion
global __nvvmIRVersion
data["__nvvmIRVersion"] = <intptr_t>__nvvmIRVersion
global __nvvmCreateProgram
data["__nvvmCreateProgram"] = <intptr_t>__nvvmCreateProgram
global __nvvmDestroyProgram
data["__nvvmDestroyProgram"] = <intptr_t>__nvvmDestroyProgram
global __nvvmAddModuleToProgram
data["__nvvmAddModuleToProgram"] = <intptr_t>__nvvmAddModuleToProgram
global __nvvmLazyAddModuleToProgram
data["__nvvmLazyAddModuleToProgram"] = <intptr_t>__nvvmLazyAddModuleToProgram
global __nvvmCompileProgram
data["__nvvmCompileProgram"] = <intptr_t>__nvvmCompileProgram
global __nvvmVerifyProgram
data["__nvvmVerifyProgram"] = <intptr_t>__nvvmVerifyProgram
global __nvvmGetCompiledResultSize
data["__nvvmGetCompiledResultSize"] = <intptr_t>__nvvmGetCompiledResultSize
global __nvvmGetCompiledResult
data["__nvvmGetCompiledResult"] = <intptr_t>__nvvmGetCompiledResult
global __nvvmGetProgramLogSize
data["__nvvmGetProgramLogSize"] = <intptr_t>__nvvmGetProgramLogSize
global __nvvmGetProgramLog
data["__nvvmGetProgramLog"] = <intptr_t>__nvvmGetProgramLog
func_ptrs = data
return data
cpdef _inspect_function_pointer(str name):
global func_ptrs
if func_ptrs is None:
func_ptrs = _inspect_function_pointers()
return func_ptrs[name]
###############################################################################
# Wrapper functions
###############################################################################
cdef const char* _nvvmGetErrorString(nvvmResult result) except?NULL nogil:
global __nvvmGetErrorString
_check_or_init_nvvm()
if __nvvmGetErrorString == NULL:
with gil:
raise FunctionNotFoundError("function nvvmGetErrorString is not found")
return (<const char* (*)(nvvmResult) noexcept nogil>__nvvmGetErrorString)(
result)
cdef nvvmResult _nvvmVersion(int* major, int* minor) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmVersion
_check_or_init_nvvm()
if __nvvmVersion == NULL:
with gil:
raise FunctionNotFoundError("function nvvmVersion is not found")
return (<nvvmResult (*)(int*, int*) noexcept nogil>__nvvmVersion)(
major, minor)
cdef nvvmResult _nvvmIRVersion(int* majorIR, int* minorIR, int* majorDbg, int* minorDbg) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmIRVersion
_check_or_init_nvvm()
if __nvvmIRVersion == NULL:
with gil:
raise FunctionNotFoundError("function nvvmIRVersion is not found")
return (<nvvmResult (*)(int*, int*, int*, int*) noexcept nogil>__nvvmIRVersion)(
majorIR, minorIR, majorDbg, minorDbg)
cdef nvvmResult _nvvmCreateProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmCreateProgram
_check_or_init_nvvm()
if __nvvmCreateProgram == NULL:
with gil:
raise FunctionNotFoundError("function nvvmCreateProgram is not found")
return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmCreateProgram)(
prog)
cdef nvvmResult _nvvmDestroyProgram(nvvmProgram* prog) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmDestroyProgram
_check_or_init_nvvm()
if __nvvmDestroyProgram == NULL:
with gil:
raise FunctionNotFoundError("function nvvmDestroyProgram is not found")
return (<nvvmResult (*)(nvvmProgram*) noexcept nogil>__nvvmDestroyProgram)(
prog)
cdef nvvmResult _nvvmAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmAddModuleToProgram
_check_or_init_nvvm()
if __nvvmAddModuleToProgram == NULL:
with gil:
raise FunctionNotFoundError("function nvvmAddModuleToProgram is not found")
return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmAddModuleToProgram)(
prog, buffer, size, name)
cdef nvvmResult _nvvmLazyAddModuleToProgram(nvvmProgram prog, const char* buffer, size_t size, const char* name) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmLazyAddModuleToProgram
_check_or_init_nvvm()
if __nvvmLazyAddModuleToProgram == NULL:
with gil:
raise FunctionNotFoundError("function nvvmLazyAddModuleToProgram is not found")
return (<nvvmResult (*)(nvvmProgram, const char*, size_t, const char*) noexcept nogil>__nvvmLazyAddModuleToProgram)(
prog, buffer, size, name)
cdef nvvmResult _nvvmCompileProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmCompileProgram
_check_or_init_nvvm()
if __nvvmCompileProgram == NULL:
with gil:
raise FunctionNotFoundError("function nvvmCompileProgram is not found")
return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmCompileProgram)(
prog, numOptions, options)
cdef nvvmResult _nvvmVerifyProgram(nvvmProgram prog, int numOptions, const char** options) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmVerifyProgram
_check_or_init_nvvm()
if __nvvmVerifyProgram == NULL:
with gil:
raise FunctionNotFoundError("function nvvmVerifyProgram is not found")
return (<nvvmResult (*)(nvvmProgram, int, const char**) noexcept nogil>__nvvmVerifyProgram)(
prog, numOptions, options)
cdef nvvmResult _nvvmGetCompiledResultSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmGetCompiledResultSize
_check_or_init_nvvm()
if __nvvmGetCompiledResultSize == NULL:
with gil:
raise FunctionNotFoundError("function nvvmGetCompiledResultSize is not found")
return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetCompiledResultSize)(
prog, bufferSizeRet)
cdef nvvmResult _nvvmGetCompiledResult(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmGetCompiledResult
_check_or_init_nvvm()
if __nvvmGetCompiledResult == NULL:
with gil:
raise FunctionNotFoundError("function nvvmGetCompiledResult is not found")
return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetCompiledResult)(
prog, buffer)
cdef nvvmResult _nvvmGetProgramLogSize(nvvmProgram prog, size_t* bufferSizeRet) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmGetProgramLogSize
_check_or_init_nvvm()
if __nvvmGetProgramLogSize == NULL:
with gil:
raise FunctionNotFoundError("function nvvmGetProgramLogSize is not found")
return (<nvvmResult (*)(nvvmProgram, size_t*) noexcept nogil>__nvvmGetProgramLogSize)(
prog, bufferSizeRet)
cdef nvvmResult _nvvmGetProgramLog(nvvmProgram prog, char* buffer) except?_NVVMRESULT_INTERNAL_LOADING_ERROR nogil:
global __nvvmGetProgramLog
_check_or_init_nvvm()
if __nvvmGetProgramLog == NULL:
with gil:
raise FunctionNotFoundError("function nvvmGetProgramLog is not found")
return (<nvvmResult (*)(nvvmProgram, char*) noexcept nogil>__nvvmGetProgramLog)(
prog, buffer)