6.12. 库管理

本节介绍底层 CUDA 驱动程序应用程序编程接口的库管理功能。

函数

CUresult cuKernelGetAttribute ( int* pi, CUfunction_attribute attrib, CUkernel kernel, CUdevice dev )
返回有关内核的信息。
CUresult cuKernelGetFunction ( CUfunction* pFunc, CUkernel kernel )
返回函数句柄。
CUresult cuKernelGetLibrary ( CUlibrary* pLib, CUkernel kernel )
返回库句柄。
CUresult cuKernelGetName ( const char** name, CUkernel hfunc )
返回 CUkernel 句柄的函数名称。
CUresult cuKernelGetParamInfo ( CUkernel kernel, size_t paramIndex, size_t* paramOffset, size_t* paramSize )
返回设备端参数布局中内核参数的偏移量和大小。
CUresult cuKernelSetAttribute ( CUfunction_attribute attrib, int  val, CUkernel kernel, CUdevice dev )
设置有关内核的信息。
CUresult cuKernelSetCacheConfig ( CUkernel kernel, CUfunc_cache config, CUdevice dev )
为设备内核设置首选缓存配置。
CUresult cuLibraryEnumerateKernels ( CUkernel* kernels, unsigned int  numKernels, CUlibrary lib )
检索库中的内核句柄。
CUresult cuLibraryGetGlobal ( CUdeviceptr* dptr, size_t* bytes, CUlibrary library, const char* name )
返回全局设备指针。
CUresult cuLibraryGetKernel ( CUkernel* pKernel, CUlibrary library, const char* name )
返回内核句柄。
CUresult cuLibraryGetKernelCount ( unsigned int* count, CUlibrary lib )
返回库中内核的数量。
CUresult cuLibraryGetManaged ( CUdeviceptr* dptr, size_t* bytes, CUlibrary library, const char* name )
返回指向托管内存的指针。
CUresult cuLibraryGetModule ( CUmodule* pMod, CUlibrary library )
返回模块句柄。
CUresult cuLibraryGetUnifiedFunction ( void** fptr, CUlibrary library, const char* symbol )
返回指向统一函数的指针。
CUresult cuLibraryLoadData ( CUlibrary* library, const void* code, CUjit_option* jitOptions, void** jitOptionsValues, unsigned int  numJitOptions, CUlibraryOption* libraryOptions, void** libraryOptionValues, unsigned int  numLibraryOptions )
加载具有指定代码和选项的库。
CUresult cuLibraryLoadFromFile ( CUlibrary* library, const char* fileName, CUjit_option* jitOptions, void** jitOptionsValues, unsigned int  numJitOptions, CUlibraryOption* libraryOptions, void** libraryOptionValues, unsigned int  numLibraryOptions )
加载具有指定文件和选项的库。
CUresult cuLibraryUnload ( CUlibrary library )
卸载库。

函数

CUresult cuKernelGetAttribute ( int* pi, CUfunction_attribute attrib, CUkernel kernel, CUdevice dev )
返回有关内核的信息。
参数
pi
- 返回的属性值
attrib
- 请求的属性
kernel
- 要查询属性的内核
dev
- 要查询属性的设备
描述

*pi中返回属性的整数值attrib对于内核kernel对于请求的设备dev。支持的属性有

注意

如果另一个线程尝试使用 cuKernelSetAttribute() 同时在同一设备上设置相同的属性,则属性查询将给出旧值或新值,具体取决于操作系统调度程序和内存一致性选择的交错。

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuKernelSetAttribute, cuLibraryGetKernel, cuLaunchKernel, cuKernelGetFunction, cuLibraryGetModule, cuModuleGetFunction, cuFuncGetAttribute

CUresult cuKernelGetFunction ( CUfunction* pFunc, CUkernel kernel )
返回函数句柄。
参数
pFunc
- 返回的函数句柄
kernel
- 用于检索请求上下文中函数的内核
描述

pFunc请求的内核和当前上下文的函数句柄。如果未找到函数句柄,则调用返回 CUDA_ERROR_NOT_FOUNDkerneland the current context. If function handle is not found, the call returns CUDA_ERROR_NOT_FOUND.

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuLibraryGetKernel, cuLibraryGetModule, cuModuleGetFunction

