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, 517Note: 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只能在重算術運算時才有幫助吧.
全站熱搜
留言列表