Udostępnij za pośrednictwem


/MP (kompilacja z wieloma procesami)

/MP Opcji może zmniejszyć całkowity czas do kompilowania plików źródłowych w wierszu polecenia./MP Opcji powoduje, że kompilator utworzyć jedną lub więcej kopii samego siebie, każdy w oddzielnym procesie.Następnie te kopie jednocześnie kompilowania plików źródłowych.W związku z tym całkowity czas tworzenia plików źródłowych może być znacznie zmniejszona.

/MP[processMax]

Argumenty

  • processMax
    (Opcjonalnie) Maksymalna liczba procesów, które kompilator może utworzyć.

    processMax Argument musi z zakresu od 1 do 65536.W przeciwnym wypadku kompilator generuje ostrzeżenie D9014, ignoruje processMax argument i przyjęto założenie, maksymalna liczba procesów wynosi 1.

    Jeżeli pominięto parametr processMax argument, kompilator pobiera numer procesorów skuteczne na komputerze z systemem operacyjnym i tworzy proces dla każdego procesora.

Uwagi

/MP Opcję kompilatora mogą znacznie zmniejszyć czas kompilacji kompilacji wiele plików.Aby skrócić czas kompilacji, kompilator utworzy do processMax kopie samego siebie, a następnie używa tych kopii do kompilowania plików źródłowych w tym samym czasie./MP Opcja ma zastosowanie do kompilacji, ale nie do łączenia lub łącze czas generowania kodu.Domyślnie /MP opcja jest wyłączona.

Poprawa w czasie kompilacji zależy od liczby procesorów w komputerze, liczbę plików, aby skompilować i dostępność zasobów systemowych, takich jak zdolności We/Wy.Eksperymentuj z /MP opcję, aby określić najlepsze ustawienie do konstruowania konkretnego projektu.Aby uzyskać porady ułatwiające podjęcie decyzji, zobacz wytycznych.

Niezgodne opcje i funkcje języka

/MP Opcji jest niezgodna z niektóre opcje kompilatora i funkcje języka.Jeśli używasz opcji kompilatora niezgodne z /MP opcji, kompilator generuje ostrzeżenie D9030 i ignoruje /MP opcji.Jeśli funkcja niezgodne języka kompilator generuje błąd C2813, a następnie kończy się lub w dalszym ciągu w zależności od bieżącej kompilator ostrzeżenia opcję poziomu.

[!UWAGA]

Większość opcji są niezgodne, ponieważ jeśli były one dopuszczone, równolegle wykonywany kompilatory zapisałaby ich produkcji w tym samym czasie do konsoli lub do określonego pliku.W wyniku tego dane wyjściowe byłoby intermix i być zniekształcony.W niektórych przypadkach kombinacja opcji spowodowałoby gorszej wydajności.

W poniższej tabeli przedstawiono opcje kompilatora i funkcje języka, które są niezgodne z /MP opcji:

Opcja lub funkcja języka

Opis

#Import dyrektywy preprocesora

Konwertuje typy w bibliotece typów klas C++, a następnie zapisuje te klasy w pliku nagłówka.

/E, /EP

Kopiuje dane wyjściowe preprocesora do wyjścia standardowego (stdout).

/GM

Umożliwia Odbuduj przyrostowych.

/showIncludes

Zapisuje listy plików dołączanych do błędu standardowego (stderr).

/Yc

Zapisuje plik nagłówkowy wstępnie skompilowana.

Diagnostyczne wiadomości

Po określeniu opcji lub język funkcji, która jest niezgodna z /MP opcji, zostanie wyświetlony komunikat diagnostyczny.W poniższej tabeli wymieniono komunikaty i zachowanie kompilatora:

Komunikat diagnostyczny

Opis

Zachowanie kompilatora

C2813

#import Dyrektywy nie jest zgodny z /MP opcji.

Kompilacja zakończy się, chyba że poziom ostrzeżeń kompilatora opcja określi inaczej.

D9014

Określono nieprawidłową wartość dla processMax argument.

Kompilator ignoruje nieprawidłową wartość i przyjmuje wartość 1.

D9030

Podana opcja jest niezgodna z /MP.

