我读了NVIDIA Fermi白皮书,当我计算SP核心,调度程序的数量时感到困惑。
根据白皮书,在每个SM中,有两个warp调度程序和两个指令调度单元,允许同时发出和执行两个warp。 SM中有32个SP内核,每个内核都有一个完全流水线的ALU和FPU,用于执行线程的指令
众所周知,如果我们只是在每个周期发出一个warp,那么warp由32个线程组成,这意味着这个warp中的所有线程都将占用所有SP内核,并将在一个周期内完成执行(假设有没有任何失速)。
然而,NVIDIA设计了双调度器,它选择两个warp,并从每个warp发出一条指令到一组16个内核,16个加载/存储单元或4个SFU。
NVIDIA表示,这种设计可以带来最高的硬件性能。也许最高硬件性能来自交错执行不同指令,充分利用硬件资源。
我的问题如下(假设没有内存档和所有操作数都可用):
每个warp是否需要两个周期才能完成执行,并且每个warp调度程序将所有32个SP内核分成两组?
ld / st和SFU单元是由所有warp共享的(对于来自双调度程序的warp来说看起来是统一的)?
如果将经线分为两部分,哪部分先安排好?有没有调度员?或者只是随机选择一个部分来执行。
这种设计有什么优势?只是最大限度地利用硬件?
答案 0 :(得分:3)
每个warp是否需要两个周期才能完成执行,并且每个warp调度程序将所有32个SP内核分成两组?
是。与后代不同,费米有一个"hotclock"(着色器时钟),其运行速度是“核心”时钟的2倍。每个单精度浮点指令(例如)发出超过2个“hotclocks”,但是发布到同一组16个SP核心。每个调度程序每个“核心”时钟的净效应是一个问题。
所有warp共享ld / st和SFU单元(对于来自双调度程序的warp看起来是统一的)?
不要真正理解这个问题。 所有执行资源共享/可用于来自任一调度程序的指令。
如果将经线分为两部分,哪部分先安排好?有没有调度员?或者只是随机选择一个部分来执行。
为什么这很重要?该机器表现得好像在一个核心时钟中安排了两个完整的扭曲指令,即“双重问题”。无论如何,你都无法看到在hotclock级别发生的任何事情。
这种设计有什么优势?只是最大限度地利用硬件?
是的,正如费米白皮书所述:
“使用这个优雅的双重问题模型,费米 实现接近峰值的硬件性能。 “