Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: параллельная компиляция в EW IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
juvf
вопрос в теме. как настроить эту фичу в IDE EW IAR? для gcc нужно make -j4, а как в идэ иар это настроить? где в окошках прописать количество ядер?
PheeL
Есть галочка "C/C++ Compiler -> Language 1 -> Multi-file Compilation", но она точно не использует все ядра и применение у неё немного другое. Не уверен, что у IAR компилятор многопоточность поддерживает.
juvf
это не то
Цитата
Multi-file Compilation
Enables multi-file compilation from the group of project files that you have selected in
the workspace window.
You can use this option for the entire project or for individual groups of files. All C/C++
source files in such a group are compiled together using one invocation of the compiler.
This means that all files included in the selected group are compiled using the compiler
options which have been set on the group or nearest higher enclosing node which has
any options set. Any overriding compiler options on one or more files are ignored when
building, because a group compilation must use exactly one set of options.
Xenia
А зачем вообще компилировать параллельно? sm.gif
Пусть бы даже у процессора было 100 ядер. Что мешает компилировать задачи/потоки для каждого ядра последовательно? Ведь компиляция это не исполнение, требующее одновременной работы ядер, в всего лишь превращение текста на языке программирования в загрузочный код.
juvf
Цитата
А зачем вообще компилировать параллельно?
чтоб время копиляции сократить.
AlexandrY
Цитата(juvf @ Nov 6 2014, 22:07) *
чтоб время копиляции сократить.


У IAR автоматом происходит распараллеливание.
Более того он даже индексацию исходников делает в параллельных процессах и делает ее постоянно в фоне.

Так что не надо даже парится с какими-то опциями. Все уже турбировано. wink.gif
juvf
Цитата(AlexandrY @ Nov 7 2014, 01:30) *
У IAR автоматом происходит распараллеливание.
Более того он даже индексацию исходников делает в параллельных процессах и делает ее постоянно в фоне.

Так что не надо даже парится с какими-то опциями. Все уже турбировано. wink.gif

Чего-то не заметно. диспетчере задачь во воремя компиляции не загружены все ядра....

в QtCreator также всё компилиться, на глаз, по очереди. Но включая распаралеливание видно как по 4 файла за раз компиляться и выхлоп компилятора бешенный... текст только мелькает, не успеваю даже прочитать даже слово.... по времени примерно в 4 раза быстрее на всех ядрах чем на 1.

а от куда инфа, что в иаре всё распараллелено? пруф? может в какойнить последней версии это уже встроенно....


ps проэксперементировал ..... ноут 4-х ядерный, винда кажет 8 ядер.
запускаю компиляцию на разном кол-ве ядер....
на 1 ядре время компиляции проекта 25 сек.
на 2-х время 25 сек.
4 - 15 сек,
6 - 15 сек,
8 - 15 сек

чегото не очен уж турбированно
AlexandrY
Цитата(juvf @ Nov 7 2014, 05:43) *
в QtCreator также всё компилиться, на глаз, по очереди. Но включая распаралеливание видно как по 4 файла за раз компиляться и выхлоп компилятора бешенный... текст только мелькает, не успеваю даже прочитать даже слово.... по времени примерно в 4 раза быстрее на всех ядрах чем на 1.


Не успеваете прочитать потому что, по видимому, пустые файлы компилируете.

Уберите массовые инклуды из файлов, сделайте уровень оптимизации у IAR как у GCC и он также быстро будет компилировать. wink.gif

У меня компиляция занимает считанные проценты процессорного времени.
На кой спрашивается это распараллеливать если даже один процессор не загружается полностью?

Все время уходит видимо на перемалывание файлов.
juvf
Цитата(AlexandrY @ Nov 7 2014, 12:39) *
Не успеваете прочитать потому что, по видимому, пустые файлы компилируете.

не пустые... да даже если и пустые.... на одном ядре успеваю прочитать... тотже проект на 4-х не успеваю..... да и время компиляции на 4-х ядрах (с опцией -j) в креаторе 17 секунд, на одном ядре тотже проект в креаторе с темиже уровнями оптимизации (только без опции -j) 55 секунд.
давайте не будем спорить что make -j работает или не работает в креаторе. у make есть такая опция.
Цитата
-j [jobs], --jobs[=jobs]
Specifies the number of jobs (commands) to run simultaneously. If there is more than one -j option, the last one is effective. If the -j option is given without an argument, make will not limit the number of jobs that can run simultaneously.
вопрос - есть ли у иара такая опция?