CUresult cuKernelGetLibrary ( CUlibrary* pLib, CUkernel kernel )
返回库句柄。
参数
pLib
- 返回的库句柄
kernel
- 用于检索库句柄的内核
描述

pLib请求的内核的库句柄kernel

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuLibraryGetKernel

CUresult cuKernelGetName ( const char** name, CUkernel hfunc )
返回 CUkernel 句柄的函数名称。
参数
name
- 返回的函数名称
hfunc
- 要检索名称的函数句柄
描述

**name与内核句柄关联的函数名称hfunc。函数名称以空终止字符串返回。仅当内核句柄有效时,返回的名称才有效。如果库被卸载或重新加载,则必须再次调用 API 才能获取更新的名称。如果函数未声明为具有 C 链接,则此 API 可能会返回损坏的名称。如果**namehfunc为 NULL,则返回 CUDA_ERROR_INVALID_VALUE

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

CUresult cuKernelGetParamInfo ( CUkernel kernel, size_t paramIndex, size_t* paramOffset, size_t* paramSize )
返回设备端参数布局中内核参数的偏移量和大小。
参数
kernel
- 要查询的内核
paramIndex
- 要查询的参数索引
paramOffset
- 返回参数所在的设备端参数布局中的偏移量
paramSize
- 可选地返回设备端参数布局中参数的大小
描述

查询paramIndexkernel参数列表中的参数,并在paramOffsetparamSize中分别返回参数在设备端参数布局中的偏移量和大小。此信息可用于通过 cudaGraphKernelNodeSetParam()cudaGraphKernelNodeUpdatesApply() 从设备更新内核节点参数。paramIndex必须小于kernelkernelparamSize接受的参数数量。

注意

请注意,此函数也可能返回来自先前异步启动的错误代码。

另请参阅

cuFuncGetParamInfo

设置为 NULL。

CUresult cuKernelSetAttribute ( CUfunction_attribute attrib, int  val, CUkernel kernel, CUdevice dev )
设置关于内核的信息。
参数
attrib
- 请求的属性
val
- 要设置的值
kernel
- 要设置属性的内核
dev
- 要设置属性的设备
描述

此调用设置指定属性的值attrib在内核上kernel对于请求的设备dev为指定的整数值val。如果成功设置了属性的新值,此函数返回 CUDA_SUCCESS。如果设置失败,此调用将返回错误。并非所有属性都可以设置值。尝试设置只读属性的值将导致错误 (CUDA_ERROR_INVALID_VALUE)。

请注意,使用 cuFuncSetAttribute() 设置的属性将覆盖此 API 设置的属性,无论对 cuFuncSetAttribute() 的调用是在此 API 调用之前还是之后进行的。cuKernelGetAttribute() 始终返回由此 API 设置的属性值。

支持的属性有

注意

与传统的 cuFuncSetAttribute() 相比,此 API 由于设备范围的语义,具有更严格的锁定要求。如果多个线程尝试同时在同一设备上设置相同的属性,则属性设置将取决于操作系统调度程序和内存一致性选择的交错。

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuKernelGetAttribute, cuLibraryGetKernel, cuLaunchKernel, cuKernelGetFunction, cuLibraryGetModule, cuModuleGetFunction, cuFuncSetAttribute

CUresult cuKernelSetCacheConfig ( CUkernel kernel, CUfunc_cache config, CUdevice dev )
为设备内核设置首选缓存配置。
参数
kernel
- 要为其配置缓存的内核
config
- 请求的缓存配置
dev
- 要设置属性的设备
描述

在 L1 缓存和共享内存使用相同硬件资源的设备上,这将通过以下方式设置config设备内核的首选缓存配置kernel在请求的设备上dev。这只是一个首选项。驱动程序将在可能的情况下使用请求的配置,但如果需要执行kernel,则可以自由选择不同的配置。通过 cuCtxSetCacheConfig() 设置的任何上下文范围的首选项将被此每个内核的设置覆盖。

请注意,使用 cuFuncSetCacheConfig() 设置的属性将覆盖此 API 设置的属性,无论对 cuFuncSetCacheConfig() 的调用是在此 API 调用之前还是之后进行的。

在 L1 缓存和共享内存大小固定的设备上,此设置不起作用。

使用与最近首选项设置不同的首选项启动内核可能会插入设备端同步点。

支持的缓存配置有

注意

