-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Description
往期 #31 几类循环模式的指令集角度观察
simple sgemm
这个例子来自论文XLOOP 提供的benchmark
void sgemm_scalar_int( int C[], int A[], int B[], int size )
{
for ( int mm = 0; mm < size; ++mm ) {
for ( int nn = 0; nn < size; ++nn ) {
int c = 0;
for ( int i = 0; i < size; ++i ) {
int a = A[mm + i * size];
int b = B[nn + i * size];
c += a * b;
}
C[mm+nn*size] = c;
}
}
}
000000008000110a <sgemm_scalar_int>:
8000110a: 06d05363 blez a3,80001170 <sgemm_scalar_int+0x66>
8000110e: 1141 addi sp,sp,-16
80001110: e422 sd s0,8(sp)
80001112: 82aa mv t0,a0
80001114: 8336 mv t1,a3
80001116: 8432 mv s0,a2
80001118: 8fae mv t6,a1
8000111a: 00269513 slli a0,a3,0x2
8000111e: 4381 li t2,0
80001120: 8f22 mv t5,s0
80001122: 8e96 mv t4,t0
80001124: 4e01 li t3,0
80001126: 867a mv a2,t5
80001128: 86fe mv a3,t6
8000112a: 4781 li a5,0
8000112c: 4581 li a1,0
**最内层循环的汇编代码------------------------------------
**8000112e: 4298 lw a4,0(a3)
80001130: 00062803 lw a6,0(a2)
80001134: 88be mv a7,a5
80001136: 2785 addiw a5,a5,1
80001138: 0307073b mulw a4,a4,a6
8000113c: 96aa add a3,a3,a0
8000113e: 962a add a2,a2,a0
80001140: 9db9 addw a1,a1,a4
80001142: fef316e3 bne t1,a5,8000112e <sgemm_scalar_int+0x24>
** 最内层循环的汇编代码--end----------------------------------
80001146: 00bea023 sw a1,0(t4)
8000114a: 001e079b addiw a5,t3,1
8000114e: 9eaa add t4,t4,a0
80001150: 0f11 addi t5,t5,4
80001152: 011e0463 beq t3,a7,8000115a <sgemm_scalar_int+0x50>
80001156: 8e3e mv t3,a5
80001158: b7f9 j 80001126 <sgemm_scalar_int+0x1c>
8000115a: 0013879b addiw a5,t2,1
8000115e: 0f91 addi t6,t6,4
80001160: 0291 addi t0,t0,4
80001162: 01c38463 beq t2,t3,8000116a <sgemm_scalar_int+0x60>
80001166: 83be mv t2,a5
80001168: bf65 j 80001120 <sgemm_scalar_int+0x16>
8000116a: 6422 ld s0,8(sp)
8000116c: 0141 addi sp,sp,16
8000116e: 8082 ret
80001170: 8082 ret