Страниц: [1]
  Печать  
Автор Тема: GCC - проблема выбора версии и оптимизация  (Прочитано 6986 раз)
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« : Июля 04, 2008, 08:13:00 pm »

GCC - проблема выбора версии и оптимизация
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #1 : Июля 04, 2008, 10:03:17 pm »

Так как я писал в теме ады предлагаю начать новую тему связанную с проблемой выбора версии компилятора gcc и вопросами исползования всевозможных опции каторые представляють компиляторы gcc
Во первых на сегодня мы имеем следующие версии компилятора gccдоступные в QNX 6.* :
1. qcc -V2.95.3,gcc_ntox86
2. qcc -V3.3.5,gcc_ntox86
3. gcc 4.1.3
4. gcc 4.2.4
5. gcc 4.3.2
6. gcc 4.4.0
gcc 4.4.0 пока еще эксперыменталная версия, не все она можеть компилировать правильно.
Во вторых новые версии имееть новые возможности. Они позваляють использоваться этими возможностями которые имееють современные микропроцессоры. Старые версии не поддержывають новые архитектуры просессоров, новые машинные команды и прочие. Эстестьвенно что выбор компилятора и даже выбор языка програмироввания зависить от работы каторую предстаить сделать. Но я уверен, что это только вопрос времени как быдем иметь дело с встроенными системами с процессорами основанными хотябы на Core2.
И так я хочу представить результаты моих исследований возможности какие дають новые версии компиляторов gcc.
Я тепер работаю на компутере с CPU Intel Core2 Quad Q6600 2.40 GHz
И это позваляеть генерировать код на разные архитектуры:
x86, pentiumpro, pentium4, native и core2. Я исползовал следующие опции архитектуры:
-march=pentiumpro -mcpu=pentiumpro
-march=pentium4 -mcpu=pentium4
-march=native
-march=core2
и опции оптимизации -O0, -O2, -O3 и -fomit-frame-pointer.
Программа Dhrystone Benchmark, Version 2.1 Author: Reinhold P. Weicker.
Результат - время выполнения программы.

             -O0        |pentium4     |pentiumpro   |native       |core2
QCC2.95.3 |2.270652537  |             |2.084481025  |             |
QCC3.3.5  |2.318645193  |2.223459758  |2.007292837  |             |
gcc4.1.3  |2.216260860  |2.119675640  |2.174467255  |             |
gcc4.2.4  |2.088680383  |2.049686350  |2.201863063  |2.101078485  |
gcc4.3.2  |2.274451955  |2.088880352  |2.990942315  |2.308246784  |2.307246937
gcc4.4.0  |2.426428699  |2.086480719  |2.991742193  |2.308046814  |2.307846845
==============================================================================
gcc4.2.4  |2.088680383  
gcc4.2.4  |             |2.049686350  
QCC3.3.5  |             |             |2.007292837
gcc4.2.4  |             |             |             |2.101078485
gcc4.3.2  |             |             |             |             |2.307246937

-fomit-frame-pointer

             -O0        |pentium4     |pentiumpro   |native       |core2
QCC2.95.3 |1.959100211  |             |1.939503210  |             |
QCC3.3.5  |1.942502751  |1.813122549  |1.898109544  |           |
gcc4.1.3  |2.147471386  |2.059084911  |1.998094244  |             |
gcc4.2.4  |2.274251986  |1.939703180  |2.014291766  |1.835719092  |
gcc4.3.2  |2.022090572  |2.014891674  |2.780974445  |1.927305077  |1.926305230
gcc4.4.0  |2.022290542  |2.011692164  |2.781174415  |1.927505046  |1.927505046
===============================================================================
QCC3.3.5  |1.942502751
QCC3.3.5  |             |1.813122549
QCC3.3.5  |             |             |1.898109544
gcc4.2.4  |             |             |             |1.835719092
gcc4.3.2  |             |             |             |             |1.926305230

-O2 -fomit-frame-pointer

             -O0        |pentium4     |pentiumpro   |native       |core2