я не хочу чтоб иар компилял также быстро как gcc, я хочу чтоб иар параллельно компилял задействовав все ядра процессора.
AHTOXA
Цитата(juvf @ Nov 7 2014, 16:29) *
я не хочу чтоб иар компилял также быстро как gcc, я хочу чтоб иар параллельно компилял задействовав все ядра процессора.

Напишите makefile для иара, и будет параллельно.
Aner
Думается что на ваше ХОЧУ ... чтоб иар параллельно компилил задействовав все ядра процессора. IARу нужно "пояснять" как это делать. И порой это проблема пользования IAR на процах с несколькими ядрами. Чаще под много ядерные процы пишут и отлаживаются на ОС, нежели на компиляторах.
Xenia
Интересно, если IAR станет параллельно несколько модулей компилить, то варнинги в перемешку будут сыпаться? sm.gif
juvf
Цитата(Aner @ Nov 7 2014, 16:39) *
Думается что на ваше ХОЧУ ... чтоб иар параллельно компилил задействовав все ядра процессора. IARу нужно "пояснять" как это делать.

почему такая агрессия? в make 100 лет уж как распараллелили компиляцию. и я им ни чего не "пояснял". у иара есть такое или нет?

Цитата
И порой это проблема пользования IAR на процах с несколькими ядрами. Чаще под много ядерные процы пишут и отлаживаются на ОС, нежели на компиляторах.
чего? ........ хотите сказать что это ос должна распаралелить компиляцию? возможно и так. но если в иар одном потоке компилит все исходники поочереди, то врятли ос чегото распаралелит. если компилить исходники в разных потоках, то тут ос может рапаралелить..... имхо. но кабы не было в make это включается и отключается. и это заметно. в иаре.... как-то не заметно. вот я и спросил - как это включается в иаре? что тут криминального?

Цитата
Напишите makefile для иара, и будет параллельно.
а разве у иара есть мэйкфайл? на сколько мне известно makefile — сценарий сборки для процедуры make, являющейся неотъемлемой частью любого GCC-тулчейна.



ps ну что за народ? ну если кто знает что ТАКОЕ есть а иаре, скажите - "нужно галочку там то поставить". Если кто-то ТОЧНО знает что такого нет, скажите - такого нет. Ну почему нужно на пустом месте холивар устроить, нужно ТС показать что ТС есть чмо, раз такие вопросы задает, а мы, "модераторы" и атцы форума есть боги. И что ТС нисшая форма. Вот по теме не знают.... но надо что-то же ляпнуть....

Цитата(Xenia @ Nov 7 2014, 17:08) *
Интересно, если IAR станет параллельно несколько модулей компилить, то варнинги в перемешку будут сыпаться? sm.gif

ну это не моя фантастическая идея. в gcc же это есть. был бы я автором компилятора, а бы копилировал один исходник.... и собирал бы весь вывод в std::string. после окончания компиляции захавтывал бы мютекс на cout, делал бы вывод и освобождал бы мютекс. варнинги и ошибки высапятся вперемешку... но сгруперованы от каждого файла вместе. это имхо.

как это делают в make - не знаю, но они это делают.
scifi
Цитата(juvf @ Nov 7 2014, 15:16) *
а разве у иара есть мэйкфайл? на сколько мне известно makefile — сценарий сборки для процедуры make, являющейся неотъемлемой частью любого GCC-тулчейна.

А кто мешает сделать make неотъемлемой частью яровского тулчейна? :-)
Опять же появится гибкость в процессе сборки, что зачастую полезно.
Кстати, я бы на месте этих яров не изобретал велосипед, а просто незаметно вызывал бы make.
AHTOXA
Цитата(juvf @ Nov 7 2014, 17:21) *
а разве у иара есть мэйкфайл? на сколько мне известно makefile — сценарий сборки для процедуры make, являющейся неотъемлемой частью любого GCC-тулчейна.

