跳转至

LTAR

LTAR(Local Tile Address Register)称为Tile形参寄存器,是分离块(Decoupled Block)中用于与调用方进行大块数据(Tile)级通信的核心机制,支持高效、结构化的输入输出传递。

寄存器定义

每个可读写Tile寄存器的块指令支持:

  • 8个输入Tile寄存器
  • 4个输出Tile寄存器

为满足数据交互需求,分离块内部定义了 12个Tile类型形参寄存器,用于映射调用方传入的Tile寄存器。

Tile形参寄存器列表如下:

寄存器 类型 说明
TA 输入 存储本块的 第一个输入Tile寄存器的首地址
TB 输入 存储本块的 第二个输入Tile寄存器的首地址
TC 输入 存储本块的 第三个输入Tile寄存器的首地址
TD 输入 存储本块的 第四个输入Tile寄存器的首地址
TE 输入 存储本块的 第五个输入Tile寄存器的首地址
TF 输入 存储本块的 第六个输入Tile寄存器的首地址
TG 输入 存储本块的 第七个输入Tile寄存器的首地址
TH 输入 存储本块的 第八个输入Tile寄存器的首地址
TO 输出 存储本块的 第一个输出Tile寄存器的首地址
TO1/TS 输出/栈 存储本块的 第二个输出Tile寄存器的首地址(也可用作栈空间首地址)
TO2 输出 存储本块的 第三个输出Tile寄存器的首地址
TO3 输出 存储本块的 第四个输出Tile寄存器的首地址

注:TO1/TS 支持双用途:既可作为输出寄存器首地址,也可作为栈空间首地址使用。

映射机制

Tile形参寄存器通过块头指令 B.IOT 与调用方传入的Tile寄存器进行绑定。

映射顺序:形参寄存器 TA ~ TH 对应块头传入的 前8个输入Tile。TO ~ TO3 对应块头传入的 4个输出Tile。

  • 输入映射
    • TA -> 第1个输入Tile寄存器
    • TB -> 第2个输入Tile寄存器
    • ...
    • TH -> 第8个输入Tile寄存器(注:共8个输入,索引A~H)
  • 输出映射
    • TO -> 第1个输出Tile寄存器
    • TO1 -> 第2个输出Tile寄存器
    • TO2 -> 第3个输出Tile寄存器
    • TO3 -> 第4个输出Tile寄存器

映射是运行时动态绑定的,不同调用者可指定不同的Tile寄存器作为输入输出。


汇编示例

汇编示例如下:

Header:
    MPAR .Body <LB0:64, LB1:32> T#1, U#1, T#2, [a0], ->M<256B>
    ...
Body:
    l.lw  [TA, LC0.uh<<2],   ->vt.w       # TA映射到块头的T#1输入
    l.lw  [TB, LC0.uh<<2],   ->vt.w       # TB映射到块头的U#1输入
    l.add vt#1.sw, vt#2.sw,  ->vt.w
    l.sw  vt#1.sw, [TO, LC0<<2]           # TO映射到块头的M输出
    l.ld  [TC, LC0.uh<<3],   ->vt.d       # TC映射到块头的T#2输入
    l.sd  vt#1.ud, [ri0.ud, LC0<<3]
    bstop


关键规则与注意事项

1.初始值来源

  • Tile形参寄存器(TA/TO等)的初始值由调用方硬件在解析块头时分配,不可在块内修改。
  • 若块内尝试读取未初始化的形参寄存器(如未传入的 ),结果为未定义。

2.映射空间读写权限

寄存器类型 权限 说明
输入形参映射空间(TA、TB等) 只读 块内读取合法;写入触发非法指令异常
输出形参映射空间(TO、TO1等) 可读写 若读取未写入的位置,结果为未定义(undefined);写入后读取结果为写入值

安全设计:禁止写入输入寄存器,防止数据污染与状态错误。


应用场景

  1. 向量数据处理:批量读取输入Tile,批量写入输出Tile。
  2. 模块化函数调用:不同调用者传入不同数据源。
  3. 栈空间集成:输出Tile寄存器可用于临时存储(如函数调用栈)。

总结

Tile形参寄存器为分离块提供了结构化、高效、安全的Tile级数据接口。通过最多8个输入与4个输出寄存器,共12个形参,支持灵活的模块间通信。