ARM Cortex-A 9 NEON性能初歩テスト

1596 ワード

最近ZC 702でARM Cortex-A 9のNEON性能をテストしました.
テストコードは次のとおりです.
        .balign  4
        .global neon_best_pipelne
        .arm
neon_best_pipelne:
        .rept 10000
        vmla.f32 q10, q0, q5
        vmla.f32 q11, q1, q6
        vmla.f32 q12, q2, q7
        vmla.f32 q13, q3, q8
        vmla.f32 q14, q4, q9
        .endr
        BX lr

時間はPrivate Timerで計測し、Private TimerのclockはCPU clockの半分であり、アルゴリズムが使用する時間を正確に統計することができる.
VLDとVSTがアクセスするデータは8バイト揃えが望ましい:DATATYPE vec 1[SIZE]_attribute__((aligned(8)));
FLOATのテスト結果は以下の通りです.
Nr of valid NEON instructions
PCLK(Filtered Average)
CPU_CLK per instruction
5
50040.12
~2
4
45017.75
~2.25
3
45025.00
~3
2
44999.00
~4.5
1
44974.75
~9
注意:
   1. NR of valid NEON instructions:不要なVMLA命令を下から上へ注釈する.Filtered Averageのアルゴリズム:(total-max-min)/(LOOP-2)
MPEの文書によると、VMLA Qd,Qn,Qmはpipeline interlockがない場合、最小必要なcycleは2である.しかし、実際のテストでは、これはVMLA命令が連続している場合に達成される必要があることが分かった.
NEON上FLOATの限界性能:
MPEマニュアルによると,VMLA Qd,Qn,Qmはpipeline interlockがない場合,最小必要なcycleは2である.すなわち、理想的には、1 GHzのシングルコアCA 9が2 GFLOPSを提供することができるように、各CPU cycleが2回のfloat乗算を完了することができることを意味する.しかし実際には他の命令(VLD,VST,etc)が性能を低下させることが多い
VMLAの命令接尾辞を変更する.i 32で、int 32のNEONでの性能をテストできます.int 32の性能データはMPEマニュアルとよく一致している.
Nr of valid NEON instructions
PCLK(Filtered Average)
CPU_CLK per instruction
5
100012.25
~4
4
80005.50
~4
3
60017.50
~4
2
40018.25
~4
1
25009.88
~5