为共享变量并行工作的最大块数和线程数

考虑到要在K2000 GPU卡(计算能力3.0)上执行的GPU内核功能如下所示:

#define TILE_DIM 64
__global__ void PerformSomeOperations(float* g_A, float* g_B)
{
    __shared__ float BlockData[TILE_DIM][TILE_DIM];
    // Some Operation to be performed
}

我如何确定可以在单个多处理器上并行执行的块和线程的最大数量? 另外,如果我有N个块,这是否意味着每个块的共享内存将除以N?


您可以从示例运行设备查询示例以确定最大块数。 这里每块你可以有最多1024个线程。

在SM(流式多处理器)上执行多少个块? 每个SM在开普勒可以有多达 16个有源模块,费米有8个有源模块。

你也需要考虑经纱。 一个warp = 32个线程。 在费米,活跃的经纱数量是48个,而开普勒的每个SM有64个。 这些都是理想的数字。 在SM上执行的实际warps数量将取决于您在内核中使用的Launch配置和资源数量。

通常你会计算占用率=活动弯曲/最大活动弯曲数量。

如果你有N个块,那么总共享内存除以N.如果你想拥有大量块,那么你可能需要检查占用率计算器电子表格,以检查你可以使用多少共享内存而不影响性能。

但,

__shared__ float BlockData[TILE_DIM][TILE_DIM];

是按块分配的,因此每块中都有整块可用。

链接地址: http://www.djcxy.com/p/80111.html

上一篇: Maximum number of blocks and threads working in parallel for a shared variable

下一篇: Synchronizing two CUDA streams