Компилятор iar - это точто такая же утилита командной строки, как и компилятор gcc. Так что всё очень просто - напишите мейкфайл, который вызывает нужный вам компилятор. Кстати, где-то в форуме такие проскакивали.
Проблема будет только в том, что IDE IAR-а не умеет запускать make. Так что придётся как-то выкручиваться. Например, эклипсой.
AlexandrY
Цитата(juvf @ Nov 7 2014, 13:29) *
да и время компиляции на 4-х ядрах (с опцией -j) в креаторе 17 секунд, на одном ядре тотже проект в креаторе с темиже уровнями оптимизации (только без опции -j) 55 секунд.


Я думаю вам надо разобраться в собственном проекте 'в креаторе'.
Что это за креатор, сколько у вас там файлов, сколько либ, что за оптимизация, какая линковка и проч.

Хотите подробных ответов задавайте подробные вопросы.
juvf
Цитата(AHTOXA @ Nov 7 2014, 17:35) *
Компилятор iar - это точто такая же утилита командной строки, как и компилятор gcc. Так что всё очень просто - напишите мейкфайл, который вызывает нужный вам компилятор. Кстати, где-то в форуме такие проскакивали.
Проблема будет только в том, что IDE IAR-а не умеет запускать make. Так что придётся как-то выкручиваться. Например, эклипсой.

ээээ.... ну чото костыльный метод какойто... может оно и взлетит... но думаю овчинка не стоит выделки. Если нет такой опции в иаре, то и не надо.

Цитата
Я думаю вам надо разобраться в собственном проекте 'в креаторе'.
Что это за креатор, сколько у вас там файлов, сколько либ, что за оптимизация, какая линковка и проч.
зачем разбираться в проекте? у меня нет проблемы в кривом прокте, я просто хочу распаралелить компиляцию. Вы мой проект не видели - уже окрестили что в нём что-то не так. 55 секунд на одном ядре - что тут не так? OpenOficce компилялся помню на одном ядре пару дней.
Вот допустим есть у вас проект. Вы соптимизировали исходники, настроили оптимизацию, выжили из всего этого максимум. Код получился труъ! В учебники его. Такой код компиляется к примеру 1 день/час/минуту. Какойнить нуб написал бы подобный код который компилялся бы 1,5 дня/часа/минут. Вы молодец!!! Но, можно ещё ускорить процесс компиляции, можно заставить параллельно компилировать сразу несколько исходников на разных ядрах процессора, тем самым сократив время компиляции и ваш труъ-проект скомпиляться на этом же компе например за 0,3 дня/часа/минут.

в make такая фича есть. вот и был вопрос - есть ли такая фича в иаре?

Цитата
Что это за креатор
такой

Цитата
Хотите подробных ответов задавайте подробные вопросы.
какие подобные? чем мой вопрос не устроил? Спросил колегу "Ты не помнишь как распараллелить компиляцию в gcc?", в ответ "Эээээ.... вроде в -j в мэйке". Про иар спросил на форуме... что не так?


2Xeniaкстати.... можно компилировать не то что параллельно на всех ядрах процессора, но и параллельно на нескольких компах в локальной сети. Канеш иару это точно не нужно, но запараллелить на одном камне былобы неплохо.
scifi
Цитата(juvf @ Nov 7 2014, 17:04) *
ээээ.... ну чото костыльный метод какойто... может оно и взлетит... но думаю овчинка не стоит выделки.

В каком смысле "может взлетит"? У меня давным-давно летает. Овчинка выделки стоит. Но это зависит от овчинки, конечно, я с вашей не знаком.

Цитата(juvf @ Nov 7 2014, 17:04) *
в make такая фича есть. вот и был вопрос - есть ли такая фича в иаре?

Нет.
juvf
Цитата(scifi @ Nov 7 2014, 19:11) *
У меня давным-давно летает.
c эклипсом? или пуре иар?
scifi
Цитата(juvf @ Nov 7 2014, 19:57) *
c эклипсом? или пуре иар?

У меня давно сложилась привычка сборку делать через make + [некий компилятор], редактирование исходников через Source Insight (шикарный редактор, яровский - унылое гамно), отладку - тем, что удобнее (яр, кейл). Компилятор обычно gcc или яр.
Кстати, у яровского комилятора есть ключик для генерации файла зависимостей, что явно заточено под make.
AHTOXA
Цитата(scifi @ Nov 7 2014, 22:13) *
У меня давно сложилась привычка сборку делать через make + [некий компилятор], редактирование исходников через Source Insight

