6.31. 驱动程序入口点访问

本节介绍 CUDA 运行时应用程序编程接口的驱动程序入口点访问函数。

函数

__host__cudaError_t cudaGetDriverEntryPoint ( const char* symbol, void** funcPtr, unsigned long long flags, cudaDriverEntryPointQueryResult ** driverStatus = NULL )
返回请求的驱动程序 API 函数指针。
__host__cudaError_t cudaGetDriverEntryPointByVersion ( const char* symbol, void** funcPtr, unsigned int  cudaVersion, unsigned long long flags, cudaDriverEntryPointQueryResult ** driverStatus = NULL )
按 CUDA 版本返回请求的驱动程序 API 函数指针。

函数

__host__cudaError_t cudaGetDriverEntryPoint ( const char* symbol, void** funcPtr, unsigned long long flags, cudaDriverEntryPointQueryResult ** driverStatus = NULL )
返回请求的驱动程序 API 函数指针。
参数
symbol
- 要查找的驱动程序 API 函数的基本名称。例如,对于驱动程序 API cuMemAlloc_v2,symbol将为 cuMemAlloc。请注意,API 将使用 CUDA 运行时版本来返回到最新的 ABI 兼容驱动程序符号的地址,cuMemAlloc 或 cuMemAlloc_v2。
funcPtr
- 返回请求的驱动程序函数的函数指针的位置
flags
- 指定搜索选项的标志。
driverStatus
- 可选位置,用于存储从驱动程序查找符号的状态。有关可能的值,请参阅 cudaDriverEntryPointQueryResult
描述

在 **funcPtr**funcPtr中返回请求的标志的 CUDA 驱动程序函数的地址。

对于请求的驱动程序符号,如果引入驱动程序符号的 CUDA 版本小于或等于 CUDA 运行时版本,则 API 将返回指向相应版本化驱动程序函数的函数指针。

API 返回的指针应强制转换为与 API 头文件中请求的驱动程序函数定义匹配的函数指针。函数指针 typedef 可以从相应的 typedefs 头文件中获取。例如,cudaTypedefs.h 包含 cuda.h 中定义的驱动程序 API 的函数指针 typedef。

如果请求的驱动程序函数有效且受平台支持,则 API 将返回 cudaSuccess 并设置返回的funcPtr如果请求的驱动程序函数有效且受平台支持。

如果请求的驱动程序函数有效且受平台支持,则 API 将返回 cudaSuccess 并设置返回的funcPtr如果平台不支持请求的驱动程序函数,则设置为 NULL,对于 CUDA 运行时版本,不存在 ABI 兼容的驱动程序函数,或者驱动程序符号无效。

它还将可选的driverStatus设置为 cudaDriverEntryPointQueryResult 中的值之一,含义如下

请求的标志可以是

  • cudaEnableDefault:这是默认模式。如果代码使用 --default-stream 每线程编译标志编译,或者定义了宏 CUDA_API_PER_THREAD_DEFAULT_STREAM,则这等效于 cudaEnablePerThreadDefaultStream;否则为 cudaEnableLegacyStream

  • cudaEnableLegacyStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,但不包括相应的每线程版本。

  • cudaEnablePerThreadDefaultStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,包括每线程版本。如果找不到每线程版本,则 API 将返回驱动程序函数的旧版本。

注意

另请参阅

cuGetProcAddress

__host__cudaError_t cudaGetDriverEntryPointByVersion ( const char* symbol, void** funcPtr, unsigned int  cudaVersion, unsigned long long flags, cudaDriverEntryPointQueryResult ** driverStatus = NULL )
按 CUDA 版本返回请求的驱动程序 API 函数指针。
参数
symbol
- 要查找的驱动程序 API 函数的基本名称。例如,对于驱动程序 API cuMemAlloc_v2,symbol将为 cuMemAlloc。
funcPtr
- 返回请求的驱动程序函数的函数指针的位置
cudaVersion
- 要查找请求的驱动程序符号的 CUDA 版本
flags
- 指定搜索选项的标志。
driverStatus
- 可选位置,用于存储从驱动程序查找符号的状态。有关可能的值,请参阅 cudaDriverEntryPointQueryResult
描述

在 **funcPtr**funcPtrCUDA 驱动程序函数的地址,用于请求的标志和 CUDA 驱动程序版本。

CUDA 版本指定为(1000 * 主版本 + 10 * 次版本),因此 CUDA 11.2 应指定为 11020。对于请求的驱动程序符号,如果指定的 CUDA 版本大于或等于引入驱动程序符号的 CUDA 版本,则此 API 将返回指向相应版本化函数的函数指针。

API 返回的指针应强制转换为与 API 头文件中请求的驱动程序函数定义匹配的函数指针。函数指针 typedef 可以从相应的 typedefs 头文件中获取。例如,cudaTypedefs.h 包含 cuda.h 中定义的驱动程序 API 的函数指针 typedef。

对于请求的 CUDA 版本高于已安装的 CUDA 工具包的情况,相应的头文件中可能没有合适的函数指针 typedef,可能需要自定义 typedef 来匹配返回的驱动程序函数签名。这可以通过从更高版本的工具包中获取 typedef 或创建适当匹配的自定义函数 typedef 来完成。

如果请求的驱动程序函数有效且受平台支持,则 API 将返回 cudaSuccess 并设置返回的funcPtr如果请求的驱动程序函数有效且受平台支持。

如果请求的驱动程序函数有效且受平台支持,则 API 将返回 cudaSuccess 并设置返回的funcPtr如果平台不支持请求的驱动程序函数,则设置为 NULL,对于请求的版本,不存在 ABI 兼容的驱动程序函数,或者驱动程序符号无效。

它还将可选的driverStatus设置为 cudaDriverEntryPointQueryResult 中的值之一,含义如下

请求的标志可以是

  • cudaEnableDefault:这是默认模式。如果代码使用 --default-stream 每线程编译标志编译,或者定义了宏 CUDA_API_PER_THREAD_DEFAULT_STREAM,则这等效于 cudaEnablePerThreadDefaultStream;否则为 cudaEnableLegacyStream

  • cudaEnableLegacyStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,但不包括相应的每线程版本。

  • cudaEnablePerThreadDefaultStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,包括每线程版本。如果找不到每线程版本,则 API 将返回驱动程序函数的旧版本。

注意

另请参阅

cuGetProcAddress