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 中的值之一,含义如下
-
cudaDriverEntryPointSuccess - 基于输入参数成功找到请求的符号,并且pfn有效
-
cudaDriverEntryPointSymbolNotFound - 未找到请求的符号
-
cudaDriverEntryPointVersionNotSufficent - 找到请求的符号,但当前运行时版本 (CUDART_VERSION) 不支持
请求的标志可以是
-
cudaEnableDefault:这是默认模式。如果代码使用 --default-stream 每线程编译标志编译,或者定义了宏 CUDA_API_PER_THREAD_DEFAULT_STREAM,则这等效于 cudaEnablePerThreadDefaultStream;否则为 cudaEnableLegacyStream。
-
cudaEnableLegacyStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,但不包括相应的每线程版本。
-
cudaEnablePerThreadDefaultStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,包括每线程版本。如果找不到每线程版本,则 API 将返回驱动程序函数的旧版本。
注意-
强烈建议不要混合使用 CUDA 定义的类型和驱动程序 API 版本,这样做可能会导致未定义的行为。更多信息请点击此处。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError, cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况下,可能会(但不保证)返回 cudaErrorNotPermitted 作为诊断信息。
另请参阅
- __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 中的值之一,含义如下
-
cudaDriverEntryPointSuccess - 基于输入参数成功找到请求的符号,并且pfn有效
-
cudaDriverEntryPointSymbolNotFound - 未找到请求的符号
-
cudaDriverEntryPointVersionNotSufficent - 找到请求的符号,但指定的版本不支持cudaVersion
请求的标志可以是
-
cudaEnableDefault:这是默认模式。如果代码使用 --default-stream 每线程编译标志编译,或者定义了宏 CUDA_API_PER_THREAD_DEFAULT_STREAM,则这等效于 cudaEnablePerThreadDefaultStream;否则为 cudaEnableLegacyStream。
-
cudaEnableLegacyStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,但不包括相应的每线程版本。
-
cudaEnablePerThreadDefaultStream:这将启用搜索所有与请求的驱动程序符号名称匹配的驱动程序符号,包括每线程版本。如果找不到每线程版本,则 API 将返回驱动程序函数的旧版本。
注意-
强烈建议不要混合使用 CUDA 定义的类型和驱动程序 API 版本,这样做可能会导致未定义的行为。更多信息请点击此处。
-
请注意,如果此调用尝试初始化内部 CUDA RT 状态,则此函数也可能返回 cudaErrorInitializationError, cudaErrorInsufficientDriver 或 cudaErrorNoDevice。
-
请注意,根据 cudaStreamAddCallback 的规定,不得从回调中调用任何 CUDA 函数。在这种情况下,可能会(但不保证)返回 cudaErrorNotPermitted 作为诊断信息。
另请参阅