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

 
 
> 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

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


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

 


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


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