与传统的 cuFuncSetCacheConfig() 相比,此 API 由于设备范围的语义,具有更严格的锁定要求。如果多个线程尝试同时在同一设备上设置配置,则缓存配置设置将取决于操作系统调度程序和内存一致性选择的交错。

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuLibraryGetKernel, cuKernelGetFunction, cuLibraryGetModule, cuModuleGetFunction, cuFuncSetCacheConfig, cuCtxSetCacheConfig, cuLaunchKernel

CUresult cuLibraryEnumerateKernels ( CUkernel* kernels, unsigned int  numKernels, CUlibrary lib )
检索库中的内核句柄。
参数
kernels
- 返回内核句柄的缓冲区
numKernels
- 可以返回到缓冲区的最大内核句柄数
lib
- 要从中查询的库
描述

kernels最大数量的numKernels内核句柄在lib。当库被卸载时,返回的内核句柄将变为无效。

另请参阅

cuLibraryGetKernelCount

CUresult cuLibraryGetGlobal ( CUdeviceptr* dptr, size_t* bytes, CUlibrary library, const char* name )
返回全局设备指针。
参数
dptr
- 为请求的上下文返回的全局设备指针
bytes
- 返回的全局大小(以字节为单位)
library
- 要从中检索全局变量的库
name
- 要检索的全局变量的名称
描述

*dptr*bytes具有名称的全局变量的基指针和大小name对于请求的库library和当前上下文。如果不存在请求名称的全局变量name,则调用返回 CUDA_ERROR_NOT_FOUND。参数之一dptrbytes(不是两个)可以为 NULL,在这种情况下将被忽略。

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuLibraryGetModule, cuModuleGetGlobal

CUresult cuLibraryGetKernel ( CUkernel* pKernel, CUlibrary library, const char* name )
返回内核句柄。
参数
pKernel
- 返回的内核句柄
library
- 要从中检索内核的库
name
- 要检索的内核的名称
描述

pKernel具有名称的内核的句柄name位于库中library。如果未找到内核句柄,则调用返回 CUDA_ERROR_NOT_FOUND

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuKernelGetFunction, cuLibraryGetModule, cuModuleGetFunction

CUresult cuLibraryGetKernelCount ( unsigned int* count, CUlibrary lib )
返回库中内核的数量。
参数
count
- 在库中找到的内核数量
lib
- 要查询的库
描述

count内核的数量在lib.

CUresult cuLibraryGetManaged ( CUdeviceptr* dptr, size_t* bytes, CUlibrary library, const char* name )
返回指向托管内存的指针。
参数
dptr
- 返回的指向托管内存的指针
bytes
- 返回的内存大小(以字节为单位)
library
- 要从中检索托管内存的库
name
- 要检索的托管内存的名称
描述

*dptr*bytes具有名称的托管内存的基指针和大小name对于请求的库library。如果没有具有请求名称的托管内存name,则调用返回 CUDA_ERROR_NOT_FOUND。参数之一dptrbytes(不是两个)可以为 NULL,在这种情况下将被忽略。请注意,库的托管内存library在设备之间共享,并且在库加载到至少一个上下文中时注册。

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload

CUresult cuLibraryGetModule ( CUmodule* pMod, CUlibrary library )
返回模块句柄。
参数
pMod
- 返回的模块句柄
library
- 要从中检索模块的库
描述

pMod与当前上下文关联的模块句柄,位于库中library。如果未找到模块句柄,则调用返回 CUDA_ERROR_NOT_FOUND

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload, cuModuleGetFunction

CUresult cuLibraryGetUnifiedFunction ( void** fptr, CUlibrary library, const char* symbol )
返回指向统一函数的指针。
参数
fptr
- 返回的指向统一函数的指针
library
- 要从中检索函数指针内存的库
symbol
- 要检索的函数指针的名称
描述

*fptr指向由以下项表示的统一函数的函数指针symbol。如果没有具有名称的统一函数symbol,则调用返回 CUDA_ERROR_NOT_FOUND。如果系统中没有具有属性 CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS 的设备,则调用可能返回 CUDA_ERROR_NOT_FOUND

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuLibraryUnload

