而前者, TLP, 需要海量的线程并行. SM上面能同时上去同时执行的线程数量实际上有限(受到SM上的多种资源限制, 主要是shared memory和寄存器使用量; 以及, 硬件本身的特性限制)。...(线程较多)能提高并行度, 从而可能提升性能;但寄存器的使用较少, 影响了一些数据的缓存或者使用(例如, 原本被缓冲在寄存器中的值, 现在需要被从local memory中重新读取),或者原本一些能直接用的值...请想想, 一个数据要么是强制保存在寄存器中或者local memory(或者你手工保存到shared memory), 然后以后重用; 要么则是能重新创造出来(例如重新读取, 或者重新计算出来),这两者哪个好...不能超过, 也不能小于(必须等于).来自OpenCL的用户需要特别注意这点.主要是这影响了一些优化....例如如果线程数量固定, 类似a = blockDim.x * blockIdx.x + threadIdx.x;中的这里的blockDim.x实际上是一个常数了.而不固定则不能使用这个优化.所以实际上说