/MP (com vários processos de compilação)
O /MP opção pode reduzir o tempo total para compilar os arquivos de origem na linha de comando.O /MP opção faz com que o compilador para criar uma ou mais cópias de si mesmo, cada um deles em um processo separado.Em seguida, essas cópias simultaneamente compilar os arquivos de origem.Conseqüentemente, o tempo total para criar os arquivos de origem poderá ser reduzido significativamente.
/MP[processMax]
Argumentos
processMax
(Opcional) O número máximo de processos que o compilador pode criar.O processMax argumento deve variar de 1 a 65536.Caso contrário, o compilador emitirá a mensagem de aviso de D9014, ignora o processMax argumento e não assume o número máximo de processos é 1.
Se você omitir o processMax argumento, o compilador recupera o número de processadores efetivos em seu computador a partir do sistema operacional e cria um processo para cada processador.
Comentários
O /MP opção de compilador pode reduzir significativamente o tempo de compilação quando você compila muitos arquivos.Para melhorar o tempo de compilação, o compilador cria até processMax cópias de si mesmo e, em seguida, utiliza essas cópias para compilar os arquivos de origem ao mesmo tempo.O /MP opção aplica-se para compilações, mas não para geração de código link-time ou vinculação.Por padrão o /MP opção está desativada.
O aprimoramento no tempo de compilação depende do número de processadores em um computador, o número de arquivos para compilar e a disponibilidade dos recursos do sistema, como, por exemplo, a capacidade de e/S.Experimente o /MP opção para determinar a melhor configuração para criar um projeto específico.Para obter conselhos para ajudá-lo a tomar essa decisão, consulte diretrizes.
Recursos de idioma e opções incompatíveis
O /MP opção é incompatível com algumas opções do compilador e recursos de linguagem.Se você usar uma opção de compilador incompatível com o /MP opção, o compilador emitirá o aviso de D9030 e ignora o /MP opção.Se você usar um recurso de idioma incompatível, o compilador emitirá o erro C2813, em seguida, encerra ou continua dependendo do compilador atual, opção de nível de aviso.
Observação |
---|
A maioria das opções são incompatíveis, porque se eles foram permitidos, os compiladores de simultaneamente execução escreveria sua saída ao mesmo tempo para o console ou para um arquivo específico.Como resultado, a saída seria intermix e ser ilegível.Em alguns casos, a combinação das opções tornaria o pior desempenho. |
A tabela a seguir lista as opções do compilador e recursos de linguagem que são incompatíveis com o /MP opção:
Opção ou o recurso de linguagem |
Descrição |
---|---|
# Import diretiva de pré-processamento |
Converte os tipos em uma biblioteca de tipo em classes C++ e, em seguida, grava essas classes em um arquivo de cabeçalho. |
Copia a saída de pré-processador para a saída padrão (stdout). |
|
Permite uma recriação incremental. |
|
Grava uma lista de arquivos de inclusão para o erro padrão (stderr). |
|
Grava um arquivo de cabeçalho pré-compilado. |
Mensagens de diagnóstico
Se você especificar um recurso de opção ou o idioma que é incompatível com o /MP opção, você receberá uma mensagem de diagnóstico.A tabela a seguir lista as mensagens e o comportamento do compilador:
Mensagem de diagnóstico |
Descrição |
Comportamento do compilador |
---|---|---|
C2813 |
O #import diretiva não é compatível com o /MP opção. |
A compilação termina, a menos que uma nível de aviso do compilador opção especifique algo em contrário. |
D9014 |
Um valor inválido for especificado para o processMax argumento. |
O compilador ignora o valor inválido e assume o valor 1. |
D9030 |
A opção especificada é incompatível com o /MP. |
O compilador ignora a /MP opção. |
Diretrizes
Medir o desempenho
Use o tempo de construção total para medir o desempenho.Você pode medir o tempo de compilação com um relógio físico ou você pode usar o software que calcula a diferença entre quando a compilação inicia e pára.Se o computador tiver vários processadores, um relógio físico pode produzir resultados mais precisos do que uma medida de tempo do software.
Processadores efetivos
Um computador pode ter um ou mais processadores virtuais, que são também conhecidos como processadores efetivos, para cada um dos seus processadores físicos.Cada processador físico pode ter um ou mais núcleos, e se o sistema operacional permite que o hyperthreading para um núcleo, cada núcleo parece ser de dois processadores virtuais.
Por exemplo, um computador tiver um processador efetivo se ele tiver um processador físico que tem um núcleo e hyperthreading está desabilitado.Em contraste, um computador tem oito processadores efetivo se tiver dois processadores físicos, cada um com dois núcleos, e todos os núcleos têm hyperthreading ativado.Ou seja, (8 processadores eficazes) = (2 processadores físicos) x (2 núcleos por processador físico) x (2 processadores eficazes por núcleo por causa do hyperthreading).
Se você omitir o processMax argumento o /MP opção, o compilador obtém o número de processadores efetivos do sistema operacional e, em seguida, cria um processo por processador eficaz.No entanto, o compilador não pode garantir o processo que executa em um processador específico; o sistema operacional faz com que essa decisão.
Número de processos
O compilador calcula o número de processos que serão usados para compilar os arquivos de origem.Que valor é menor do que o número de arquivos de origem que você especificar na linha de comando e o número de processos que você especificar explicitamente ou implicitamente com o /MP opção.Você pode definir explicitamente o número máximo de processos se você fornecer o processMax argumento o /MP opção.Ou você pode usar o padrão, o que é igual ao número de processadores efetivos em um computador, se você omitir o processMax argumento.
Por exemplo, suponha que você especifique a seguinte linha de comando:
cl /MP7 a.cpp b.cpp c.cpp d.cpp e.cpp
Nesse caso, o compilador usa cinco processos porque o que for menor do que cinco arquivos de origem e um máximo de sete processos.Como alternativa, suponha que seu computador possui dois processadores efetivos e especificar a seguinte linha de comando:
cl /MP a.cpp b.cpp c.cpp
Nesse caso o sistema operacional relata dois processadores. Portanto, o compilador usa dois processos em seu cálculo.Como resultado, o compilador irá executar a compilação com dois processos porque esse é o menor dos dois processos e três arquivos de origem.
Arquivos de origem e a ordem de compilação
Os arquivos de origem não podem ser compilados na mesma ordem em que aparecem na linha de comando.Embora o compilador cria um conjunto de processos que contêm cópias do compilador, o sistema operacional agenda quando cada processo é executado.Conseqüentemente, você não pode garantir que os arquivos de origem serão compilados em uma ordem específica.
Um arquivo de origem é compilado quando um processo está disponível para compilá-lo.Se houver mais arquivos de processos, o primeiro conjunto de arquivos é compilado por processos disponíveis.Os arquivos restantes são processados quando um processo termina o tratamento de um arquivo anterior e está disponível para trabalhar em um dos arquivos restantes.
Não especifique o mesmo arquivo de origem várias vezes em uma linha de comando.Isso pode ocorrer, por exemplo, se uma ferramenta cria automaticamente um makefile que se baseia nas informações de dependência de um projeto.Se você não especificar o /MP opção, o compilador processa a lista de arquivos seqüencialmente e recompila cada ocorrência do arquivo.No entanto, se você especificar o /MP opção, compiladores diferentes podem compilar o mesmo arquivo ao mesmo tempo.Conseqüentemente, os compiladores diferentes tentará gravar no mesmo arquivo de saída, ao mesmo tempo.Um compilador irá adquirir acesso de gravação exclusivo ao arquivo de saída e bem sucedido e os outros compiladores falhará com um erro de acesso de arquivo.
Usando bibliotecas de tipos (# Import)
O compilador não suporta o uso da # Import diretiva com o /MP alternar.Se possível, siga estas etapas para solucionar esse problema:
Mova todos os #import diretivas no seu vários arquivos para um ou mais arquivos de origem e compile nesses arquivos sem a /MP opção.O resultado é um conjunto de arquivos de cabeçalho gerado.
No restante seu arquivos de origem, insira # include diretivas que especifique os cabeçalhos gerados e compile o restante de arquivos de origem usando o /MP opção.
Configurações de projeto de Visual Studio
A ferramenta MSBuild. exe
Visual Studiousa a MSBuild. exe ferramenta para construir soluções e projetos.O **/maxcpucount:**number (ou **/m:**number) a opção de linha de comando da ferramenta MSBuild. exe pode criar vários projetos ao mesmo tempo.E o /MP opção de compilador pode criar várias unidades de compilação ao mesmo tempo.Se for apropriado para seu aplicativo, melhorar o tempo de construção da sua solução usando um ou ambos os /MP e /maxcpucount.
O tempo de compilação da solução parcialmente depende do número de processos que executam a compilação.O number argumento o /maxcpucount opção MSBuild Especifica o número máximo de projetos para criar ao mesmo tempo.Da mesma forma, o processMax argumento o /MP opção de compilador Especifica o número máximo de unidades de compilação para criar ao mesmo tempo.Se a /maxcpucount Especifica a opção p projetos e o /MP Especifica a opção c processa, um máximo de pxc processos executados ao mesmo tempo.
A diretriz para decidir se deve usar MSBuild ou /MP tecnologia é o seguinte:
Se houver muitos projetos com alguns arquivos em cada projeto, use o MSBuild ferramenta.
Se houver alguns projetos com muitos arquivos em cada projeto, use o /MP opção.
Se o número de projetos e arquivos por projeto está equilibrado, usar ambos MSBuild e /MP.Definir inicialmente o /maxcpucount opção para o número de projetos para criar e o /MP opção para o número de processadores no computador.Medir o desempenho e ajuste suas configurações para produzir os melhores resultados.Repita esse ciclo até ficar satisfeito com o tempo de compilação total.
A opção de compilador de /Gm
Por padrão, um projeto de compilação permite que o /Gm opção de compilador (compilações incrementais) para compilações de depuração e desativa ele para lançamento de builds.Portanto, o /MP opção de compilador é automaticamente desabilitada em compilações de depuração porque é conflitante com o padrão /Gm opção de compilador.