close
看到網路上還有人在用MMX 做 memory copy, 因此不得不把之前實驗的結果公開,以免大家繼續被誤導.浪費時間又降低可攜性.
究境32bit, 64-bit, 128-bit 的搬移指令差異如何?請看以下實驗.
 
Compare three MemCpy implementation
 
1. C-Run Time memcpy()
2. MMS 64bit MOVQ
3. SSE2 128bits MOVAPS
 
Copy 614400 bytes from buffer A to buffer B. Test 8 times
 
The results (uS)
==#1  = #2  = #3 =#4  = #5 = #6 =#7  =#8
1. 549, 545, 522, 511,  548,  556, 610,  619
2. 677, 624, 547, 539,  542,  550, 532,  548
3. 529, 533, 551, 619,  619,  618, 569,  517
 
Note: test sequence
#1,#2: 2(MMX)first->3(SSE2)->1(C)
#3,#4: 3(SSE2) -> 1(C) -> 2(MMX)
#5,#6: 3(SSE2)->2(MMX)->1(C)
#7,#8: 1(C)->3(SSE2) ->2(MMX)
 
結論:
1. 三種方法效能其實差異不大. 先測試的方法花比較多時間,可能與memory catch有關.
   就資料的搬移,瓶頸應在memory的access時間, CPU內部應也是以最大頻寬將資料搬入, 因此MMX或SSE2完全佔不到便宜.
  MMX或SSE2只能在重算術運算時才有幫助吧.

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 free6d1823 的頭像
    free6d1823

    Free Software

    free6d1823 發表在 痞客邦 留言(0) 人氣()