CUresult cuLibraryLoadData ( CUlibrary* library, const void* code, CUjit_option* jitOptions, void** jitOptionsValues, unsigned int  numJitOptions, CUlibraryOption* libraryOptions, void** libraryOptionValues, unsigned int  numLibraryOptions )
使用指定的代码和选项加载库。
参数
library
- 返回的库
code
- 要加载的代码
jitOptions
- JIT 的选项
jitOptionsValues
- JIT 的选项值
numJitOptions
- 选项的数量
libraryOptions
- 加载的选项
libraryOptionValues
- 加载的选项值
numLibraryOptions
- 加载的选项数量
描述

接受一个指针code并加载相应的库library基于应用程序定义的库加载模式。

  • 如果模块加载通过“模块加载”中描述的环境变量设置为 EAGER,library则在调用时急切地加载到所有上下文中,并在创建时加载到未来的上下文中,直到使用 cuLibraryUnload() 卸载库为止。

  • 如果环境变量设置为 LAZY,library则不会立即加载到所有现有上下文中,并且仅在需要该上下文的函数时(例如内核启动)才加载。

这些环境变量在 CUDA 编程指南的“CUDA 环境变量”部分中描述。

code可以是 nvcc 输出的 cubin 或 fatbin,也可以是 nvcc 输出或手写的以 NULL 结尾的 PTX。在进行单独编译时,fatbin 也应包含可重定位的代码。

选项通过数组传递jitOptions,并且任何相应的参数都在其中传递jitOptionsValues。JIT 选项的总数通过以下方式提供numJitOptions。任何输出都将通过以下方式返回jitOptionsValues.

库加载选项通过数组传递libraryOptions,并且任何相应的参数都在其中传递libraryOptionValues。库加载选项的总数通过以下方式提供numLibraryOptions.

注意

如果库包含托管变量,并且系统中没有设备支持托管变量,则此调用预计返回 CUDA_ERROR_NOT_SUPPORTED

另请参阅

cuLibraryLoadFromFile, cuLibraryUnload, cuModuleLoad, cuModuleLoadData, cuModuleLoadDataEx

CUresult cuLibraryLoadFromFile ( CUlibrary* library, const char* fileName, CUjit_option* jitOptions, void** jitOptionsValues, unsigned int  numJitOptions, CUlibraryOption* libraryOptions, void** libraryOptionValues, unsigned int  numLibraryOptions )
使用指定的文件和选项加载库。
参数
library
- 返回的库
fileName
- 要从中加载的文件
jitOptions
- JIT 的选项
jitOptionsValues
- JIT 的选项值
numJitOptions
- 选项的数量
libraryOptions
- 加载的选项
libraryOptionValues
- 加载的选项值
numLibraryOptions
- 加载的选项数量
描述

接受一个指针code并加载相应的库library基于应用程序定义的库加载模式。

  • 如果模块加载通过“模块加载”中描述的环境变量设置为 EAGER,library则在调用时急切地加载到所有上下文中,并在创建时加载到未来的上下文中,直到使用 cuLibraryUnload() 卸载库为止。

  • 如果环境变量设置为 LAZY,library则不会立即加载到所有现有上下文中,并且仅在需要该上下文的函数时(例如内核启动)才加载。

这些环境变量在 CUDA 编程指南的“CUDA 环境变量”部分中描述。

该文件应该是 nvcc 输出的 cubin 文件,或者 nvcc 输出或手写的 PTX 文件,或者 nvcc 输出的 fatbin 文件。在进行单独编译时,fatbin 也应包含可重定位的代码。

选项通过数组传递jitOptions,并且任何相应的参数都在其中传递jitOptionsValues。选项总数通过以下方式提供numJitOptions。任何输出都将通过以下方式返回jitOptionsValues.

库加载选项通过数组传递libraryOptions,并且任何相应的参数都在其中传递libraryOptionValues。库加载选项的总数通过以下方式提供numLibraryOptions.

注意

如果库包含托管变量,并且系统中没有设备支持托管变量,则此调用预计返回 CUDA_ERROR_NOT_SUPPORTED

另请参阅

cuLibraryLoadData, cuLibraryUnload, cuModuleLoad, cuModuleLoadData, cuModuleLoadDataEx

CUresult cuLibraryUnload ( CUlibrary library )
卸载库。
参数
library
- 要卸载的库
描述

卸载使用以下项指定的库library

另请参阅

cuLibraryLoadData, cuLibraryLoadFromFile, cuModuleUnload