- 我有一个非常大的
N0
元素数组。 - 每个线程将循环并操作
m
元素。 - 我
TBP
每个块都有固定的线程。 - CUDA 限制每个网格的块
BPG < 65535 =: BPG_max
N0 = 90
现在,让我们缩小并考虑一个元素数组TBP = 32
。
- 我可以开火,
3 blocks of 32 threads each looping once (m = 1)
这意味着3 x 32 x 1 = 96
元素可能已经被操作——即浪费了 6。 - 或者我可以开火,
2 blocks of 32 with m = 2
这意味着2 x 32 x 2 = 128
可以对元素进行操作,这是对 38 的浪费。
对于大型数组 (100MB+) 和大量循环 (10,000+),因素会变得更大,因此浪费会变得非常大,那么如何最大限度地减少浪费?也就是说,我想要一个优化的程序(其中N
表示实际完成的工作):