我无法使用此处找到的文档阅读 AMD 南岛 GPU 的汇编语言。
这是一个示例 OpenCL 代码:
1 __attribute__((reqd_work_group_size(256, 1, 1)))
2 void kernel foo(global uchar* data) {
3 const uint block_size = get_local_size(0);
4 const uint lid = get_local_id(0);
5
6 data[lid] = max(data[lid], data[lid + block_size]);
7 }
以及 AMD 编译器生成的(反)汇编:
1 shader main
2 asic(SI_ASIC)
3 type(CS)
4
5 s_buffer_load_dword s0, s[8:11], 0x00 // what is the purpose of s[8:11] ?
6 s_waitcnt lgkmcnt(0)
7 v_add_i32 v1, vcc, s0, v0 // I guess v0 initially contains the local IDs ?
8 v_add_i32 v0, vcc, s0, v0 // wouldn't a v_mov v0, v1 performs better ?
9 buffer_load_ubyte v2, v1, s[4:7], 0 offen // s[4:7] ?
10 buffer_load_ubyte v0, v0, s[4:7], 0 offen offset:256
11 s_waitcnt vmcnt(0)
12 v_max_u32 v0, v2, v0
13 buffer_store_byte v0, v1, s[4:7], 0 offen glc
14 s_endpgm
15 end
- 我不明白的是,我怎么可能最终编写了一条只有 ISA 手册的 *buffer_load_ubyte* 指令(请参阅第 12.6 节矢量内存缓冲区指令)?
- 我应该如何阅读微码信息?(例如:*v_add_i32* 指令的第 161 页)
- 是否有任何标准方法来描述处理器架构?
谢谢 !
Ps:一些额外的问题在汇编代码注释中