CUDA中确定你显卡的thread和block数
在进行并行计算时, 你的显卡所支持创建的thread数与block数是有限制的, 因此, 需要自己提前确定够用, 再进行计算, 否则, 你需要改进你的算法, 或者, 更新你的硬件了.
硬件方面总结
- 首先你需要知道你的显卡的Compute Capability , 在目前市面上绝大多数的都是支持1024 threads , 只有一些非常早期(Compute 1.x)的只是支持 512 threads. 如果是非常早期的一些显卡的话可以参阅这个WebPage
- 在你确定完你的Compute Capability 后, 根据此, 你的显卡的Compute Capability 如果是 1.x的话, Grid 支持的只有 1D 和 2D , 2.x 及以上才支持 3D 的 Grid , 而 block 则在1.x和2.x及更新的版本都支持3D , 在1.x / 2.x+的情况下, 每个block的最大支持分别是[512,512,64] / [1024,1024,64] ,现代显卡的Grid的size已经可以支持到[2^31-1,65535,65535]
- 每个block中的寄存器, 在Compute Capability为1.0,1.1/1.2,1.3/2.x-/3.0/3.2/3.5-5.2/5.3/6-6.1/6.2/7.0的情况下, 对应的寄存器总量不超过8k/16k/32k/64k/32k/6