我的 GPU 能力为 2.1,有 2 个 SM,每个 SM 有 48 个内核。根据 CUDA-C 编程指南中提供的技术规范,网格的最大块数为 65535,每个多处理器的最大驻留块数为 8。
我对可以启动多少块感到困惑。如果每个 SM 的最大块数为 8,这是否意味着如果只有 2 个 SM,我最多可以启动 16 个块?但是我成功地启动了更多的块。
也许有诸如活动块和非活动块之类的东西?如果这是事实,那么这些块是如何安排的?不活动的是否等到所有 8 个活动块都完成?但这带来了同步问题......
还有一些问题……如果每个 SM 上有 48 个核心,那么可以同时执行 3 个半扭曲。但是共享内存只有 32 个 bank。如果两个线程同时尝试从同一个band中读取,即使它们属于不同的half-warp,它们是否会产生bankconflict?