小编Don*_*ang的帖子

为什么在GPU的SM中有两个Warp Scheduler?

我阅读了NVIDIA Fermi白皮书,并在计算SP内核,调度程序的数量时感到困惑。

根据白皮书,每个SM中都有两个Warp调度程序和两个指令分派单元,从而允许同时发布和执行两个Warp。SM中有32个SP内核,每个内核具有完全流水线化的ALU和FPU,用于执行线程的指令

众所周知,一个warp由32个线程组成,如果我们仅在每个周期内发出一个warp,则意味着该warp中的所有线程将占用所有SP内核,并在一个周期内完成执行(假设没有任何停顿) )。

但是,NVIDIA设计了双调度程序,该调度程序选择两个扭曲,然后从每个扭曲向一个16个核,16个加载/存储单元或4个SFU的组发出一条指令。

NVIDIA表示,这种设计可带来最高的硬件性能。最高的硬件性能可能来自对不同指令的交错执行,从而充分利用了硬件资源。

我的问题如下(假设没有内存停滞并且所有操作数都可用):

  1. 每个warp是否需要两个周期来完成执行,并且每个warp调度程序将所有32个SP内核分为两组?

  2. ld / st和SFU单元由所有经线共享(看起来像来自双重调度程序的经线的统一服)?

  3. 如果将经纱分为两个部分,请先安排哪一部分?有调度程序吗?或只是随机选择一个要执行的部分。

  4. 这种设计的优点是什么?只是最大限度地利用硬件?

cuda warp-scheduler

5
推荐指数
1
解决办法
2114
查看次数

为什么__len __()为s = []和s = [[]]提供不同的输出结果?

代码段:

>>>s = []
>>>len(s)
0
Run Code Online (Sandbox Code Playgroud)

然而:

>>>s = [[]]
>>>len(s)
1
Run Code Online (Sandbox Code Playgroud)

我只声明两个列表,但没有分配任何元素,为什么len()给出不同的输出?

python list

-2
推荐指数
1
解决办法
91
查看次数

标签 统计

cuda ×1

list ×1

python ×1

warp-scheduler ×1