MS VS 200{5|8} и параллельная компиляция одного проекта
От: DillerXX  
Дата: 14.02.08 17:27
Оценка:
Бывает ли сабж? По логике, раз уж компилятор как-то может скомпилировать проект с циклическими ссылками, то по этому же графу, который он строит, снизу вверх можно запустить ещё один поток комиляции. Я думаю, брать ли себе Athlon 6000+ двуядерный, на решение повляет ответ на сабж, всё-таки достаточно важный вопрос.
Re: MS VS 200{5|8} и параллельная компиляция одного проекта
От: Uzumaki Naruto Ниоткуда  
Дата: 14.02.08 17:42
Оценка:
Бывает. Давно смотрел — встречал сторонние тулзы — сейчас уже не помню. Если я не ошибаюсь в 2008 было заявлено, что он умеет это делать в самой студии, хотя думаю как обычно криво.

Re: MS VS 200{5|8} и параллельная компиляция одного проекта
От: remark Россия http://www.1024cores.net/
Дата: 14.02.08 17:54
Оценка: 6 (1)
Здравствуйте, DillerXX, Вы писали:

DXX>Бывает ли сабж? По логике, раз уж компилятор как-то может скомпилировать проект с циклическими ссылками, то по этому же графу, который он строит, снизу вверх можно запустить ещё один поток комиляции. Я думаю, брать ли себе Athlon 6000+ двуядерный, на решение повляет ответ на сабж, всё-таки достаточно важный вопрос.


Они умеют распараллеливать только на уровне проектов. Т.е. один cl.exe компилирует один проект, одновременно второй компилирует второй проект. Если проектов много, то всё хорошо. Если проект один, то ничего не выйдет.

Настраивается: Tools -> Options -> Projects and Solutions -> Build And Run -> Maximum number of parallel project builds
Задать можно любое число, т.е. можешь попробовать уже сейчас.

В 2005 были глюки, если выходные файлы компиляции проектов расположены в одном каталоге. В 2008 пока не понял, есть глюки или нет.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: MS VS 200{5|8} и параллельная компиляция одного проек
От: bnk СССР http://unmanagedvisio.com/
Дата: 14.02.08 18:15
Оценка: 10 (2)
Здравствуйте, remark, Вы писали:

R>Они умеют распараллеливать только на уровне проектов. Т.е. один cl.exe компилирует один проект, одновременно второй компилирует второй проект. Если проектов много, то всё хорошо. Если проект один, то ничего не выйдет.


2008 умеет компилировать и один проект в несколько потоков тоже.
MSDN: /MP switch
Re[3]: MS VS 200{5|8} и параллельная компиляция одного проек
От: remark Россия http://www.1024cores.net/
Дата: 14.02.08 19:35
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Здравствуйте, remark, Вы писали:


R>>Они умеют распараллеливать только на уровне проектов. Т.е. один cl.exe компилирует один проект, одновременно второй компилирует второй проект. Если проектов много, то всё хорошо. Если проект один, то ничего не выйдет.


bnk>2008 умеет компилировать и один проект в несколько потоков тоже.

bnk>MSDN: /MP switch


Проверил — действительно работает.
Причём работает параллельно с распараллеливанием на уровне проектов. Т.е. одновременно распараллеливается и так и так.

Но немного смутило это:

The following table lists compiler options and language features that are incompatible with the /MP option:

#import preprocessor directive
Converts the types in a type library into C++ classes, and then writes those classes to a header file.

/E, /EP
Copies preprocessor output to the standard output (stdout).

/Gm
Enables an incremental rebuild.

/showIncludes
Writes a list of include files to the standard error (stderr).

/Yc
Writes a precompiled header file.


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


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[4]: MS VS 200{5|8} и параллельная компиляция одного проек
От: DillerXX  
Дата: 15.02.08 16:10
Оценка:
Здравствуйте, remark, Вы писали:

R>Т.е. отладочные сборки не распараллеливаются, т.к. стоит инкрементальная сборка. Распараллеливаются только релизные сборки


А что, нельзя отрубить инкрементальную сборку и отрубить оптимизацию?
Re[5]: MS VS 200{5|8} и параллельная компиляция одного проек
От: remark Россия http://www.1024cores.net/
Дата: 15.02.08 16:13
Оценка:
Здравствуйте, DillerXX, Вы писали:

DXX>Здравствуйте, remark, Вы писали:


R>>Т.е. отладочные сборки не распараллеливаются, т.к. стоит инкрементальная сборка. Распараллеливаются только релизные сборки


DXX>А что, нельзя отрубить инкрементальную сборку и отрубить оптимизацию?


Можно. Но это называется — шило на мыло...


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[6]: MS VS 200{5|8} и параллельная компиляция одного проек
От: DillerXX  
Дата: 15.02.08 18:32
Оценка:
Здравствуйте, remark, Вы писали:

R>Здравствуйте, DillerXX, Вы писали:


DXX>>Здравствуйте, remark, Вы писали:


R>>>Т.е. отладочные сборки не распараллеливаются, т.к. стоит инкрементальная сборка. Распараллеливаются только релизные сборки


DXX>>А что, нельзя отрубить инкрементальную сборку и отрубить оптимизацию?


R>Можно. Но это называется — шило на мыло...



Почему? Стадия линковки будет проходить дольше?
Re[7]: MS VS 200{5|8} и параллельная компиляция одного проек
От: remark Россия http://www.1024cores.net/
Дата: 15.02.08 18:41
Оценка:
Здравствуйте, DillerXX, Вы писали:

DXX>Здравствуйте, remark, Вы писали:


R>>Здравствуйте, DillerXX, Вы писали:


DXX>>>Здравствуйте, remark, Вы писали:


R>>>>Т.е. отладочные сборки не распараллеливаются, т.к. стоит инкрементальная сборка. Распараллеливаются только релизные сборки


DXX>>>А что, нельзя отрубить инкрементальную сборку и отрубить оптимизацию?


R>>Можно. Но это называется — шило на мыло...


DXX>Почему? Стадия линковки будет проходить дольше?


Речь не о инкрементальной линковке, речь о инкрементальной компиляции. Т.е. весь процесс компиляции будет дольше.
Т.е. что бы сделать процесс компиляции быстрее (параллельный), надо вначале сделать его медленнее (отключить инкрементальную компиляцию)



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.