|
параллельная компиляция в EW IAR |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 30)
|
Nov 6 2014, 16:49
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 24-11-07
Пользователь №: 32 633

|
Есть галочка "C/C++ Compiler -> Language 1 -> Multi-file Compilation", но она точно не использует все ядра и применение у неё немного другое. Не уверен, что у IAR компилятор многопоточность поддерживает.
--------------------
Если друг оказался вдруг и не друг и не враг, а - JTAG.
|
|
|
|
|
Nov 7 2014, 03:43
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(AlexandrY @ Nov 7 2014, 01:30)  У IAR автоматом происходит распараллеливание. Более того он даже индексацию исходников делает в параллельных процессах и делает ее постоянно в фоне. Так что не надо даже парится с какими-то опциями. Все уже турбировано.  Чего-то не заметно. диспетчере задачь во воремя компиляции не загружены все ядра.... в QtCreator также всё компилиться, на глаз, по очереди. Но включая распаралеливание видно как по 4 файла за раз компиляться и выхлоп компилятора бешенный... текст только мелькает, не успеваю даже прочитать даже слово.... по времени примерно в 4 раза быстрее на всех ядрах чем на 1. а от куда инфа, что в иаре всё распараллелено? пруф? может в какойнить последней версии это уже встроенно.... ps проэксперементировал ..... ноут 4-х ядерный, винда кажет 8 ядер. запускаю компиляцию на разном кол-ве ядер.... на 1 ядре время компиляции проекта 25 сек. на 2-х время 25 сек. 4 - 15 сек, 6 - 15 сек, 8 - 15 сек чегото не очен уж турбированно
|
|
|
|
|
Nov 7 2014, 07:39
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(juvf @ Nov 7 2014, 05:43)  в QtCreator также всё компилиться, на глаз, по очереди. Но включая распаралеливание видно как по 4 файла за раз компиляться и выхлоп компилятора бешенный... текст только мелькает, не успеваю даже прочитать даже слово.... по времени примерно в 4 раза быстрее на всех ядрах чем на 1. Не успеваете прочитать потому что, по видимому, пустые файлы компилируете. Уберите массовые инклуды из файлов, сделайте уровень оптимизации у IAR как у GCC и он также быстро будет компилировать.  У меня компиляция занимает считанные проценты процессорного времени. На кой спрашивается это распараллеливать если даже один процессор не загружается полностью? Все время уходит видимо на перемалывание файлов.
|
|
|
|
|
Nov 7 2014, 11:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(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, я хочу чтоб иар параллельно компилял задействовав все ядра процессора.
|
|
|
|
|
Nov 7 2014, 12:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(Aner @ Nov 7 2014, 16:39)  Думается что на ваше ХОЧУ ... чтоб иар параллельно компилил задействовав все ядра процессора. IARу нужно "пояснять" как это делать. почему такая агрессия? в make 100 лет уж как распараллелили компиляцию. и я им ни чего не "пояснял". у иара есть такое или нет? Цитата И порой это проблема пользования IAR на процах с несколькими ядрами. Чаще под много ядерные процы пишут и отлаживаются на ОС, нежели на компиляторах. чего? ........ хотите сказать что это ос должна распаралелить компиляцию? возможно и так. но если в иар одном потоке компилит все исходники поочереди, то врятли ос чегото распаралелит. если компилить исходники в разных потоках, то тут ос может рапаралелить..... имхо. но кабы не было в make это включается и отключается. и это заметно. в иаре.... как-то не заметно. вот я и спросил - как это включается в иаре? что тут криминального? Цитата Напишите makefile для иара, и будет параллельно. а разве у иара есть мэйкфайл? на сколько мне известно makefile — сценарий сборки для процедуры make, являющейся неотъемлемой частью любого GCC-тулчейна. ps ну что за народ? ну если кто знает что ТАКОЕ есть а иаре, скажите - "нужно галочку там то поставить". Если кто-то ТОЧНО знает что такого нет, скажите - такого нет. Ну почему нужно на пустом месте холивар устроить, нужно ТС показать что ТС есть чмо, раз такие вопросы задает, а мы, "модераторы" и атцы форума есть боги. И что ТС нисшая форма. Вот по теме не знают.... но надо что-то же ляпнуть.... Цитата(Xenia @ Nov 7 2014, 17:08)  Интересно, если IAR станет параллельно несколько модулей компилить, то варнинги в перемешку будут сыпаться?  ну это не моя фантастическая идея. в gcc же это есть. был бы я автором компилятора, а бы копилировал один исходник.... и собирал бы весь вывод в std::string. после окончания компиляции захавтывал бы мютекс на cout, делал бы вывод и освобождал бы мютекс. варнинги и ошибки высапятся вперемешку... но сгруперованы от каждого файла вместе. это имхо. как это делают в make - не знаю, но они это делают.
|
|
|
|
|
Nov 7 2014, 14:04
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(AHTOXA @ Nov 7 2014, 17:35)  Компилятор iar - это точто такая же утилита командной строки, как и компилятор gcc. Так что всё очень просто - напишите мейкфайл, который вызывает нужный вам компилятор. Кстати, где-то в форуме такие проскакивали. Проблема будет только в том, что IDE IAR-а не умеет запускать make. Так что придётся как-то выкручиваться. Например, эклипсой. ээээ.... ну чото костыльный метод какойто... может оно и взлетит... но думаю овчинка не стоит выделки. Если нет такой опции в иаре, то и не надо. Цитата Я думаю вам надо разобраться в собственном проекте 'в креаторе'. Что это за креатор, сколько у вас там файлов, сколько либ, что за оптимизация, какая линковка и проч. зачем разбираться в проекте? у меня нет проблемы в кривом прокте, я просто хочу распаралелить компиляцию. Вы мой проект не видели - уже окрестили что в нём что-то не так. 55 секунд на одном ядре - что тут не так? OpenOficce компилялся помню на одном ядре пару дней. Вот допустим есть у вас проект. Вы соптимизировали исходники, настроили оптимизацию, выжили из всего этого максимум. Код получился труъ! В учебники его. Такой код компиляется к примеру 1 день/час/минуту. Какойнить нуб написал бы подобный код который компилялся бы 1,5 дня/часа/минут. Вы молодец!!! Но, можно ещё ускорить процесс компиляции, можно заставить параллельно компилировать сразу несколько исходников на разных ядрах процессора, тем самым сократив время компиляции и ваш труъ-проект скомпиляться на этом же компе например за 0,3 дня/часа/минут. в make такая фича есть. вот и был вопрос - есть ли такая фича в иаре? Цитата Что это за креатор такойЦитата Хотите подробных ответов задавайте подробные вопросы. какие подобные? чем мой вопрос не устроил? Спросил колегу "Ты не помнишь как распараллелить компиляцию в gcc?", в ответ "Эээээ.... вроде в -j в мэйке". Про иар спросил на форуме... что не так? 2Xeniaкстати.... можно компилировать не то что параллельно на всех ядрах процессора, но и параллельно на нескольких компах в локальной сети. Канеш иару это точно не нужно, но запараллелить на одном камне былобы неплохо.
|
|
|
|
|
Nov 7 2014, 14:11
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(juvf @ Nov 7 2014, 17:04)  ээээ.... ну чото костыльный метод какойто... может оно и взлетит... но думаю овчинка не стоит выделки. В каком смысле "может взлетит"? У меня давным-давно летает. Овчинка выделки стоит. Но это зависит от овчинки, конечно, я с вашей не знаком. Цитата(juvf @ Nov 7 2014, 17:04)  в make такая фича есть. вот и был вопрос - есть ли такая фича в иаре? Нет.
|
|
|
|
|
Nov 7 2014, 19:03
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(juvf @ Nov 7 2014, 16:04)  Но, можно ещё ускорить процесс компиляции, можно заставить параллельно компилировать сразу несколько исходников на разных ядрах процессора, тем самым сократив время компиляции и ваш труъ-проект скомпиляться на этом же компе например за 0,3 дня/часа/минут.
в make такая фича есть. вот и был вопрос - есть ли такая фича в иаре? Так крутой сжатый код с перекретно-модульной отимизацией и получается после мультифайловой компиляции. C make это не получится. По крайней мере в эклипсе (где по видимому используется make) у IAR-а не получилось. Так что надо думать быстрота компиляции оборачивается неоптимальностью кода в результате. Потом все таки надо корректно сравнивать. Сравнивать надо по времени весь процесс сборки и для длинных процессов раз уж заговорили о длинных компиляциях. А то может быть и линковка очень длинной. Скажем так: 584 файла IAR собираются в один HEX за 1 мин 30 сек без включенной оптимизации. Сколько времени make c GCC потратит на приблизительно такое же количество файлов? То что IAR делает многопоточную компиляцию можете увидеть в любом логе процессов. В том же Total Commander.
|
|
|
|
|
Nov 8 2014, 11:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(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.
|
|
|
|
|
Nov 8 2014, 20:40
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(AlexandrY @ Nov 8 2014, 22:53)  Вот оно: "время линковки 10 сек." А в IAR-е после 500 файлов линковка длится менее секунды. Поймете почему, может поймете и остальное.
Штатный менеджер процессов слишком медленный, используйте тулз сохраняющий историю процессов. да гонишь что ли?  я же говорю ДОПУСТИМ, я просто объяснил принцип приимущества параллельной компиляции.... ну давайте по другому..... ДОПУСТИМ есть проект из 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 сек? это без всяких тулз видно. Цитата Поймете почему, может поймете и остальное. Что почему? Что я должен понять, и что тут понимать остальное? Я понял только одно - вы троль!!! Цитата Хотите подробных ответов задавайте подробные вопросы. какие такие? вы модер или троль? Ответьте на вопрос - что не так с моим вопросом?
|
|
|
|
|
May 21 2015, 04:56
|
Группа: Новичок
Сообщений: 4
Регистрация: 5-02-13
Из: Санкт-Петербург
Пользователь №: 75 498

|
https://youtu.be/I5w3YyERbWg - "Using pararell build in IAR Embedded Workbench". Похоже что появилась возможность распараллелить компиляцию
|
|
|
|
|
May 21 2015, 13:32
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
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 потоках, о чудо, проходит. Но нафиг-нафиг такие "чудеса"!
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|