美文网首页
Wave32 and Wave64

Wave32 and Wave64

作者: 陈成_Adam | 来源:发表于2023-02-09 16:19 被阅读0次

    Shader 程序,又称为 Kernel,执行于 GPU 上。
    有多少个 Work-item 就要分别独立执行多少次 Shader 程序。
    32 或者 64 个 Work-item 组织在一起称为 Wave,他们是并行执行的,这是 Work-item 调度的基本单位。

    RDNA3 处理器主要包含:

    • 一个标量算数逻辑单元(Scalar ALU)。对每个 Wave 的数据做运算。
    • 一个向量算数逻辑单元(Vector ALU)。对每个 Work-item 的数据做运算。
    • 本地数据存储(Local data storage)。可以让同一个 Work-group 中的 Work-item 可以共享数据。
    • 标量存储(Scalar memory)。这是一个 Cache,方便在显存和标量寄存器(SGPR)之间传输数据。
    • 向量存储(Vector memory)。方便在显存和向量寄存器(VGPR)之间传输数据。
    • Export。用于把 Shader 数据传输到特定的渲染硬件。

    程序流的控制是使用 SALU 指令

    Shader 支持 32 个 Work-items 为一组(称为 Wave32)或者 64 个为一组(Wave64)。

    Wave 的概念和 NVIDIA 的 Warp 的概念是一样的,只不过是叫法不一样而已。

    NVIDIA AMD
    Warp Wave
    Thread Work-item

    所有的操作都支持这两种 Work-item 大小。
    但是这个大小必须在编译的时候就确定下来,后面也必须以这个大小来运行。
    而且,这个大小与 Wave 中有多少活动的 Work-item 的数量没有关系。

    在执行 VALU 和 VMEM(LDS,texture,buffer,flat)指令时,
    Wave32 情形下每一条指令最多只会发射一次,而
    Wave64 会发射两次(第一次 Work-item 31-0,第二次 63-32)。

    在执行 SALU、SMEM、branch、message 指令时,指令都只会发射一次,
    与 Wave 大小无关。

    Export 的请求也只会发射一次,与 Wave 大小无关。

    Wave64 的两次发射之间可能插入其他 Wave 的指令。

    硬件在指令执行过程中可以跳过 Wave64 的某一半或者全部 Work-item 的执行,这取决于其执行的掩码。
    但是,在执行 VMEM 指令的时候,一般不允许跳过,
    这是因为跳过会导致 outstanding-memory-instruction 计数器不好计数。
    当然,如果当前 Wave 中没有 VMEM 指令,仍然允许跳过。
    还有一种情形也不允许跳过:当一条 VALU 指令写 SGPR 时。

    参考资料

    "RDNA3" Instruction Set Architecture Reference Guide

    相关文章

      网友评论

          本文标题:Wave32 and Wave64

          本文链接:https://www.haomeiwen.com/subject/dyfhkdtx.html