реклама на сайте
подробности

 
 
> Make, ускорение процесса сборки проектов
demiurg_spb
сообщение Aug 21 2012, 17:25
Сообщение #1


неотягощённый злом
******

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



Сегодня попробовал задать мейку во сколько потоков ему работать, т.к. у меня в системе видятся 4 ядра (1+HT)*2 то я задал 4:
Код
make -j 4 all

Результат: проект собрался ровно в 2 раза быстрее!

Спешу поделиться своей радостью со всеми:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Aug 23 2012, 20:40
Сообщение #2


фанат дивана
******

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



Цитата(Petka @ Aug 24 2012, 01:39) *
Про определённый порядок выполнения зависимостей нигде никогда ничего не гарантировалось.

Пока не появился ключик -j - вполне себе гарантировалосьsm.gif
Цитата(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 цели. Между ними (после них) вполне можно было поставить точки следования.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Petka
сообщение Aug 24 2012, 07:05
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(AHTOXA @ Aug 24 2012, 00:40) *
Пока не появился ключик -j - вполне себе гарантировалосьsm.gif

После этого утверждения была бы уместна ссылка на документацию какой-то определённой версии make. С подтверждением этого смелого утверждения.
Цитата
Нет. В моём примере (build: clean all) - как раз-таки ничего не собиралось. Ибо сначала выполнялась цель all, а потом - clean. В результате после выполнения make build - никакого elf-а не было.
...

В этом примере для цели build необходимо удовлетворение двух взаимоисключающих подцелей. Вы так построили сценарий для make. При чём тут инструмент?
Мне вся эта ситуация напоминает появление процессоров с "Hyper-threading". Тогда программисты не были готовы к настоящему параллельному выполнению потоков и отсутствие всяких "spin_lock" приводило к непредсказуемым результатам.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 24 2012, 08:03
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 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) - кривой. Уж сколько времени я им пользуюсь, а ощущение кривизны не проходит, а только усиливается.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 28 2012, 13:34
Сообщение #5


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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 примерах и вбросил изменения в репозиторий.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 10 2012, 10:21
Сообщение #6


Начинающий профессионал
*****

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



Цитата(ReAl @ Aug 28 2012, 17:34) *
Код
build:
    $(MAKE) clean
    $(MAKE)

Скажите, пожалуйста, в чем смысл в цели build _всегда_ делать clean? Если меняется код только в одном файле, то компилировать надо только его, а линковать всё, но в этом случае пересобирается весь проект. Время сборки увеличивается.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 10 2012, 11:28
Сообщение #7


фанат дивана
******

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



Цитата(mdmitry @ Sep 10 2012, 16:21) *
Скажите, пожалуйста, в чем смысл в цели build _всегда_ делать clean?

Потому что цель такая - полная пересборка. Для выборочной пересборки, о которой вы говорите, есть цель all.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 10 2012, 17:40
Сообщение #8


Начинающий профессионал
*****

Группа: Свой
Сообщений: 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. На мой взгляд логично исходя из названия целей.
Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе?


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 11 2012, 02:26
Сообщение #9


Нечётный пользователь.
******

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



Цитата(mdmitry @ Sep 10 2012, 20:40) *
Цитата из makefile_template для Winavr
...
Мне понятно, что цель build является частью общей цели all. На мой взгляд логично исходя из названия целей.
Скажите, пожалуйста, какие причины причины побудили Вас сделать иначе?
"иначе" -- это цель, которую можно было бы назвать rebuild («Потому что цель такая - полная пересборка.») назвать все-таки build ?
Ну, например, потому, что человек считает простой вызов make -- так, по дороге отладочным.
А вот когда нужно сделать build программы (пишут же «XXX version YYY build ZZZ» а не «rebuild ZZZ»), то тогда и вызывается make build.

Впрочем, я сам больше склоняюсь к имени rebuild :-)

Кстати, по поводу make clean all и -j. Code::Blocks по кнопке «пересобрать» сам последовательно запускает make clean и make, поэтому ничего и не вылазит :-)

Цитата(Дмитриос @ Sep 11 2012, 01:37) *
Мне кажется существенным выгрышем по сборке было бы использование чего нить такого, что не заставляет пересобирать ВЕСЬ проект.
А никто тут и не пересобирает ВЕСЬ проект при каждом изменении одной буквы в листовом файле проекта. Это так, в нескольких сообщениях обсуждается название цели, которая используется для (выделенной в отдельную цель, нечастой, осознанно вызываемой) полной пересборки.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 15:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016