четверг, 14 марта 2013 г.

Visual C/C++ x32 vs Visual C/C++ x64 vs MinGW x32

Оказывается у меня появились постоянные подписчики :)

После одного из комментариев  у меня появилась идея протестировать на производительность код, собираемый разными компиляторами под Windows.

Задача: Выяснить, возможно ли без потери производительности использовать ГНУтые компиляторы для высокопроизводительных коммерческих задач под Windows.

Дано:
1) MinGW 4.4.0
2) Visual C/C++ 2008SP1 (из Visual Studio 2008 Express)
3) x64 компилятор из Windows SDK v7.0 (http://en.wikipedia.org/wiki/Microsoft_Windows_SDK, http://www.microsoft.com/en-us/download/details.aspx?id=18950)

---8<---- РЕМАРКА ---8<----
То, как я устанавливал сначала Visual C/C++ 2008SP1 (вместе с SP1) это отдельная песня -- везде лежит Visual C/C++ 2008 Express без SP, и отдельно SP1, который встает только на версии НЕ Express.

Где-то (так и не понял, да и не помню где) раздобыл web инсталлятор
2 728 440 vcsetup.exe
он и содержит Visual C/С++ 2008+SP1
в отличии от
2 701 304 vcsetup.exe
который содержит только Visual C/С++ 2008 без SP1

Далее прыжки с бубнами на накатывании Windows SDK, причем после очередной итерации выползли ошибки при компиляции проектов :(((
---8<---- РЕМАРКА ---8<----

Но это все мелочи -- в результате я скомпилировал один и тот же исходный код Apache Benchmark из полного комплекта Apache 2.2.24 под тремя разными компиляторами 


 136 192 ab_mingw440_win32.exe
  85 504 ab_vs2008_amd64.exe
  72 704 ab_vs2008_win32.exe
При этом IMHO Visual Studio собирал проект раза в 2 быстрее чем QT Creator+MinGW.

А теперь в номера!!! (c)

Тестовый стенд: Ноутбук Acer TimelineX i3-330M RAM 3Gb, Windows7 x64 Home Basic, свап запрещен, канал в интернет 10Mbit, nginx 1.3.33 на 127.0.0.1:80

Win7x64 i3-330M: 60К обращений в 4 трида к localhost@nginx133. Попытка №1
Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Тест 7 Тест 8 Тест 9 Тест 10 Мин Средн Макс
ab_mingw440_win32.exe 1 379,54 оpеr pеr sеc 1 398,09 оpеr pеr sеc 1 324,43 оpеr pеr sеc 657,12 оpеr pеr sеc 657,91 оpеr pеr sеc 1 402,17 оpеr pеr sеc 923,67 оpеr pеr sеc 616,27 оpеr pеr sеc 658,14 оpеr pеr sеc 1 372,15 оpеr pеr sеc 616,27 -0,21% 1038,949 0,00% 1402,17 -1,06%
ab_vs2008_amd64.exe 1 310,44 оpеr pеr sеc 1 412,47 оpеr pеr sеc 880,73 оpеr pеr sеc 665,88 оpеr pеr sеc 682,79 оpеr pеr sеc 1 417,15 оpеr pеr sеc 668,90 оpеr pеr sеc 617,56 оpеr pеr sеc 667,27 оpеr pеr sеc 1 313,13 оpеr pеr sеc 617,56 0,00% 963,632 -7,25% 1417,15 0,00%
ab_vs2008_win32.exe 1 409,88 оpеr pеr sеc 1 364,85 оpеr pеr sеc 1 399,11 оpеr pеr sеc 616,27 оpеr pеr sеc 667,04 оpеr pеr sеc 1 384,00 оpеr pеr sеc 662,33 оpеr pеr sеc 660,27 оpеr pеr sеc 664,73 оpеr pеr sеc 1 408,85 оpеr pеr sеc 616,27 -0,21% 1023,733 -1,46% 1409,88 -0,51%



Win7x64 i3-330M: 60К обращений в 4 трида к localhost@nginx133. Попытка №2
Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Тест 7 Тест 8 Тест 9 Тест 10 Мин Средн Макс
ab_mingw440_win32.exe 1 152,21 оpеr pеr sеc 1 233,93 оpеr pеr sеc 1 266,43 оpеr pеr sеc 631,45 оpеr pеr sеc 602,55 оpеr pеr sеc 558,19 оpеr pеr sеc 610,10 оpеr pеr sеc 625,80 оpеr pеr sеc 550,16 оpеr pеr sеc 572,21 оpеr pеr sеc 550,16 -0,27% 780,303 0,00% 1266,43 -2,17%
ab_vs2008_amd64.exe 1 297,18 оpеr pеr sеc 1 260,21 оpеr pеr sеc 559,68 оpеr pеr sеc 551,81 оpеr pеr sеc 621,14 оpеr pеr sеc 576,62 оpеr pеr sеc 611,57 оpеr pеr sеc 602,89 оpеr pеr sеc 605,94 оpеr pеr sеc 559,64 оpеr pеr sеc 551,81 0,00% 724,668 -5,35% 1297,18 0,00%
ab_vs2008_win32.exe 1 242,70 оpеr pеr sеc 1 169,40 оpеr pеr sеc 1 226,06 оpеr pеr sеc 621,24 оpеr pеr sеc 633,31 оpеr pеr sеc 614,30 оpеr pеr sеc 610,11 оpеr pеr sеc 552,25 оpеr pеr sеc 529,96 оpеr pеr sеc 535,94 оpеr pеr sеc 529,96 -3,54% 773,527 -0,65% 1242,7 -3,84%

Win7x64 i3-330M: 60К обращений в 10 тридов к localhost@nginx133
Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Тест 7 Тест 8 Тест 9 Тест 10 Мин Средн Макс
ab_mingw440_win32.exe 1 345,75 оpеr pеr sеc 649,22 оpеr pеr sеc 624,88 оpеr pеr sеc 1 111,28 оpеr pеr sеc 1 144,01 оpеr pеr sеc 648,48 оpеr pеr sеc 809,03 оpеr pеr sеc 1 394,04 оpеr pеr sеc 625,69 оpеr pеr sеc 646,52 оpеr pеr sеc 624,88 -3,45% 899,89 -3,39% 1394,04 0,00%
ab_vs2008_amd64.exe 1 274,83 оpеr pеr sеc 648,92 оpеr pеr sеc 655,22 оpеr pеr sеc 1 385,00 оpеr pеr sеc 652,66 оpеr pеr sеc 646,19 оpеr pеr sеc 1 341,99 оpеr pеr sеc 684,25 оpеr pеr sеc 659,04 оpеr pеr sеc 1 366,79 оpеr pеr sеc 646,19 0,00% 931,489 -0,35% 1385 -0,64%
ab_vs2008_win32.exe 1 375,10 оpеr pеr sеc 648,70 оpеr pеr sеc 641,77 оpеr pеr sеc 1 338,72 оpеr pеr sеc 644,24 оpеr pеr sеc 629,18 оpеr pеr sеc 1 383,01 оpеr pеr sеc 1 382,51 оpеr pеr sеc 644,14 оpеr pеr sеc 663,93 оpеr pеr sеc 629,18 -2,75% 935,13 0,00% 1383,01 -0,78%




























Win7x64 i3-330M: 60К обращений в 20 тридов к localhost@nginx133
Тест 1Тест 2Тест 3Тест 4Тест 5Тест 6Тест 7Тест 8Тест 9Тест 10МинСреднМакс
ab_mingw440_win32.exe1 329,93 оpеr pеr sеc1 371,66 оpеr pеr sеc1 387,50 оpеr pеr sеc654,44 оpеr pеr sеc1 383,01 оpеr pеr sеc623,36 оpеr pеr sеc656,68 оpеr pеr sеc623,36-2,24%1058,082857-8,43%1387,5-0,32%
ab_vs2008_amd64.exe1 392,02 оpеr pеr sеc1 392,02 оpеr pеr sеc649,03 оpеr pеr sеc1 341,52 оpеr pеr sеc1 241,49 оpеr pеr sеc624,27 оpеr pеr sеc1 379,54 оpеr pеr sеc624,27-2,09%1145,6985710,00%1392,020,00%
ab_vs2008_win32.exe1 367,28 оpеr pеr sеc1 331,31 оpеr pеr sеc680,25 оpеr pеr sеc993,32 оpеr pеr sеc1 379,04 оpеr pеr sеc637,20 оpеr pеr sеc767,08 оpеr pеr sеc637,20,00%1022,211429-11,89%1379,04-0,92%



Win7x64 i3-330M: 500 обращений в 10 тридов к google.ru
Тест 1Тест 2Тест 3Тест 4Тест 5Тест 6Тест 7Тест 8Тест 9Тест 10МинСреднМакс
ab_mingw440_win32.exe3,98 оpеr pеr sеc4,18 оpеr pеr sеc3,99 оpеr pеr sеc3,92 оpеr pеr sеc3,89 оpеr pеr sеc3,890,00%3,9920,00%4,180,00%
ab_vs2008_amd64.exe4,23 оpеr pеr sеc3,95 оpеr pеr sеc3,37 оpеr pеr sеc3,75 оpеr pеr sеc3,97 оpеr pеr sеc3,37-0,08%3,854-0,01%4,230,00%
ab_vs2008_win32.exe3,74 оpеr pеr sеc3,90 оpеr pеr sеc3,68 оpеr pеr sеc3,84 оpеr pеr sеc3,88 оpеr pеr sеc3,68-0,03%3,808-0,02%3,9-0,02%

































WinXPx32@VirtualBox: 500 обращений в 10 тридов к google.ru
Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Тест 7 Тест 8 Тест 9 Тест 10 Мин Средн Макс
ab_mingw440_win32.exe 2,25 оpеr pеr sеc 2,05 оpеr pеr sеc 3,31 оpеr pеr sеc 3,31 оpеr pеr sеc 2,58 оpеr pеr sеc 2,05 -0,06% 2,7 0,00% 3,31 0,00%
ab_vs2008_win32.exe 2,44 оpеr pеr sеc 2,59 оpеr pеr sеc 2,58 оpеr pеr sеc 2,49 оpеr pеr sеc 2,69 оpеr pеr sеc 2,44 0,00% 2,558 -0,01% 2,69 -0,04%


Выводы:
0: На ноутбуке нельзя проводить производственное тестирование, т.к. он живет своей собственной жизнью даже при отключенных энергосберегающих опциях!!!
1: Все три скомпилированных кода работают примерно одинаково (погрешность менее 1-5-10%)
2: Код скомпилированный MinGW хотя и больше по размеру, но не уступает по производительности коду скомпилированному Visual C/C++ (а иногда и выигрывает (незначительно, но выигрывает!!! :))) ))
3: Переход на компилятор x64 не оправдан для программ использующих менее 2GB RAM ни по производительности скомпилированного кода, ни по количеству танцев с бубнами.

Я выкладываю результаты своих изысканий (http://yadi.sk/d/u2E9NRpg3HJ-E):
1) Исходники с проектными файлами для QT+Mingw, Visual Studio
2) Откомпилированные exe-шники (VS2008x32, VS2008x64, MinGWx32)
3) Результаты тестов в txt и xls форматах

Крайне поучительно будет взглянуть на
1) Настройки QT+Mingw, Visual Studio для компиляции исходников Apache
2) Особенности настройки проектных файлов .pro для QT Creator
3) Особенности написания .bat файлов для замены функций Linux под Windows ;)

Я был бы признателен, если бы кто-нибудь взял бы на себе тяжкий труд по тестированию производительности на десктопной/серверной машине данных программ при этом переключаясь между несколькими OS: WindowsXPx32, Windows7x64, Linux32, Linux64, а затем бы поделился результатами.


Комментариев нет:

Отправить комментарий