Sdílet prostřednictvím


/MP (sestavení pomocí několika procesů)

/MP Možnost může snížit celkový čas kompilace zdrojových souborů na příkazovém řádku./MP Způsobí, že kompilátor vytvoří jednu nebo více kopií sebe sama, každé v samostatném procesu.Tyto kopie současně zkompilujte zdrojové soubory.V důsledku toho se podstatně sníží celkový čas vytvoření zdrojové soubory.

/MP[processMax]

Arguments

  • processMax
    (Volitelné) Maximální počet procesů, které vytváří kompilátor.

    processMax Argument musí být v rozsahu 1 až 65536.V opačném případě se vydá upozornění D9014, ignoruje processMax argument a předpokládá maximální počet procesů je 1.

    Pokud vynecháte processMax argument, kompilátor použije číslo účinné procesorů vašeho počítače z operačního systému a vytvoří proces pro každý procesor.

Poznámky

/MP Možnost kompilátoru můžete výrazně snížit čas sestavení při kompilaci mnoho souborů.Ke zlepšení okamžiku sestavení, kompilátor vytvoří až processMax kopie sebe sama a potom použije tyto kopie kompilace zdrojových souborů současně./MP Možnost platí pro kompilace, ale nikoli k propojení nebo propojení čas generování kódu.Ve výchozím nastavení /MP možnost je vypnuta.

Zlepšení v okamžiku sestavení závisí na počet procesorů v počítači, počet souborů pro kompilaci a dostupnost systémových prostředků, jako jsou například vstupně-výstupní kapacitou.Vyzkoušet /MP možnost určit nejlepší nastavení pro vytvoření konkrétního projektu.Doporučení, která pomohou učinit rozhodnutí, viz pokyny.

Nekompatibilní možnosti a funkce jazyka

/MP Možnost je nekompatibilní s některými možnosti kompilátoru a funkcí jazyka.Pokud použijete možnost kompilátoru není kompatibilní s /MP možnost, vydá varování D9030 a ignoruje /MP možnost.Pokud použijete funkci nekompatibilním jazyce, kompilátor vydává chybu C2813pak končí a pokračuje v závislosti na aktuální volbu úroveň upozornění kompilátoru.

[!POZNÁMKA]

Většina možností nejsou kompatibilní, protože pokud by byly povoleny, souběžně vykonávaných kompilátory by současně na konzolu nebo do konkrétního souboru zapisovat výstup.V důsledku toho výstup by kombinovat a být zdeformované.V některých případech by vytvořit kombinací možností nejhorší výkon.

Následující tabulka uvádí možnosti kompilátoru a vlastnosti jazyka, které jsou neslučitelné /MP možnosti:

Možnost nebo funkce jazyka

Popis

#import direktivy preprocesoru

Převede typ v knihovně typů třídy jazyka C++ a poté zapíše do souboru hlaviček těchto tříd.

/E, /EP

Zkopíruje preprocesoru výstup do standardního výstupu (stdout).

/Gm

Umožňuje přírůstkového sestavení.

/showIncludes

Zapíše seznam souborů zahrnout standardní chyby (stderr).

/Yc

Zapíše soubor předkompilované hlavičky.

Diagnostické zprávy

Pokud zadáte funkce možnost nebo jazyk, který není kompatibilní se /MP možnost zobrazí diagnostickou zprávu.V následující tabulce jsou uvedeny zprávy a chování kompilátoru:

Diagnostické zprávy

Popis

Chování kompilátoru

C2813

#import Směrnice není kompatibilní s /MP možnost.

Kompilace ukončena, pokud úroveň pro upozornění kompilátoru možnost určuje jinak.

D9014

Je zadána neplatná hodnota processMax argument.

Kompilátor ignoruje neplatné a předpokládá se hodnota 1.

D9030

Zadaná možnost je kompatibilní s /MP.

Kompilátor ignoruje /MP možnost.

Pokyny

Měření výkonu

Okamžiku celkové sestavení se používají k měření výkonu.Můžete měřit v okamžiku sestavení s hodinami fyzické nebo můžete použít software, který vypočítá rozdíl mezi při sestavování spouští a zastavuje.Pokud má počítač více procesorů, fyzické hodiny může přinést přesnější výsledky než čas měření softwaru.

Efektivní procesorů

Počítač může obsahovat jednu nebo více virtuálních procesorů, které jsou známé také jako účinné procesorů, pro každou ze svých fyzických procesorů.Každý fyzický procesor může mít jeden nebo více jader a pokud operační systém umožňuje hyperthreading pro jádro, každý vzorek se zdá být dva virtuální procesory.

Například počítač obsahuje jeden procesor účinné je jeden fyzický procesor s jedním jádrem a hyperthreading je zakázáno.Naopak počítač má osm procesorů účinné Pokud má dva procesory fyzické, z nichž každá má dvě jádra, a všechny vzorky mají povoleno hyperthreading.To znamená (8 účinné procesory) = (2 fyzických procesorů) x (2 jádra na fyzický procesor) x (2 účinné na jádro z důvodu hyperthreading procesory).

Vynecháte-li processMax argument v /MP možnost kompilátoru získává počet procesorů, účinné od operačního systému a poté vytvoří jeden proces na účinný procesor.Kompilátor však nemůže zaručit, který proces je prováděn určitému procesoru; operační systém bude toto rozhodnutí.

