|
Make, ускорение процесса сборки проектов |
|
|
|
Aug 21 2012, 17:25
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Сегодня попробовал задать мейку во сколько потоков ему работать, т.к. у меня в системе видятся 4 ядра (1+HT)*2 то я задал 4: Код make -j 4 all Результат: проект собрался ровно в 2 раза быстрее! Спешу поделиться своей радостью со всеми:-)
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
 |
Ответов
|
Aug 23 2012, 20:40
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Petka @ Aug 24 2012, 01:39)  Про определённый порядок выполнения зависимостей нигде никогда ничего не гарантировалось. Пока не появился ключик -j - вполне себе гарантировалось  Цитата(Petka @ Aug 24 2012, 01:39)  Всё что вы просили выполнить в вашем makefile для цели all будет добросовестно выполнено. Вывод на экран сообщений был? Размер выводился? elf собирался? При любом ключе -j ? Нет. В моём примере (build: clean all) - как раз-таки ничего не собиралось. Ибо сначала выполнялась цель all, а потом - clean. В результате после выполнения make build - никакого elf-а не было. Цитата(ReAl @ Aug 24 2012, 01:28)  «Ага, щас»™ В результате для Код %.elf : $(OBJS) между файлкми из $(OBJS) будет по точке следования и -j N идёт лесом. Параллельно их создавать будет нельзя. Так я про PHONY цели. Между ними (после них) вполне можно было поставить точки следования.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 24 2012, 07:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(AHTOXA @ Aug 24 2012, 00:40)  Пока не появился ключик -j - вполне себе гарантировалось  После этого утверждения была бы уместна ссылка на документацию какой-то определённой версии make. С подтверждением этого смелого утверждения. Цитата Нет. В моём примере (build: clean all) - как раз-таки ничего не собиралось. Ибо сначала выполнялась цель all, а потом - clean. В результате после выполнения make build - никакого elf-а не было. ... В этом примере для цели build необходимо удовлетворение двух взаимоисключающих подцелей. Вы так построили сценарий для make. При чём тут инструмент? Мне вся эта ситуация напоминает появление процессоров с "Hyper-threading". Тогда программисты не были готовы к настоящему параллельному выполнению потоков и отсутствие всяких "spin_lock" приводило к непредсказуемым результатам.
|
|
|
|
|
Aug 24 2012, 08:03
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Petka @ Aug 24 2012, 13:05)  После этого утверждения была бы уместна ссылка на документацию какой-то определённой версии make. С подтверждением этого смелого утверждения. Это совершенно очевидно. Один поток - цели выполняются последовательно. Цитата(Petka @ Aug 24 2012, 13:05)  В этом примере для цели build необходимо удовлетворение двух взаимоисключающих подцелей. Вы так построили сценарий для make. При чём тут инструмент? Не взаимоисключающих, а последовательных. Без -j всё работает как задумано. Если бы при добавлении ключика -j ввели точки следования после каждой из PHONY-целей, то всё бы работало и с -j. Я считаю это большой глупостью авторов make. Короче, вы меня не переубедите. Инструмент этот (make) - кривой. Уж сколько времени я им пользуюсь, а ощущение кривизны не проходит, а только усиливается.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 28 2012, 13:34
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(AHTOXA @ Aug 24 2012, 11:03)  Я считаю это большой глупостью авторов make. Вот что-то мне в этой фразе не понравилось :-) Это 50% пинка, вся остальная тема — ещё 50% Всем спасибо, пинок застаивл еще раз заглянуть в документацию :-) Код .NOTPARALLEL: start dirs clean reset OK :-( Тьху, не оно :-( Разница во времени на мелком проекте небольшая и линкеовка с LTO занимает около половины, без LTO и с time стало хорошо видно, что полностью. отрубается параллельность. Ну и не дочитался сразу, что зависимости к этой цели по барабану, главное, что она есть в Makefile. Ну, значит, нужен feature request на .SEQUENTIAL и доброволец на реализацию :-) Всё равно было полезно поговорить :-) сlean я делаю отдельно вручную. Но прошёлся по более-менее актуальным для себя Makefile, в одном старом было rebuild, в нескольких других (все в примерах scmRTOS) цель build. Заменил на уже предложенное мной Код build: $(MAKE) clean $(MAKE) В том числе во всех CortexM3/GCC примерах и вбросил изменения в репозиторий.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Sep 10 2012, 10:21
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(ReAl @ Aug 28 2012, 17:34)  Код build: $(MAKE) clean $(MAKE) Скажите, пожалуйста, в чем смысл в цели build _всегда_ делать clean? Если меняется код только в одном файле, то компилировать надо только его, а линковать всё, но в этом случае пересобирается весь проект. Время сборки увеличивается.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Sep 10 2012, 17:40
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(AHTOXA @ Sep 10 2012, 15:28)  Потому что цель такая - полная пересборка. Для выборочной пересборки, о которой вы говорите, есть цель all. Цитата из makefile_template для Winavr Код # Default target. all: begin gccversion sizebefore build sizeafter end
# Change the build target to build a HEX file or a library. build: elf hex eep lss sym #build: lib Мне понятно, что цель build является частью общей цели all. На мой взгляд логично исходя из названия целей. Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе?
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
Сообщений в этой теме
demiurg_spb Make Aug 21 2012, 17:25 klen Разделяем Вашу радость
если задать число более че... Aug 21 2012, 19:15 demiurg_spb Спасибо за наводку!
Проверил, у меня видимо не... Aug 21 2012, 19:39  ReAl Цитата(demiurg_spb @ Aug 21 2012, 22:39) ... Aug 22 2012, 12:25   AHTOXA Цитата(ReAl @ Aug 22 2012, 18:25) Если на... Aug 22 2012, 15:44    demiurg_spb Цитата(ReAl @ Aug 22 2012, 16:25) Из окру... Aug 22 2012, 20:14     AHTOXA Цитата(demiurg_spb @ Aug 23 2012, 02:14) ... Aug 23 2012, 05:11    ReAl Цитата(AHTOXA @ Aug 22 2012, 18:44) У мен... Aug 23 2012, 06:50     AHTOXA Да, наверняка всё так и есть. Но мне это не нравит... Aug 23 2012, 07:53      Petka Цитата(AHTOXA @ Aug 23 2012, 11:53) Да, н... Aug 23 2012, 08:52       AHTOXA Цитата(Petka @ Aug 23 2012, 14:52) Баналь... Aug 23 2012, 10:28        Petka Цитата(AHTOXA @ Aug 23 2012, 14:28) Ой ли... Aug 23 2012, 12:55         AHTOXA Цитата(Petka @ Aug 23 2012, 18:55) Это не... Aug 23 2012, 17:33          ReAl Цитата(AHTOXA @ Aug 23 2012, 20:33) А теп... Aug 23 2012, 19:28          Petka Цитата(AHTOXA @ Aug 23 2012, 21:33) Хорош... Aug 23 2012, 19:39      ReAl Цитата(AHTOXA @ Aug 23 2012, 10:53) Кодal... Aug 23 2012, 14:11    alx2 Цитата(AHTOXA @ Aug 22 2012, 20:44) У мен... Aug 24 2012, 04:38 IgorKossak Попробовал подобным образом сделать ребилд, т. е.
... Aug 22 2012, 06:42 _Pasha Цитата(IgorKossak @ Aug 22 2012, 09:42)
... Aug 22 2012, 07:14 DmitryM eCos по умолчанию собирается -j 4 Aug 22 2012, 19:10 IgorKossak AHTOXA
+1
Любую переделку мейкфайлов считаю мовето... Aug 23 2012, 08:02   Petka Цитата(AHTOXA @ Aug 24 2012, 12:03) Это с... Aug 24 2012, 13:14   alx2 Цитата(AHTOXA @ Aug 24 2012, 13:03) Это с... Aug 27 2012, 05:32    AHTOXA Цитата(alx2 @ Aug 27 2012, 11:32) Вы гово... Aug 27 2012, 06:01    AHTOXA Цитата(ReAl @ Aug 28 2012, 19:34) Тьху, н... Aug 28 2012, 15:32       ReAl Цитата(mdmitry @ Sep 10 2012, 20:40) Цита... Sep 11 2012, 02:26 e-serg Цитата(AHTOXA @ Aug 24 2012, 04:40) Пока ... Aug 28 2012, 03:46  AHTOXA И? Это вы к чему? Aug 28 2012, 04:28   e-serg Цитата(AHTOXA @ Aug 28 2012, 13:28) И? Эт... Aug 28 2012, 05:30    AHTOXA Цитата(e-serg @ Aug 28 2012, 11:30) ... Aug 28 2012, 06:01 MBR Где-то в гентушных факах рекомендовалось устанавли... Sep 4 2012, 07:35 Дмитриос Мне кажется существенным выгрышем по сборке было б... Sep 10 2012, 22:37 AHTOXA Цитата(mdmitry @ Sep 10 2012, 23:40) Код#... Sep 11 2012, 02:46 mdmitry Цитата(AHTOXA @ Sep 11 2012, 06:46) Как м... Sep 11 2012, 07:13 MBR я тоже плюсую за all и clean. Причем, не забываем ... Sep 12 2012, 06:32 AHTOXA all и clean и так есть. Речь про
Кодbuild: cle... Sep 12 2012, 08:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|