QCC2.95.3 |1.294601895  |             |1.248208994  |             |
QCC3.3.5  |1.270605567  |1.105030904  |1.269605720  |           |
gcc4.1.3  |1.224812575  |1.249208841  |1.196416920  |             |
gcc4.2.4  |1.251608474  |1.265606332  |1.209614900  |1.050239288  |
gcc4.3.2  |1.381788554  |1.098631883  |0.949854650  |0.938056455  |0.939056302
gcc4.4.0  |1.377589196  |1.093432679  |0.968251834  |0.939056302  |0.937456547
==============================================================================
gcc4.1.3  |1.224812575
gcc4.4.0  |             |1.093432679
gcc4.3.2  |             |             |0.949854650
gcc4.3.2  |             |             |             |0.938056455
gcc4.4.0  |             |             |             |             |0.937456547

-O3 -fomit-frame-pointer

             -O0        |pentium4     |pentiumpro   |native       |core2
QCC2.95.3 |1.242409882  |             |1.259607250  |             |
QCC3.3.5  |1.198816553  |1.109230261  |1.196416920  |             |
gcc4.1.3  |1.123428089  |1.074235616  |1.021643664  |             |
gcc4.2.4  |1.112229802  |1.067436657  |1.059637850  |0.903061810  |
gcc4.3.2  |1.325797122  |1.026642899  |0.915459913  |0.898662483  |0.898062575
gcc4.4.0  |1.358592103  |1.013044980  |0.930057679  |0.921059056  |0.921259025
==============================================================================
gcc4.2.4  |1.112229802
gcc4.4.0  |             |1.013044980
gcc4.3.2  |             |             |0.915459913
gcc4.3.2  |             |             |             |0.898662483  |          
gcc4.3.2  |             |             |             |             |0.898062575

Из этих результатов видно что к примеру если не применять никаких опции архитектуры а лиш использоавть опции оптимизации то можно сайти с 2.31 - QCC3.3.5 ( на резултаты gcc4.4.0 не надо смотреть. они меняються слишком часто) на 1.11 - gcc4.2.4
Самая архитектура не имеет так болшого влияния. Но сайти ниже 1.0 можно только используя архитектуру pentiumpro, native или core2 но используя gcc4.3.2
Я намерываюсь провести иследования на других тестах. Но все таки думаю что и эти результаты показывають какую важную роль играеть провилный выпор компилятора и опции компиляции.
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #2 : Июля 04, 2008, 11:03:24 pm »

К сожалении не хорошо вышли саммые данны. Я послал пост тоже на http://qnxclub.net/modules.php?name=Forums&file=viewtopic&t=586
Там думаю лучше видео. На этом сайте есть предварительный просмотр и это позволило сделать так.

___________-O0________|pentium4____|pentiumpro__|native______|core2
QCC2.95.3_|2. 270652537_|___________|2.084481025_|___________|
QCC3.3.5__|2.318645193_|2.223459758_|2.0 07292837_|___________|  
gcc4.1.3___|2.216260860_|2.119675640_|2.174467255_|___________|
gcc4.2.4___|2.088680383 _|2.049686350_|2.201863063_|2.101078485  |
gcc4.3.2___|2.274451955_|2.088880352_|2.990942315_|2.308246784 |2.307246937
gcc4.4.0___|2.426428699_|2.086480719_|2.991742193_|2.308046814_|2.307846845
==============================================================================
gcc4.2.4_ _|2.088680383  
gcc4.2.4__|___________|2.049686350  
QCC3.3.5_|___________|___________|2.007292837
gcc4.2.4__|___________|___________|______ ____|2.101078485
gcc4.3.2__|___________|___________|__________|___________|2.307246937

-fomit-frame-pointer  

___________-O0________|pentium4____|pentiumpro__|native_______|core2
QCC2.95.3_|1.959 100211_|____________|1.939503210_|___________|  
QCC3.3.5__|1.942502751_|1.813122549_|1.898109544_|___________|
gcc4.1.3___|2.147471386_ |2.059084911_|1.998094244_|___________|
gcc4.2.4___|2.274251986_|1.939703180_|2.014291766 _|1.835719092_|
gcc4.3.2___|2.022090572_|2.014891674_|2.780974445_|1.927305077_|1.9263052 30
gcc4.4.0___|2.022290542_|2.011692164_|2.781174415_|1.927505046_|1.927505046
========= ======================================================================
QCC3.3.5__|1.94250 2751
QCC3.3.5__|___________|1.813122549
QCC3.3.5__|___________|____________|1.898109544
gcc4.2.4___|___________|____________|____________|1.835719092
gcc4.3.2___|___________|__ __________|____________|___________|1.926305230