Kompilator ignoruje /MP opcji.

Wytyczne

Bb385193.collapse_all(pl-pl,VS.110).gifŚrodek wydajności

Za pomocą build całkowity czas pomiaru wydajności.Można zmierzyć czas kompilacji z zegarem fizycznych, lub można użyć oprogramowania, który oblicza różnicę między podczas kompilacji uruchamia i zatrzymuje.Jeśli komputer ma wiele procesorów, fizyczne zegara może uzysk bardziej dokładne wyniki niż pomiaru czasu oprogramowania.

Bb385193.collapse_all(pl-pl,VS.110).gifSkuteczne procesorów

Komputer może mieć jeden lub więcej procesorów wirtualnych, które nazywane są również skuteczne procesorów, dla każdego z jej procesorów fizycznych.Każdy procesor fizyczny może mieć jeden lub więcej rdzeni i jeśli system operacyjny umożliwia hyperthreading dla rdzenia, każdego rdzenia wiertniczego wydaje się być dwa procesory wirtualne.

Na przykład komputer ma jeden procesor skuteczne, jeśli jeden procesor fizyczny, który ma jeden rdzeń i wpis hyperthreading jest wyłączona.Natomiast komputer ma osiem procesorów skuteczne, jeśli ma dwóch fizycznych procesorów, z których każda ma dwa rdzenie, i wszystkie rdzenie zostały włączone hyperthreading.Oznacza to, że (8 procesorów skuteczne) = (2 procesory fizyczny) x (2 rdzenie przypadających na jeden procesor fizyczny) x (2 procesory skuteczne na podstawowe z powodu hyperthreading).

Jeżeli pominięto parametr processMax argument w /MP opcji, kompilator uzyskuje liczbę procesorów skutecznego systemu operacyjnego i następnie tworzy jeden proces dla każdego procesora skuteczne.Jednak kompilator nie może zagwarantować, który proces wykonuje na określonego procesora; Decyzja ta sprawia, że system operacyjny.

Bb385193.collapse_all(pl-pl,VS.110).gifLiczba procesów

Kompilator oblicza liczbę procesów, które będą używane do kompilowania plików źródłowych.Wartość jest w mniejszym liczbie plików źródłowych, które określają w wierszu polecenia i liczba procesów można jawnie lub niejawnie określić z /MP opcji.Jawnie można ustawić maksymalną liczbę procesów, jeśli podasz processMax argumentu /MP opcji.Lub można użyć domyślnej, która jest równa liczbie procesorów skuteczne w komputerze, jeśli pominięto processMax argument.

Załóżmy na przykład, określ następujący wiersz polecenia:

cl /MP7 a.cpp b.cpp c.cpp d.cpp e.cpp

W tym przypadku kompilator używa pięć procesów, ponieważ jest to mniejszym pięć plików źródłowych i maksymalnie siedem procesów.Alternatywnie Załóżmy, że komputer ma dwa procesory skuteczne i określ następujący wiersz polecenia:

cl /MP a.cpp b.cpp c.cpp

W takim przypadku system operacyjny raporty dwa procesory; w związku z tym kompilator wykorzystuje dwa procesy w obliczeniu.W związku z powyższym kompilator będzie wykonywał kompilacji z dwoma procesami, ponieważ jest to mniejszą z dwóch procesów i trzy pliki źródłowe.

Bb385193.collapse_all(pl-pl,VS.110).gifPliki źródłowe i zamówienie

Pliki źródłowe nie może być zestawiane w takiej samej kolejności, w jakiej pojawiają się w wierszu polecenia.Mimo, że kompilator tworzy zestaw procesów, które zawierają kopie kompilator, system operacyjny planuje gdy wykonuje każdego procesu.W konsekwencji nie może zagwarantować, że pliki źródłowe będą kompilowane w określonej kolejności.

Plik źródłowy jest kompilowane, gdy proces jest dostępne go skompilować.Jeśli ma więcej plików niż procesy, pierwszy zestaw plików jest kompilowana przez dostępne procesy.Pozostałe pliki są przetwarzane, gdy proces kończy obsługi poprzedniego pliku i jest dostępny do pracy na jeden z pozostałych plików.

