看板 C_and_CPP 關於我們 聯絡資訊
最近我嘗試最佳化heap,想要去掉realloc的成本 製作了linked list + array(以2冪次方增長) 的heap 以及將linked list以 vector取代,以vector< vector<ty> >實作的heap 對比vector<ty> 實作的heap realloc的資料複製應該會拖累速度,但mingw勝過msvc 今日我嘗試加入1000萬個資料後再pop 看看處理時間 得到如下 這是在 AMD Sempron 2800+(1.6Ghz) CPU, DDR400 1.5GB DRAM Windows XP 跑出來的數據 MinGw -O3 | MSVC2005 完全最佳化 vector 188~190萬 | 102萬/秒 linked list + array 172~200萬/秒 | 同左 vector< vector<ty> >p 120~150萬/秒 | 60萬/秒 vector會是效能差異的主要可能嗎? 很難相信msvc會有如此的表現 msvc我開啟完全最佳化,偏好速度,整個程式最佳化,使用exception mingw開啟 O3, 參數 unroll-all-loop,使用exception 以下是主程式 其中Sunneo::Heap以linked list+array實作 Heap以vector實作 HeapVec以vector< vector<> >實作 http://sunneo.myweb.hinet.net/public/HeapTest.cpp -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.232.156
Killercat:msvc版本? vc6對template效率很差,而且遞迴層有限制 03/23 01:30
sunneo:是 8.0吧 visual studio 2005 03/23 01:40
wowtiger:vc6: time elapsed 0.312 sec throughput 3205128.205 da 03/23 01:42
wowtiger:vc7: time elapsed 0.328 sec throughput 3048780.488 da 03/23 01:42
wowtiger:vc8: time elapsed 0.343 sec throughput 2915451.895 da 03/23 01:42
wowtiger:vc9: time elapsed 0.343 sec throughput 2915451.895 da 03/23 01:43
wowtiger:vc10:time elapsed 0.343 sec throughput 2915451.895 da 03/23 01:43
sunneo:上面的數據是在哪個heap的@_@ ? 目前的source是Sunneo:: 03/23 01:44
MOONRAKER:MinGW-gcc底層不是也使用msvcrt嗎 03/23 01:46
wowtiger:不知道耶 就複製貼上按下編譯... 03/23 01:48
wowtiger:HEAP: 03/23 02:03
wowtiger:vc6: time elapsed 0.328 sec throughput 3048780.488 da 03/23 02:04
wowtiger:vc7: time elapsed 0.296 sec throughput 3378378.378 da 03/23 02:04
wowtiger:vc8: time elapsed 0.546 sec throughput 1831501.832 da 03/23 02:04
wowtiger:vc9: time elapsed 0.484 sec throughput 2066115.702 da 03/23 02:04
wowtiger:vc10:time elapsed 0.468 sec throughput 2136752.137 da 03/23 02:04
wowtiger:HeapVec: 03/23 02:06
wowtiger:vc6: time elapsed 0.500 sec throughput 2000000.000 da 03/23 02:07
wowtiger:vc7: time elapsed 0.500 sec throughput 2000000.000 da 03/23 02:07
wowtiger:vc8: time elapsed 1.078 sec throughput 927643.785 dat 03/23 02:07
wowtiger:vc9: time elapsed 1.171 sec throughput 853970.965 dat 03/23 02:07
wowtiger:vc10:time elapsed 1.187 sec throughput 842459.983 dat 03/23 02:07
wowtiger:以上!! 睡覺!! 03/23 02:08
sunneo: 感謝你 ! 03/23 02:08
sunneo: 你的配備比我好很多 Orz 不過vector<vector<> >掉很大 03/23 02:10
sunneo:看來以list+array去掉realloc是對了 03/23 02:14
sunneo:可能得把msvc8的vector給mingw編才能驗證是否是實作差異 03/23 02:16
sunneo: mingw-gcc似乎是使用舊版的msvcrt 03/23 02:20
sunneo:記得zxvc先前一系列關於 mingw<->msvc 文章似乎有提過 03/23 02:20
wowtiger:跟 msvcrt.dll 沒有關係 我把 vc10 用 vc7 的 include 03/23 07:53
wowtiger:vc10:time elapsed 0.500 sec throughput 2000000.000 da 03/23 07:53
wowtiger:以上是 HeapVec, 不過 Heap 就沒有效果了 03/23 08:02
sunneo:原來如此 謝謝你 03/23 10:05