计算能力为1.x的设备
每个SM具有8个SP(cuda核),每个SP每次单精度浮点运算或整形运算需要1个时钟周期,因此每个时钟周期SM可以执行8个单精度浮点运算或整数运算。每个时钟周期可以执行1个双精度浮点运算。
每个SM具有1个线程束调度器,一次可以把一条指令发送给8个SP,由于每个SP执行一次单精度浮点运算或整形运算需要1个时钟周期。因此要让一个线程束中的所有线程都执行一条单精度浮点运算或整数运算指令的话,每个SP需要将该指令执行4次。这样,线程束调度器就需要等4个时钟周期才能发布下一条指令。
计算能力为2.1的设备
每个SM具有48个SP,
每个SP每次单精度浮点运算或整形运算需要1个时钟周期,因此每个时钟周期SM可以执行48个单精度浮点运算或整数运算。每个时钟周期可以执行4个双精度浮点运算。
每个SM具有2个线程束调度器。在每个指令发布时间,每个线程束调度器发布两条独立的指令(如果存在线程束准备好执行下一条指令的话)。第一个调度器负责向偶数ID的线程束发布指令。第2个调度器负责向奇数ID的线程束发布指令。注意,当一个调度器发布一条双精度浮点指令时,另一个调度器无法发布任何指令。
由于一个线程束调度器只能向一半的CUDA核发布指令,为了让一个线程束的全部线程的都执行一条单精度浮点运算或整形运算指令,一个调度器必须2个时钟周期发布一条指令。
关于上面一段话的理解:一个线程束如果准备好执行下一条整形或单精度浮点运算指令,这个线程束需要32个SP进行运算。由哪一个线程调度器向这个线程束发布指令取决于这个线程束的线程素ID是奇数还是偶数。而一个线程调度器一次只能向SM中的一半的SP发布指令,因此,同一条指令需要发布2次,待第一次发布的指令执行一次后再发布下一次,执行一次整形或单精度浮点型运算需1个时钟周期,因此每2个时钟周期发布一条新指令。