6.33. 驱动程序入口点访问
本节介绍低级 CUDA 驱动程序应用程序编程接口的驱动程序入口点访问函数。
函数
- CUresult cuGetProcAddress ( const char* symbol, void** pfn, int cudaVersion, cuuint64_t flags, CUdriverProcAddressQueryResult* symbolStatus )
- 返回请求的驱动程序 API 函数指针。
函数
- CUresult cuGetProcAddress ( const char* symbol, void** pfn, int cudaVersion, cuuint64_t flags, CUdriverProcAddressQueryResult* symbolStatus )
-
返回请求的驱动程序 API 函数指针。
参数
- symbol
- - 要查找的驱动程序 API 函数的基本名称。例如,对于驱动程序 API cuMemAlloc_v2,symbol将是 cuMemAlloc 和cudaVersion将是 _v2 变体的 ABI 兼容 CUDA 版本。
- pfn
- - 返回指向请求的驱动程序函数的函数指针的位置
- cudaVersion
- - 要查找的请求的驱动程序符号的 CUDA 版本
- flags
- - 用于指定搜索选项的标志。
- symbolStatus
- - 用于存储搜索状态的可选位置,symbol基于cudaVersion. 有关可能的值,请参阅 CUdriverProcAddressQueryResult。
描述
在**pfn返回请求的 CUDA 版本和标志的 CUDA 驱动程序函数的地址。
CUDA 版本指定为 (1000 * major + 10 * minor),因此 CUDA 11.2 应指定为 11020。对于请求的驱动程序符号,如果指定的 CUDA 版本大于或等于引入驱动程序符号的 CUDA 版本,则此 API 将返回指向相应版本化函数的函数指针。
API 返回的指针应强制转换为与 API 头文件中请求的驱动程序函数定义匹配的函数指针。函数指针 typedef 可以从相应的 typedefs 头文件中获取。例如,cudaTypedefs.h 包含 cuda.h 中定义的驱动程序 API 的函数指针 typedef。
如果请求的驱动程序函数在平台上不受支持,或者没有与指定的pfnAPI 将返回 CUDA_SUCCESS,并将返回的 设置为 NULL,cudaVersion或如果驱动程序符号无效。
它还将可选的symbolStatus设置为 CUdriverProcAddressQueryResult 中的值之一,含义如下
-
CU_GET_PROC_ADDRESS_SUCCESS - 基于输入参数成功找到请求的符号,并且pfn有效
-
CU_GET_PROC_ADDRESS_SYMBOL_NOT_FOUND - 未找到请求的符号
-
CU_GET_PROC_ADDRESS_VERSION_NOT_SUFFICIENT - 找到请求的符号,但 cudaVersion 指定的版本不支持
请求的标志可以是
-
CU_GET_PROC_ADDRESS_DEFAULT: 这是默认模式。如果代码使用 --default-stream per-thread 编译标志或定义了宏 CUDA_API_PER_THREAD_DEFAULT_STREAM 进行编译,则这等效于 CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM;否则为 CU_GET_PROC_ADDRESS_LEGACY_STREAM。
-
CU_GET_PROC_ADDRESS_LEGACY_STREAM: 这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,但不包括相应的 per-thread 版本。
-
CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM: 这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,包括 per-thread 版本。如果未找到 per-thread 版本,则 API 将返回驱动程序函数的旧版本。
注意强烈建议不要在 CUDA 定义的类型和驱动程序 API 版本之间进行版本混合,这样做可能会导致未定义的行为。 更多信息请点击此处。
另请参阅