【发布时间】:2021-05-15 20:25:12
【问题描述】:
您好,我刚接触 CUDA 编程。我从使用 OpenCL 构建程序中获得了这段汇编代码。
我开始想知道这些数字和字符是什么意思。如%f7、%f11、%rd3、%r3、%f、%p。
我猜rd 可能是指一个寄存器?并且数字是寄存器号?也许百分比只是将操作数写入ptx命令(即ld.shared.f32)的一种方式?
如果我的猜测是正确的,那么 %r3 是什么意思,它就像不同类别的寄存器?还有 %p 和 %f7。
提前谢谢你。
ld.global.f32 %f7, [%rd16];
st.shared.f32 [%rd2], %f7;
bar.sync 0;
ld.shared.f32 %f8, [%rd4];
ld.shared.f32 %f9, [%rd3];
fma.rn.f32 %f10, %f9, %f8, %f32;
ld.shared.f32 %f11, [%rd4+32];
ld.shared.f32 %f12, [%rd3+4];
fma.rn.f32 %f13, %f12, %f11, %f10;
ld.shared.f32 %f14, [%rd4+64];
ld.shared.f32 %f15, [%rd3+8];
fma.rn.f32 %f16, %f15, %f14, %f13;
ld.shared.f32 %f17, [%rd4+96];
ld.shared.f32 %f18, [%rd3+12];
fma.rn.f32 %f19, %f18, %f17, %f16;
ld.shared.f32 %f20, [%rd4+128];
ld.shared.f32 %f21, [%rd3+16];
fma.rn.f32 %f22, %f21, %f20, %f19;
ld.shared.f32 %f23, [%rd4+160];
ld.shared.f32 %f24, [%rd3+20];
fma.rn.f32 %f25, %f24, %f23, %f22;
ld.shared.f32 %f26, [%rd4+192];
ld.shared.f32 %f27, [%rd3+24];
fma.rn.f32 %f28, %f27, %f26, %f25;
ld.shared.f32 %f29, [%rd4+224];
ld.shared.f32 %f30, [%rd3+28];
fma.rn.f32 %f32, %f30, %f29, %f28;
bar.sync 0;
add.s32 %r37, %r37, 8;
add.s32 %r36, %r36, %r11;
add.s32 %r38, %r38, 1;
setp.lt.s32 %p5, %r38, %r8;
[已编辑]
感谢 Robert Crovella 的彻底回答! 万一有人想知道,这是我的 ptx 文件顶部的寄存器声明部分(?)
.reg .pred %p<6>;
.reg .f32 %f<33>;
.reg .b32 %r<39>;
.reg .b64 %rd<19>;
.shared .align 4 .b8 sgemm$blockA[256];
// demoted variable
.shared .align 4 .b8 sgemm$blockB[256];
共享寄存器大小为 256,我已将其设置为大小 16 * 16。
并且参考文档的具体部分是here
【问题讨论】:
标签: assembly opencl cpu-registers ptx