Počet procesů

Kompilátor vypočítá počet procesů, které budou použité ke kompilaci zdrojových souborů.Hodnota je menší počet zdrojové soubory, které zadáte v příkazovém řádku a počet procesů zadané explicitně nebo implicitně se /MP možnost.Pokud zadáte můžete explicitně nastavit maximální počet procesů processMax argument /MP možnost.Nebo můžete použít výchozí nastavení, což se rovná počtu procesorů účinné v počítači, pokud vynecháte processMax argument.

Předpokládejme například, že zadáte na příkazovém řádku následující:

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

V tomto případě kompilátor používá pět procesů, protože se jedná o menší z pěti zdrojové soubory a maximálně sedmi procesů.Nebo Předpokládejme, počítač má dva procesory účinné a zadejte následující příkaz:

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

V tomto případě operační systém hlásí dva procesory; Proto kompilátor používá dva procesy v jeho výpočtu.V důsledku toho se spustí kompilátor vzhledem k tomu, že je menší dva procesy a tři zdrojové soubory sestavení s dvěma procesy.

Zdrojové soubory a pořadí sestavení

Zdrojové soubory nemusí být zkompilováno ve stejném pořadí, v jakém jsou uvedeny na příkazovém řádku.Ačkoli kompilátor vytvoří řadu procesů, které obsahují kopie kompilátor, operační systém naplánuje při každý proces spustí.V důsledku toho nemůže zaručit, že zdrojové soubory zkompilovány, v určitém pořadí.

Zdrojový soubor je zkompilován při procesu je k dispozici jej zkompilovat.Pokud existuje více souborů než procesy, první sady souborů je zkompilován s procesy k dispozici.Zbývající soubory jsou zpracovány, pokud proces dokončí zpracování předchozí soubor a je k dispozici pro práci na jednom ze zbývajících souborů.

Není zadán stejný zdrojový soubor vícekrát na příkazovém řádku.Tato situace může nastat, například nástroj automaticky vytvoří-li pravidel založený na informace o závislostech v projektu.Pokud nezadáte /MP možnost kompilátoru postupně zpracovává seznam souborů a znovu zkompiluje všechny výskyty souboru.Nicméně pokud zadáte /MP možnost, různé kompilátory mohou kompilovat stejný soubor současně.V důsledku toho různé kompilátory pokusí zapsat do stejného výstupního souboru současně.Jeden kompilátor bude získat výhradní přístup pro zápis do výstupního souboru a úspěšné a jinými kompilátory se nezdaří s chyba přístupu souboru.

Použití knihovny typů (#import)

Kompilátor nepodporuje použití #import s /MP přepnout.Pokud je to možné postupujte takto Chcete-li tento problém vyřešit:

  • Přesuňte všechny #import do různých směrnic zdrojové soubory pro jeden nebo více souborů a pak zkompilovat soubory bez /MP možnost.Výsledkem je sada souborů generovaných záhlaví.

  • Ve zbývající zdrojové soubory, vložení #include směrnic, které specifikují generované záhlaví a potom kompilace zbývající zdrojové soubory pomocí /MP možnost.

Nastavení projektu sady Visual Studio

Nástroj MSBUILD.exe

Visual Studiopoužívá MSBuild.exe nástroj pro vývoj řešení a projekty.**/maxcpucount:**number (Nebo **/m:**number) možnosti příkazového řádku nástroje MSBuild.exe, můžete vytvořit více projektů současně.A /MP možnost kompilátoru můžete vytvořit několik jednotek kompilace ve stejnou dobu.Pokud je vhodná pro vaši aplikaci, zlepšení doby sestavení vašeho řešení pomocí jednoho nebo obou /MP a /maxcpucount.

Čas sestavení řešení závisí částečně na počet procesů, které provádí sestavení.number Argument /maxcpucount MSBuild možnosti určuje maximální počet projektů pro sestavení současně.Podobně processMax argument /MP určuje maximální počet jednotek kompilace sestavení současně.Pokud /maxcpucount určuje možnost P projekty a /MP určuje možnost C procesy, maximálně PxC procesy spustit současně.

Jako vodítko pro rozhodování, zda použít MSBuild nebo /MP technologie je takto:

  • Jestliže jsou mnohé projekty s několika souborů v jednotlivých projektů, MSBuild nástroj.

  • Pokud existuje několik projektů s mnoha soubory v projektech, použít /MP možnost.

  • Pokud je rovnováha počtu projektů a souborů dle projektu, použijte obě MSBuild a /MP.Zpočátku nastavena /maxcpucount možnost počtu projektů pro sestavení a /MP možnost na počet procesorů v počítači.Měření výkonu a upravte nastavení tak, aby poskytují nejlepší výsledky.Opakování tohoto cyklu, dokud nebudete spokojeni s jeho celkové sestavení.

Možnost kompilátoru /Gm

Ve výchozím nastavení, sestavení projektu umožňuje /Gm možnost kompilátoru (přírůstkové sestavení) pro sestavení ladění a zakáže pro verzi sestavení.Proto /MP možnost kompilátoru automaticky zakázána v sestavení ladění, protože je v konfliktu s výchozím /Gm možnost kompilátoru.

Viz také

Referenční dokumentace

#import – direktiva (C++)

Referenční dokumentace pro použití nástroje MSBuild v příkazovém řádku