Nie określaj tego samego pliku źródłowego, wiele razy w wierszu polecenia.Taka sytuacja może wystąpić, jeśli, na przykład, jeśli narzędzie automatycznie tworzy makefile jest oparty na informacji o zależnościach w projekcie.Jeśli nie określisz /MP opcji, kompilator przetwarza kolejno listę plików i ponownie skompilował każdego wystąpienia pliku.Jednakże jeśli zostanie określony /MP opcji, różnych kompilatory może skompilować ten sam plik w tym samym czasie.W konsekwencji różnych kompilatory podejmie próbę zapisu do tego samego pliku wyjściowego, w tym samym czasie.Jeden kompilator będzie wyłączny dostęp do pliku wyjściowego zapisu nabycia i powiodła się i inne kompilatory zakończy się niepowodzeniem z błędem dostępu do pliku.

Bb385193.collapse_all(pl-pl,VS.110).gifPrzy użyciu biblioteki typów (#import)

Kompilator nie obsługuje korzystania z #import w dyrektywie z /MP przełączyć.Jeśli to możliwe wykonaj następujące kroki w celu obejścia tego problemu:

  • Przenieś wszystkie #import dyrektyw w swoje różne plików do jednego lub więcej plików źródłowych, a następnie kompilować te pliki bez /MP opcji.Wynik jest zestawem plików generowanych nagłówka.

  • W pozostałe pliki źródłowe, Wstaw # include dyrektyw, które określają generowanych nagłówki i następnie kompilować pozostałe pliki źródłowe, korzystając z /MP opcji.

Bb385193.collapse_all(pl-pl,VS.110).gifVisual Studio projekt ustawienia

Bb385193.collapse_all(pl-pl,VS.110).gifNarzędzie MSBUILD.exe

Visual Studioużywa MSBuild.exe narzędzia do budowania rozwiązania i projektów.**/maxcpucount:**number (Lub **/m:**number) Opcja wiersza polecenia narzędzia MSBuild.exe można tworzyć wiele projektów, w tym samym czasie.I /MP opcję kompilatora można tworzyć wiele jednostek kompilacji w tym samym czasie.Jeśli właściwe dla aplikacji jest zwiększyć czas kompilacji rozwiązania przy użyciu jednej lub obu /MP i /maxcpucount.

Czas kompilacji rozwiązania zależy częściowo liczbę procesów, które wykonują kompilacja.number Argumentu /maxcpucount MSBuild opcja określa maksymalną liczbę projektów do utworzenia w tym samym czasie.Podobnie processMax argumentu /MP opcję kompilatora określa maksymalną liczbę jednostek kompilacji do konstruowania w tym samym czasie.Jeśli /maxcpucount określa opcja p projektów oraz /MP określa opcja c procesy, maksymalnie pxc wykonywanie procesów, w tym samym czasie.

Wytyczne do decydowania, czy używać MSBuild lub /MP technologia jest w następujący sposób:

  • Jeśli istnieje wiele projektów z kilku plików w każdym projekcie, użyj MSBuild narzędzia.

  • Jeśli istnieje kilka projektów z wielu plików w każdym projekcie, użyj /MP opcji.

  • Jeśli liczba projektów i pliki według projektu jest zrównoważony, korzystanie z obu MSBuild i /MP.Początkowo ustawiona jako /maxcpucount opcję, aby liczby projektów do konstruowania i /MP opcji do liczby procesorów na komputerze.Pomiaru wydajności, a następnie dostosować ustawienia, aby uzyskać najlepsze wyniki.Powtórz ten cykl, dopóki nie zostaną spełnione w czasie kompilacji razem.

Bb385193.collapse_all(pl-pl,VS.110).gif/Gm opcję kompilatora

Domyślnie projekt zbudować umożliwia /Gm opcję kompilatora (przyrostowe kompilacje) do debugowania i wyłącza dopuszczenia buduje.W związku z tym /MP opcję kompilatora jest automatycznie wyłączana w debugowania, ponieważ jest w konflikcie z domyślnymi /Gm opcję kompilatora.

Zobacz też

Informacje

#Import dyrektywy (C++)

Informacje w wierszu polecenia programu MSBuild