关于GPU理解的几点争论

1.N卡的峰值可以用SP频率(新的3.x上,这个频率就是GPU频率) * SP个数 * 2;
公式这里乘以2,ice版主是这样对我解释的:

该公式实质上是3部分相乘得到的,分别为计算单元频率,计算单元数量和指令吞吐量。

前两者很好理解,不再赘述;指令吞吐量这里是按照FMA算的,也就是每个SP,每周期可以有一条FMA指令的吞吐量,并且同时FMA因为同时计算了乘加,所以是两条浮点计算指令。这样得到了GPU的理论单精度浮点峰值。

以及需要说明的是,并不是所有的单精度浮点计算都有这个峰值吞吐量,只有全部为FMA的情况,并且没有其他访存等方面的限制的情况下,并且在不考虑调度效率的情况下,才是这个峰值吞吐量。如果是其他吞吐量低的计算指令,自然达不到这个理论峰值。

还有一种观点是这样的:熟悉ARM的知道在做计算时,乘法和乘加运算是在mac上做的,加法减法和移位是在ALU上做的,当指令发射器发射一条乘法指令和加法指令时就可以发射到不同的硬件单元通过流水线并行执行两条指令,所以乘以2.所以GPU的计算乘以2是不是指流水线并行?

对于这两条观点有一条分歧点就是峰值运算能力是指每周期执行的操作数(ice给出 乘以2是指每周期最多执行操作数,因为FMA一条指令相当于两次操作),还是指每周期执行的指令(即发射到不同单元流水线并行执行两条指令)

2.我的GPU是3.0,每个多处理器有192个cuda cores,总共有两个多处理器,在deviceQuery里显示

Maximum number of threads per multiprocessors:2048,以前问版主这个指标的具体含义,当时玫瑰版主告诉我:

每个多处理器同时能运行的最大线程数量,可是192个cuda cores 同一时间只能运行192条不同线程的指令?这里是不是指激活的线程个数?这里的2048是怎么计算得到?请版主解惑,不胜感激