У меня то же самое, но редактирование через Eclipse sm.gif
Кстати, вот же, например, тема про IAR + makefile.
AlexandrY
Цитата(juvf @ Nov 7 2014, 16:04) *
Но, можно ещё ускорить процесс компиляции, можно заставить параллельно компилировать сразу несколько исходников на разных ядрах процессора, тем самым сократив время компиляции и ваш труъ-проект скомпиляться на этом же компе например за 0,3 дня/часа/минут.

в make такая фича есть. вот и был вопрос - есть ли такая фича в иаре?


Так крутой сжатый код с перекретно-модульной отимизацией и получается после мультифайловой компиляции.
C make это не получится. По крайней мере в эклипсе (где по видимому используется make) у IAR-а не получилось.

Так что надо думать быстрота компиляции оборачивается неоптимальностью кода в результате.

Потом все таки надо корректно сравнивать.
Сравнивать надо по времени весь процесс сборки и для длинных процессов раз уж заговорили о длинных компиляциях.
А то может быть и линковка очень длинной.

Скажем так: 584 файла IAR собираются в один HEX за 1 мин 30 сек без включенной оптимизации.
Сколько времени make c GCC потратит на приблизительно такое же количество файлов?

То что IAR делает многопоточную компиляцию можете увидеть в любом логе процессов.
В том же Total Commander.
juvf
Цитата(AlexandrY @ Nov 8 2014, 00:03) *
Так что надо думать быстрота компиляции оборачивается неоптимальностью кода в результате.
бред! Скомпилируйте один и тотже проект с одинаковыми настройками проект на компе с процессором i7 и на компе с Athlon 2000+, который работает с сетевым диском через на GPRS-е...... На i7 время может составить 30 секунд, а на атлоне 30 минут. Время разное, но в результате исполняемый код получиться 1в1.

Вы вообще понимаете о чем речь в этом посте? О параллельной компиляции! Причем тут оптимизация компилятора и разбор в собственном проeкте?

спешал4ю, напальцах....

Допустим есть проект из 4-х исходных файлов. время компиляции каждого файла на отдельно взятой машине будет
file1.cpp - 17 сек
file2.cpp - 21 сек
file3.cpp - 15 сек
file4.cpp - 19 сек
время линковки 10 сек.
Если компилировать на 1 ядре общее время компиляции будет 17+21+15+19+10=72

если заставить компилятор компилить на 2-х ядрах параллельно, то одновременно будут компилироваться файлы file1.cpp и file2.cpp, затем file3.cpp и file4.cpp, после линковка. Итого общее время сборки будет 21+19+10=50 сек.
если заставить компилятор компилить на 4-х ядрах, то одновременно будут компилироваться сразу 4 файла, после линкока. Итого общее время сборки будет 21+10=31 сек. PROFIT 41 секунда
в з-х случаях разная скорость компиляции. Как скорость компиляции повлияет на результат, на конечный исполняемый файл? Как параллельная компиляция обернётся неоптимальностью кода в результате?

Цитата
Скажем так: 584 файла IAR собираются в один HEX за 1 мин 30 сек без включенной оптимизации.
Сколько времени make c GCC потратит на приблизительно такое же количество файлов?
почему вы пытаетесь сравнить скорость сборки гсс против иар? Зачем? Откройте отдельную тему IAR vs GCC мерийтесь писка.... я говорю что make может распаралелить компиляцию, а как это в иаре сделать? может ли такое иар? Да - да, нет - нет.

Цитата
То что IAR делает многопоточную компиляцию можете увидеть в любом логе процессов.
В том же Total Commander.
Нету тотала. в виндовом диспетчере задач с иаром это не видно, с make и gcc это видно.
Да и отключения ядер от иара особо не влияет на скорость: 2, 3 или 4 ядра - время одинаковое. А в диспетчере задач появляется только один процесс iccarm.
AlexandrY
Цитата(juvf @ Nov 8 2014, 13:16) *
Допустим есть проект из 4-х исходных файлов. время компиляции каждого файла на отдельно взятой машине будет
file1.cpp - 17 сек
file2.cpp - 21 сек
file3.cpp - 15 сек
file4.cpp - 19 сек
время линковки 10 сек.
Если компилировать на 1 ядре общее время компиляции будет 17+21+15+19+10=72