-O2  -fomit-frame-pointer

___________-O0________|pentium4____|pentiumpro__|native_______|cor e2
QCC2.95.3_|1.294601895_|____________|1.248208994_|___________|
QCC3.3.5__|1.270605567 _|1.105030904_|1.269605720_|____________|
gcc4.1.3___|1.224812575_|1.249208841_|1.1964169 20_|____________|
gcc4.2.4___|1.251608474_|1.265606332_|1.209614900_|1.050239288_|
gcc4. 3.2___|1.381788554_|1.098631883_|0.949854650_|0.938056455_|0.939056302
gcc4.4.0___|1.3775 89196_|1.093432679_|0.968251834_|0.939056302_|0.937456547
=============================== ===============================================
gcc4.1.3___|1.224812575
gcc4.4.0___|____ ________|1.093432679
gcc4.3.2___|____________|___________|0.949854650
gcc4.3.2___|______ ______|___________|___________|0.938056455
gcc4.4.0___|____________|___________|_________ __|___________|0.937456547

-O3  -fomit-frame-pointer

___________-O0________|pentium4____|pentiumpro__|native_______|cor e2
QCC2.95.3_|1.242409882_|____________|1.259607250_|___________|
QCC3.3.5__|1.198816553 _|1.109230261_|1.196416920_|____________|
gcc4.1.3___|1.123428089_|1.074235616_|1.0216436 64_|____________|
gcc4.2.4___|1.112229802_|1.067436657_|1.059637850_|0.903061810_|
gcc4. 3.2___|1.325797122_|1.026642899_|0.915459913_|0.898662483_|0.898062575
gcc4.4.0___|1.3585 92103_|1.013044980_|0.930057679_|0.921059056_|0.921259025
=============================== ===============================================
gcc4.2.4___|1.112229802
gcc4.4.0___|____ _______|1.013044980
gcc4.3.2___|___________|____________|0.915459913
gcc4.3.2___|_______ ____|____________|____________|0.898662483      
gcc4.3.2___|___________|____________|____________|___________|0.898062575

Если это плох то рпрошу удалить это сообщение.
bogdan
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #3 : Июля 09, 2008, 05:51:46 pm »

Так как я писал представляю результаты тестов другой программы. На http://www.stefankrause.net/wp/?p=9 появились интересные результаты тестов которые хотя не относайась к QNX думаю очень интересны. Там я нашол ссылку на : http://accc.riken.jp/HPC/HimenoBMT/index_e.html. Делая опыты с тестами с этой страницы я столькнулся с очень интересными резултатами.
Тестовая программа himenoBMTxp.c показывает что самые лучшие результаты получаються с компилятором qcc -V3.3.5,gcc_ntox86. В дпугих тестах этого не видно но мне заинтересовалось почнму так получаеться. Можеть оффицялный компилятор QNX V3.3.5 отличаеться от компилятора gcc лучшей оптимализацей. Поэтому я построил компилятор i386-pc-nto-qnx6.3.0-gcc-3.3.6. Сорсы я взял с www.qnx.com. И вот результаты:
Программа работаеть так. Сначяла проводиться цикл 3 раза чтобы вычислить сколько циклов нада на одну минуту. И патом происходит выполнение полученного количеста повторени. Сравниваеться время выполнения в секундах.
335 => qcc -V3.3.5,gcc_ntox86
336 => i386-pc-nto-qnx6.3.0-gcc-3.3.6

335 -O0  MFLOPS:  334.726067 time(s): 1.228812 1.733593e-03  
         MFLOPS measured :  339.939774   cpu : 58.884989 : Loop executed for 146 times
336 -O0  MFLOPS:  334.998687 time(s): 1.227812 1.733593e-03
         MFLOPS measured :  340.303801   cpu : 58.821999 : Loop executed for 146 times

335 -O1  MFLOPS: 1235.366896 time(s): 0.332950 1.693779e-03
         MFLOPS measured : 1320.566117  cpu : 56.064420  : Loop executed for 540 times
336 -O1  MFLOPS: 1231.671327 time(s): 0.333949 1.693779e-03
         MFLOPS measured : 1305.478599   cpu : 56.607338 : Loop executed for 539 times
   
