QNX RTP Logo QNX Realtime Platform: Русский Портал QNX
Sunday, 7 Sep 2008 05:43
Меню

Проект OpenNET - все о Unix
Главная

 · Начало · Статистика · Поиск ·

  QNX.ORG.RU —› Языки и алгоритмы —› GCC - проблема выбора версии и оптимизация

Посл.ответ Сообщение


Дата: 4 Июл,  17:13

GCC - проблема выбора версии и оптимизация


Дата: 4 Июл,  19:03

Так как я писал в теме ады предлагаю начать новую тему связанную с проблемой выбора версии компилятора 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
Я намерываюсь провести иследования на других тестах. Но все таки думаю что и эти результаты показывають какую важную роль играеть провилный выпор компилятора и опции компиляции.


Дата: 4 Июл,  20:03

К сожалении не хорошо вышли саммые данны. Я послал пост тоже на 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


Дата: 9 Июл,  14:51

Так как я писал представляю результаты тестов другой программы. На 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


Дата: 19 Авг,  11:28

В связи с появлением 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)

You must login to post.

©   2000-2003 Команда проекта QNX.ORG.RU // QNX.ORG.RU Team
Авторы проекта: Дмитрий Алексеев [dmi] и Дмитрий Васильев. Техническое сопровождение проекта: Игорь Сорокин [isorokin]. Информационное сопровождение: Дмитрий Алексеев [dmi]
QNX - зарегистрированная торговая марка QNX Software Systems, Ltd., Canada. Остальные упоминаемые на сайте торговые марки и логотипы являются исключительно собственностью их уважаемых владельцев. Ничьи права не затронуты. Материалы сайта не могут быть скопированы и где-либо использованы в той или иной форме без письменного разрешения разработчиков сайта.
Powered by Mambo Open Source