*****************************************************************************/
/**************************************************************************************
-* 2013/09/29 Saar
+* 2013/09/30 Saar
* BLASTEST : OK
* CTEST : OK
* TEST : OK
*
*
-* 2013/09/29 Saar
+* 2013/09/30 Saar
* UNROLL_N 2
* UNROLL_M 8
-* DGEMM_P 128
-* DGEMM_Q 128
-* DGEMM_R 2048
+* DGEMM_P 64
+* DGEMM_Q 64
+* DGEMM_R 512
* A_PRE 192
* B_PRE 32
* C_PRE 64
*
* Performance on Odroid U2:
*
-* 1 Core: 1.48 GFLOPS ATLAS: 1.52 GFLOPS
-* 2 Cores: 2.92 GFLOPS ATLAS: - GFLOPS
-* 3 Cores: 4.08 GFLOPS ATLAS: - GFLOPS
-* 4 Cores: 4.80 GFLOPS ATLAS: 3.80 GFLOPS
+* 1 Core: 1.42 GFLOPS ATLAS: 1.58 GFLOPS
+* 2 Cores: 2.81 GFLOPS ATLAS: - GFLOPS
+* 3 Cores: 4.05 GFLOPS ATLAS: - GFLOPS
+* 4 Cores: 5.40 GFLOPS ATLAS: 3.88 GFLOPS
**************************************************************************************/
#define ASSEMBLER
.macro KERNEL8x2
fldmiad BO!, { d24 , d25}
- pld [AO , #A_PRE]
- fldmiad AO!, { d0, d1 }
-
+ fldd d0, [ AO ]
fmacd d8 , d0, d24
- fldmiad AO!, { d2, d3 }
- fmacd d9 , d1, d24
- fldmiad AO!, { d4, d5 }
+ fldd d1, [ AO , #8 ]
fmacd d16 , d0, d25
- fldmiad AO!, { d6, d7 }
+ fldd d2, [ AO , #16 ]
+ fmacd d9 , d1, d24
fmacd d17 , d1, d25
-
+ fldd d3, [ AO , #24 ]
fmacd d10 , d2, d24
- fmacd d11 , d3, d24
fmacd d18 , d2, d25
+ fldd d4, [ AO , #32 ]
+ fmacd d11 , d3, d24
+ pld [AO , #A_PRE]
fmacd d19 , d3, d25
-
- pld [AO , #A_PRE-32]
+ fldd d5, [ AO , #40 ]
fmacd d12 , d4, d24
- fmacd d13 , d5, d24
fmacd d20 , d4, d25
+ fldd d6, [ AO , #48 ]
+ fmacd d13 , d5, d24
fmacd d21 , d5, d25
+ fldd d7, [ AO , #56 ]
fmacd d14 , d6, d24
- fmacd d15 , d7, d24
fmacd d22 , d6, d25
+ pld [AO , #A_PRE+32]
+ fmacd d15 , d7, d24
+ add AO, AO, #64
fmacd d23 , d7, d25
.endm
.macro SAVE8x2
vldr d0, ALPHA
- vldm CO1, { d24, d25, d26 , d27 , d28 , d29 , d30 , d31 }
-
- vmla.f64 d24, d0 , d8
- vmla.f64 d25, d0 , d9
- vmla.f64 d26, d0 , d10
- vmla.f64 d27, d0 , d11
- vmla.f64 d28, d0 , d12
- vmla.f64 d29, d0 , d13
- vmla.f64 d30, d0 , d14
- vmla.f64 d31, d0 , d15
-
- vstm CO1!, { d24, d25, d26 , d27 , d28 , d29 , d30 , d31 }
- vldm CO2, { d8 , d9 , d10 , d11 , d12, d13 , d14 , d15 }
+
+ fldd d24, [CO1]
+ fldd d25, [CO1, #8 ]
+
+ fmacd d24, d0 , d8
+ fldd d8 , [CO2]
+ fldd d26, [CO1, #16]
+ fmacd d25, d0 , d9
+ fldd d9 , [CO2, #8 ]
+ fldd d27, [CO1, #24]
+ fmacd d26, d0 , d10
+ fldd d10 , [CO2, #16 ]
+ fldd d28, [CO1, #32]
+ fmacd d27, d0 , d11
+ fldd d11 , [CO2, #24 ]
+ fldd d29, [CO1, #40]
+ fmacd d28, d0 , d12
+ fldd d12 , [CO2, #32 ]
+ fldd d30, [CO1, #48]
+ fmacd d29, d0 , d13
+ fldd d13 , [CO2, #40 ]
+ fldd d31, [CO1, #56]
+ fmacd d30, d0 , d14
+ fldd d14 , [CO2, #48 ]
+ fmacd d31, d0 , d15
+ fldd d15 , [CO2, #56 ]
+
- vmla.f64 d8 , d0 , d16
- vmla.f64 d9 , d0 , d17
- vmla.f64 d10, d0 , d18
- vmla.f64 d11, d0 , d19
- vmla.f64 d12, d0 , d20
- vmla.f64 d13, d0 , d21
- vmla.f64 d14, d0 , d22
- vmla.f64 d15, d0 , d23
+ fmacd d8 , d0 , d16
+ fstd d24, [CO1]
+ fmacd d9 , d0 , d17
+ fstd d25, [CO1, #8 ]
+ fstd d8 , [CO2]
+ fmacd d10, d0 , d18
+ fstd d26, [CO1, #16 ]
+ fstd d9 , [CO2, #8 ]
+ fmacd d11, d0 , d19
+ fstd d27, [CO1, #24 ]
+ fstd d10, [CO2, #16 ]
+ fmacd d12, d0 , d20
+ fstd d28, [CO1, #32 ]
+ fstd d11, [CO2, #24 ]
+ fmacd d13, d0 , d21
+ fstd d29, [CO1, #40 ]
+ fstd d12, [CO2, #32 ]
+ fmacd d14, d0 , d22
+ fstd d30, [CO1, #48 ]
+ fstd d13, [CO2, #40 ]
+ fmacd d15, d0 , d23
+ fstd d31, [CO1, #56 ]
+ fstd d14, [CO2, #48 ]
+
+ add CO1, CO1, #64
+ fstd d15, [CO2, #56 ]
+ add CO2, CO2, #64
- vstm CO2!, { d8 , d9 , d10 , d11 , d12, d13 , d14 , d15 }
.endm
str r3 , C // store C
ldr AO, A // AO = A
+ pld [AO , #A_PRE-96]
+ pld [AO , #A_PRE-64]
+ pld [AO , #A_PRE-32]
_L2_M8_BEGIN:
_L2_M8_20:
pld [CO1, #C_PRE]
+ pld [CO1, #C_PRE+32]
pld [CO2, #C_PRE]
+ pld [CO2, #C_PRE+32]
INIT8x2
mov BO, BC