6.10. 占用率

本节介绍 CUDA 运行时应用程序编程接口的占用率计算函数。

除了占用率计算器函数(cudaOccupancyMaxActiveBlocksPerMultiprocessorcudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags)之外,还有 C++ 独有的基于占用率的启动配置函数,这些函数在 C++ API 例程 模块中进行了文档化。

请参阅 cudaOccupancyMaxPotentialBlockSize ( C++ API), cudaOccupancyMaxPotentialBlockSize ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMem ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMem ( C++ API) cudaOccupancyAvailableDynamicSMemPerBlock (C++ API),

函数

__host__cudaError_t cudaOccupancyAvailableDynamicSMemPerBlock ( size_t* dynamicSmemSize, const void* func, int  numBlocks, int  blockSize )
返回在 SM 上启动 numBlocks 个块时每个块可用的动态共享内存。
__host____device__cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessor ( int* numBlocks, const void* func, int  blockSize, size_t dynamicSMemSize )
返回设备函数的占用率。
__host__cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags ( int* numBlocks, const void* func, int  blockSize, size_t dynamicSMemSize, unsigned int  flags )
返回带有指定标志的设备函数的占用率。
__host__cudaError_t cudaOccupancyMaxActiveClusters ( int* numClusters, const void* func, const cudaLaunchConfig_t* launchConfig )
给定内核函数 (func) 和启动配置 (config),返回目标设备上可以共存的最大簇数量,结果存于 *numClusters 中。
__host__cudaError_t cudaOccupancyMaxPotentialClusterSize ( int* clusterSize, const void* func, const cudaLaunchConfig_t* launchConfig )
给定内核函数 (func) 和启动配置 (config),返回最大簇大小,结果存于 *clusterSize 中。

函数

__host__cudaError_t cudaOccupancyAvailableDynamicSMemPerBlock ( size_t* dynamicSmemSize, const void* func, int  numBlocks, int  blockSize )
返回在启动时每个块可用的动态共享内存numBlocksSM 上的块。
参数
dynamicSmemSize
- 返回的最大动态共享内存
func
- 用于计算占用率的内核函数
numBlocks
- 适合 SM 的块数
blockSize
- 块的大小
描述

*dynamicSmemSize中返回允许的最大动态共享内存大小numBlocks每个 SM 的块。

注意

另请参阅

cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags, cudaOccupancyMaxPotentialBlockSize ( C++ API), cudaOccupancyMaxPotentialBlockSizeWithFlags ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMem ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags ( C++ API), cudaOccupancyAvailableDynamicSMemPerBlock

__host____device__cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessor ( int* numBlocks, const void* func, int  blockSize, size_t dynamicSMemSize )
返回设备函数的占用率。
参数
numBlocks
- 返回的占用率
func
- 用于计算占用率的内核函数
blockSize
- 内核计划启动的块大小
dynamicSMemSize
- 计划使用的每个块的动态共享内存大小,以字节为单位
描述

*numBlocks设备函数的每个流式多处理器 (SM) 的最大活动块数。

注意

另请参阅

cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags, cudaOccupancyMaxPotentialBlockSize ( C++ API), cudaOccupancyMaxPotentialBlockSizeWithFlags ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMem ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags ( C++ API), cudaOccupancyAvailableDynamicSMemPerBlock (C++ API), cuOccupancyMaxActiveBlocksPerMultiprocessor

__host__cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags ( int* numBlocks, const void* func, int  blockSize, size_t dynamicSMemSize, unsigned int  flags )
返回带有指定标志的设备函数的占用率。
参数
numBlocks
- 返回的占用率
func
- 用于计算占用率的内核函数
blockSize
- 内核计划启动的块大小
dynamicSMemSize
- 计划使用的每个块的动态共享内存大小,以字节为单位
flags
- 占用率计算器的请求行为
描述

*numBlocks设备函数的每个流式多处理器 (SM) 的最大活动块数。

flags参数控制特殊情况的处理方式。有效标志包括

  • cudaOccupancyDisableCachingOverride:此标志禁止在全局缓存影响占用率的平台上的默认行为。在这些平台上,如果启用了缓存,但每个块的 SM 资源使用会导致零占用率,则占用率计算器将计算占用率,就好像禁用了缓存一样。设置此标志使占用率计算器在这种情况下返回 0。有关此功能的更多信息,请参阅 Maxwell 调优指南的“统一 L1/纹理缓存”部分。

注意

另请参阅

cudaOccupancyMaxActiveBlocksPerMultiprocessor, cudaOccupancyMaxPotentialBlockSize ( C++ API), cudaOccupancyMaxPotentialBlockSizeWithFlags ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMem ( C++ API), cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags ( C++ API), cudaOccupancyAvailableDynamicSMemPerBlock (C++ API), cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags

__host__cudaError_t cudaOccupancyMaxActiveClusters ( int* numClusters, const void* func, const cudaLaunchConfig_t* launchConfig )
给定内核函数(funcfunc)和启动配置(config),返回目标设备上可以共存的最大簇数量,结果存于.
参数
*numClusters
参数
func
numClusters
- 返回的目标设备上可以共存的最大簇数量
返回值

func

描述

- 用于计算最大簇数量的内核函数

launchConfig

注意

另请参阅

- 启动配置

返回值
给定内核函数(funcfunc)和启动配置(cudaSuccess, cudaErrorInvalidDeviceFunction, cudaErrorInvalidValue, cudaErrorInvalidClusterSize, cudaErrorUnknown,如果函数已设置所需的簇大小(请参阅 cudaFuncGetAttributes),则 config 中的簇大小必须未指定或与所需大小匹配。如果没有所需大小,则必须在 config 中指定簇大小,否则函数将返回错误。.
参数
请注意,内核函数的各种属性可能会影响占用率计算。运行时环境可能会影响硬件调度簇的方式,因此无法保证计算出的占用率可以实现。
另请参阅 cudaFuncGetAttributes cudaOccupancyMaxActiveClusters (C++ API), cuOccupancyMaxActiveClusters
func
__host__cudaError_t cudaOccupancyMaxPotentialClusterSize ( int* clusterSize, const void* func, const cudaLaunchConfig_t* launchConfig )
- 返回的目标设备上可以共存的最大簇数量
返回值

给定内核函数(

描述

func)和启动配置(),返回最大簇大小,结果存于如果函数已设置所需的簇大小(请参阅 cudaFuncGetAttributes),则 config 中的簇大小必须未指定或与所需大小匹配。如果没有所需大小,则必须在 config 中指定簇大小,否则函数将返回错误。*clusterSize

参数

clusterSize

注意

另请参阅

- 返回的给定内核函数和启动配置可以启动的最大簇大小