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);写入后读取结果为写入值 |
安全设计:禁止写入输入寄存器,防止数据污染与状态错误。
应用场景¶
- 向量数据处理:批量读取输入Tile,批量写入输出Tile。
- 模块化函数调用:不同调用者传入不同数据源。
- 栈空间集成:输出Tile寄存器可用于临时存储(如函数调用栈)。
总结¶
Tile形参寄存器为分离块提供了结构化、高效、安全的Tile级数据接口。通过最多8个输入与4个输出寄存器,共12个形参,支持灵活的模块间通信。