[問題] mingw及msvc效能上的差異

看板C_and_CPP作者 (艾斯寇德)時間15年前 (2009/03/23 01:11), 編輯推噓4(4029)
留言33則, 4人參與, 最新討論串1/1
最近我嘗試最佳化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

03/23 01:30, , 1F
msvc版本? vc6對template效率很差,而且遞迴層有限制
03/23 01:30, 1F

03/23 01:40, , 2F
是 8.0吧 visual studio 2005
03/23 01:40, 2F

03/23 01:42, , 3F
vc6: time elapsed 0.312 sec throughput 3205128.205 da
03/23 01:42, 3F

03/23 01:42, , 4F
vc7: time elapsed 0.328 sec throughput 3048780.488 da
03/23 01:42, 4F

03/23 01:42, , 5F
vc8: time elapsed 0.343 sec throughput 2915451.895 da
03/23 01:42, 5F

03/23 01:43, , 6F
vc9: time elapsed 0.343 sec throughput 2915451.895 da
03/23 01:43, 6F

03/23 01:43, , 7F
vc10:time elapsed 0.343 sec throughput 2915451.895 da
03/23 01:43, 7F

03/23 01:44, , 8F
上面的數據是在哪個heap的@_@ ? 目前的source是Sunneo::
03/23 01:44, 8F

03/23 01:46, , 9F
MinGW-gcc底層不是也使用msvcrt嗎
03/23 01:46, 9F

03/23 01:48, , 10F
不知道耶 就複製貼上按下編譯...
03/23 01:48, 10F

03/23 02:03, , 11F
HEAP:
03/23 02:03, 11F

03/23 02:04, , 12F
vc6: time elapsed 0.328 sec throughput 3048780.488 da
03/23 02:04, 12F

03/23 02:04, , 13F
vc7: time elapsed 0.296 sec throughput 3378378.378 da
03/23 02:04, 13F

03/23 02:04, , 14F
vc8: time elapsed 0.546 sec throughput 1831501.832 da
03/23 02:04, 14F

03/23 02:04, , 15F
vc9: time elapsed 0.484 sec throughput 2066115.702 da
03/23 02:04, 15F

03/23 02:04, , 16F
vc10:time elapsed 0.468 sec throughput 2136752.137 da
03/23 02:04, 16F

03/23 02:06, , 17F
HeapVec:
03/23 02:06, 17F

03/23 02:07, , 18F
vc6: time elapsed 0.500 sec throughput 2000000.000 da
03/23 02:07, 18F

03/23 02:07, , 19F
vc7: time elapsed 0.500 sec throughput 2000000.000 da
03/23 02:07, 19F

03/23 02:07, , 20F
vc8: time elapsed 1.078 sec throughput 927643.785 dat
03/23 02:07, 20F

03/23 02:07, , 21F
vc9: time elapsed 1.171 sec throughput 853970.965 dat
03/23 02:07, 21F

03/23 02:07, , 22F
vc10:time elapsed 1.187 sec throughput 842459.983 dat
03/23 02:07, 22F

03/23 02:08, , 23F
以上!! 睡覺!!
03/23 02:08, 23F

03/23 02:08, , 24F
感謝你 !
03/23 02:08, 24F

03/23 02:10, , 25F
你的配備比我好很多 Orz 不過vector<vector<> >掉很大
03/23 02:10, 25F

03/23 02:14, , 26F
看來以list+array去掉realloc是對了
03/23 02:14, 26F

03/23 02:16, , 27F
可能得把msvc8的vector給mingw編才能驗證是否是實作差異
03/23 02:16, 27F

03/23 02:20, , 28F
mingw-gcc似乎是使用舊版的msvcrt
03/23 02:20, 28F

03/23 02:20, , 29F
記得zxvc先前一系列關於 mingw<->msvc 文章似乎有提過
03/23 02:20, 29F

03/23 07:53, , 30F
跟 msvcrt.dll 沒有關係 我把 vc10 用 vc7 的 include
03/23 07:53, 30F

03/23 07:53, , 31F
vc10:time elapsed 0.500 sec throughput 2000000.000 da
03/23 07:53, 31F

03/23 08:02, , 32F
以上是 HeapVec, 不過 Heap 就沒有效果了
03/23 08:02, 32F

03/23 10:05, , 33F
原來如此 謝謝你
03/23 10:05, 33F
文章代碼(AID): #19nd4qZt (C_and_CPP)