Mam duży plik programu Visual Studio 2010 (.sln
), który zawiera dużą liczbę projektów (~50
). Każdy projekt składa się z około 20
.cpp
i .h
plików. Budowa całego projektu zajmuje około 2 godzin na szybkim komputerze z procesorem Intel i7, a wszystkie zależności są buforowane lokalnie na szybkim dysku SSD.MSBuild - Jak zbudować wiele plików I projektów równolegle
Ja próbuje replicate an existing experiment I found on this topic i potrzebują wyjaśnienia, w jaki sposób:
- Pobierz Zrównoleglanie szukam pracy w Visual Studio (z GUI/IDE).
- Te zmiany działają również ze zautomatyzowanymi wersjami wiersza polecenia za pośrednictwem
MSBuild.exe
.
Po pierwsze, czy opcje /m
i /maxcpucount
są takie same? Mam read an article on the /m
option,, który wydaje się równolegle budować więcej projektów projektów. Wydaje się, że taką samą opcję I ustawić za pomocą następujących działań w GUI:
- Narzędzia
- opcje
- projekty i rozwiązania
- zbudować i uruchomić
Maximum number of parallel project builds
Nie ma innej opcji, /MP
, co mogę osiągnąć w GUI poprzez:
- Projekty
- Properties
- Właściwości konfiguracyjne
- C/C++
- Ogólne
Multi-processor Compilation
Proszę, popraw mnie, jeśli się mylę, ale to sugeruje, że projekt będzie budował równolegle wiele plików .cpp
, ale nie ma opcji określenia liczby, chyba że muszę ręcznie ustawić ją w polu tekstowym (np. : /MP 4
lub /MP4
.
Wydaje się również, że aby działał /MP
, należy wyłączyć minimalną odbudowę (np. Enabled Minimal Rebuild: No (/GM-)
), a także nie działa ze wstępnie skompilowanymi nagłówkami. Pracowałem nad wstępnie skompilowanym zagadnieniem nagłówków, dzięki temu, że prekompilowane nagłówki były dedykowanym projektem, który najpierw buduje rozwiązanie, przed wszystkimi innymi projektami.
Na pytanie: W jaki sposób mogę zaimplementować te opcje dla równoległych kompilacji projektów w ramach rozwiązania, a plik równoległy (.cpp
) buduje w ramach projektów, używając MSBuild za pomocą wiersza poleceń, i potwierdza, że działają zgodnie z oczekiwaniami? Czy moje założenia powyżej również są prawidłowe? Moim końcowym celem jest przetestowanie budowania projektu aż do całkowitej liczby rdzeni będących w użyciu, lub nawet przeładowanie go, jeśli mój proces budowania jest związany z I/O, a nie z procesorem. mogę to zrobić dość łatwo w Linuksie poprzez:
NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
NUMJOBS="$(echo "$NUMCPUS*1.5" | bc)"
NUMJOBS="$(printf '%.0f' $NUMJOBS)"
alias pmake='time nice make -j$NUMJOBS'
Pozwala mi to na moim 8-rdzeniowego komputera kolejce 12 Zadania kompilacji na raz, a make
automatycznie buduje do 12 .cpp
plików równolegle, obsługa niejawnych reguł kompilacji/zależności itp. Próbuję osiągnąć to samo w Visual Studio Professional i MSBuild. Kiedy moje kompilacje są związane z I/O, to podejście było najlepsze w utrzymywaniu wszystkich rdzeni przy użyciu ~100%
.
Dziękuję.
* Proszę mnie poprawić jeśli się mylę na tym * od szybkiego spojrzenia na to, co się tutaj dzieje, masz rację.Dzięki tym opcjom zarówno VS, jak i msbuild, budują wiele projektów w tym samym czasie (w zależności od zależności) i spawnują wiele procesów kompilacji dla każdego z tych projektów. Zauważ również, że dziennik będzie zawierał liczby dla każdego projektu, ponieważ rzeczy się teraz przeplatały. Jeśli naprawdę zależy Ci na czasach kompilacji, będziesz musiał wypróbować kilka kombinacji i zobaczyć, który z nich działa najlepiej na twoim komputerze. – stijn
@stijn Dziękuję. Czy możesz potwierdzić, że opcje '/ m' i'/MP' są różne, czy są takie same? Próbuję skonfigurować kompilacje, aby budować 4 projekty w jednym rozwiązaniu, a każdy projekt próbuje skompilować 4 pliki '.ppp'. Byłoby to 16 'ci.exe' budowane równolegle na maszynie 8-rdzeniowej, ale zakładam, że ze względu na charakter zadań związany z I/O, zwiększenie liczby zadań powinno pomóc w utrzymaniu większej liczby procesorów przy 100%. – DevNull
Te opcje są bardzo różne -/MP jest dla kompilacji C++,/m dla msbuild. Pomyśl o tym w ten sposób: msbuild może również budować projekty C# lub niestandardowe projekty dowolnego języka./MP jest tylko dla C++, więc nawet jeśli nie używasz msbuild, ale cl.exe bezpośrednio, nadal działa. – stijn