Вот оно: "время линковки 10 сек."
А в IAR-е после 500 файлов линковка длится менее секунды. Поймете почему, может поймете и остальное.

Штатный менеджер процессов слишком медленный, используйте тулз сохраняющий историю процессов.
juvf
Цитата(AlexandrY @ Nov 8 2014, 22:53) *
Вот оно: "время линковки 10 сек."
А в IAR-е после 500 файлов линковка длится менее секунды. Поймете почему, может поймете и остальное.

Штатный менеджер процессов слишком медленный, используйте тулз сохраняющий историю процессов.

да гонишь что ли? biggrin.gif я же говорю ДОПУСТИМ, я просто объяснил принцип приимущества параллельной компиляции....
ну давайте по другому.....
ДОПУСТИМ есть проект из 4-х исходных файлов. время компиляции каждого файла на отдельно взятой машине будет
file1.cpp - 17 условных интервалов времени
file2.cpp - 21
file3.cpp - 15
file4.cpp - 19
время линковки 10 условных интервалов времени.
Если компилировать на 1 ядре общее время компиляции будет 17+21+15+19+10=72 условных интервалов времени. И?
Реальный проект далеко не из 4-х файлов, и имена у них не file*.cpp. Про реальный проект я писал... 17 против 55 секунд.

а если так... ДОПУСТИМ проект из 400 файлов. время компиляции первой сотни фалов 17, второй сотни 21, 3-ей 15 и четвертой 19 условных ед. времени. линковка длиться 1 условный интервал времени (не условных ед времени, а условный интервал). .... Да и вообще, выкиньте линковку из этого примера.... при паралельной компиляции выйгриш от компиляции... линковка столько же будет идти.

Цитата
используйте тулз сохраняющий историю процессов.
да и причем процессы? почему в иаре на 2-х ядрах проект собирается 15 сек, а на 4-х ядрах 15 сек? это без всяких тулз видно.

Цитата
Поймете почему, может поймете и остальное.
Что почему? Что я должен понять, и что тут понимать остальное? Я понял только одно - вы троль!!!

Цитата
Хотите подробных ответов задавайте подробные вопросы.
какие такие? вы модер или троль? Ответьте на вопрос - что не так с моим вопросом?
scifi
Молодой человек, у вас шнурок развязался гормон играет :-)
kolobok0
Цитата(juvf @ Nov 6 2014, 19:29) *
вопрос в теме. как настроить эту фичу...


кстати вопрос не совсем коррктен. есть паралельная компиляция файлов и параллельная сборка солюшена (если брать терминологию мелкомягких).

полный профит и то и то заюзать. у мелкомягких именно такой подход...


zloe_morkoffko
https://youtu.be/I5w3YyERbWg - "Using pararell build in IAR Embedded Workbench". Похоже что появилась возможность распараллелить компиляцию
zltigo
QUOTE (zloe_morkoffko @ May 21 2015, 07:56) *
https://youtu.be/I5w3YyERbWg - "Using pararell build in IAR Embedded Workbench". Похоже что появилась возможность распараллелить компиляцию

Таки да. Работает. Подсунул иаровскому мейку V7.2.1.3693 ключик -parallel 4 (все 8 ядер не стал) - пресборка проекта в разы ускорилась. Компиляция с генерацией полных листингов и ASM файлов.
Правда весь проект пересобирать постоянно ни нафиг нет дурной привычки, но пусть будет...
Мультифайловая компиляция не использовалась. Если активировать мультифайловую, то традиционная сборка в одном потоке ломается (знаю почему, так и должно быть), а в 4 потоках, о чудо, проходит. Но нафиг-нафиг такие "чудеса"!
RCray
Поэтому все, кто тут охал ахал про отсутсвие выигрыша, а также зачем это вообще надо вед это "всего лишь превращение текста на языке программирования в загрузочный код", нещадно тролили автора тoпика 2 страницы.

До этого я пользовался make'ом. Ну а сейчас уже получается - без надобности.
zltigo
QUOTE (RCray @ Aug 3 2015, 04:57) *
Поэтому все, кто тут охал ахал про отсутсвие выигрыша, а также зачем это вообще надо.......

1)Выигрыш есть.
2)Зачем это надо - заметно быстрее пресобирается весь проект.
3)Только вот зачем нужно пересобирать сколь-нибудь часто весь проект, это отдельный "вопрос" sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.