335 -O2  MFLOPS: 1297.721447 time(s): 0.316952 1.693779e-03
         MFLOPS measured : 1393.028784  cpu : 55.805460  : Loop executed for 567 times
336 -O2  MFLOPS: 1281.552038 time(s): 0.320951 1.693779e-03
         MFLOPS measured : 1394.013450  cpu : 55.077572  : Loop executed for 560 times

335 -O3  MFLOPS: 1301.828784 time(s): 0.315952 1.693779e-03
         MFLOPS measured : 1392.901306  cpu : 56.007430  : Loop executed for 569 times   
336 -O3  MFLOPS: 1289.588081 time(s): 0.318951 1.693779e-03
         MFLOPS measured : 1393.824299  cpu : 55.478511  : Loop executed for 564 times
   
335 Opt  MFLOPS: 1357.682711 time(s): 0.302954 1.733593e-03
         MFLOPS measured : 1472.901268  cpu : 55.292539  : Loop executed for 594 times
336 Opt  MFLOPS: 1357.687192 time(s): 0.302953 1.733593e-03
         MFLOPS measured : 1473.194294  cpu : 55.281541  : Loop executed for 594 times
===============================
Как видно оба компиляторы не очень отличаються друг от друга.
А как выглядять компиляторы gcc 4.2 и gcc 4.3 ?
Я показываю самые лучшые результаты.
компиляторы gcc4.2.4, gcc 4.3.2 и qcc -V4.2.3,gcc_ntox86 который доступен на http://community.qnx.com/sf/frs/do/viewSummary/projects.toolchain/frs
Opt => -O3 -DMIDDLE -msse2 -march=pentiumpro -mtune=pentiumpro
       -mfpmath=387 -funroll-loops -fomit-frame-pointer

./bmt4.3.2Opt
Opt  MFLOPS: 1028.445358 time(s): 0.399939 1.733593e-03
     MFLOPS measured : 1088.014687  cpu : 56.706322  : Loop executed for 450 times
./bmt4.3.2native
    -O3 -DMIDDLE -msse2 -march=native -mtune=native -mfpmath=sse -funroll-loops
       -fomit-frame-pointer -ffast-math -fstrict-aliasing -fwhole-program
       
Opt  MFLOPS: 1145.900926 time(s): 0.358945 1.733593e-03
     MFLOPS measured : 1212.648636  cpu : 56.644333  : Loop executed for 501 times

./bmt4.2.4Opt
Opt  MFLOPS: 1123.984566 time(s): 0.365944 1.733593e-03
     MFLOPS measured : 1205.186047  cpu : 55.857452  : Loop executed for 491 times
./bmt4.2.4native
     MFLOPS: 1142.717382 time(s): 0.359945 1.733593e-03
     MFLOPS measured : 1209.310335  cpu : 56.687325  : Loop executed for 500 times

./bmt_qcc4.2.3opt  => qcc -V4.2.3,gcc_ntox86
Opt  MFLOPS: 1133.272005 time(s): 0.362945 1.733593e-03
     MFLOPS measured : 1204.760784  cpu : 56.332380  : Loop executed for 495 times
================================
Видно что для компиляторв QNX 3.3.5 и 3.3.6 хватит толко само -O1 и резултаты лучше. Правда я не проверял компилятора gcc3.3.5 а только версии для QNX. Былобы интересно. Все таки в чем примушество qcc -V3.3.5,gcc_ntox86. Можеть кто то найдеть время и сделает проверку на Линух. У меня на крмпютере нет линуха.
bogdan
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #4 : Августа 19, 2008, 02:28:14 pm »

В связи с появлением QNX 6.4 вопрос в этой теме думаю практически уходить в прошлое по крайней для QCC2.95.3 и QCC3.3.5

What's new: Compiler and tools
We've updated gcc to version 4.2. We no longer ship versions 2.95.3 or 3.3.5. (Ref# 54006)
Записан
bbceler
Full Member
***
Offline Offline

Сообщений: 149


Просмотр профиля WWW
« Ответ #5 : Февраля 22, 2009, 03:00:52 pm »

Я перестаю заниматься этими вопросами. Тепер работаю только с компилятором gcc-4.4.0
Так что нет возможности сравнить разные версии компилятора 
Записан
Страниц: [1]
  Печать  
 
Перейти в: