Compartilhar via


/MP (com vários processos de compilação)

The /MP opção pode reduzir o time total para compilar os arquivos de fonte na linha de comando. The /MP opção faz com que o compilador para criar uma ou mais cópias de si mesmo, cada um em um processo separado. Em seguida, essas cópias simultaneamente compilar os arquivos de fonte.Conseqüentemente, o time total para compilação os arquivos de fonte poderá ser reduzidos significativamente.

/MP[processMax]

Argumentos

  • processMax
    (Opcional) O número máximo de processos que o compilador pode criar.

    The processMax argumento deve variar de 1 a 65536. Caso contrário, o compilador emitirá a mensagem de aviso D9014, ignora o processMax argumento e considera o número máximo de processos é 1.

    Se você omitir o processMax argumento, o compilador recupera o número de efetivo processadores no computador a partir do sistema operacional e cria um processo para cada processador.

Comentários

The /MP opção do compilador pode reduzir significativamente o time de compilação quando você compilar muitos arquivos. Para melhorar o time 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 fonte ao mesmo time. The /MP opção aplica-se a compilações, mas não a geração de código link-time ou vinculação. Por padrão o /MP opção está desativada.

O aprimoramento no time de compilação depende do número de processadores em um computador, o número de arquivos para compilar e a disponibilidade de recursos do sistema, sistema autônomo capacidade de E/sistema autônomo.Experimente o /MP opção para determinar a melhor configuração para criar um projeto específico. Para obter conselhos ajudar você a tomar essa decisão, consulte Diretrizes.

Opções incompatíveis e recursos de idiomas

The /MP opção é incompatível com alguns recursos de linguagem e opções do compilador. Se você usar uma opção do compilador incompatível com o /MP opção, o compilador emitirá o aviso D9030 e ignora o /MP opção. Se você usar um recurso de linguagem incompatível, o compilador emitirá erro C2813 termina ou continua dependendo do compilador corrente, opção de nível de aviso.

Observação:

A maioria das opções são incompatíveis porque se elas foram permitida, os compiladores simultaneamente em execução seria Escreva sua saída ao mesmo time no console ou para uma determinada arquivo.sistema autônomo resultado, a saída seria intermix e ser ilegível.Em Alguns Caso s , a combinação das opções seria Verifique o pior desempenho .

A tabela a seguir lista 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

# Importdiretiva de pré-processador

Converte os tipos em uma biblioteca de tipos em classes C++ e grava essas classes em um arquivo de cabeçalho.

/E, /EP

Cópias pré-processador saída para a saída padrão (stdout).

/Gm

Permite que uma recompilar incremental.

/showIncludes

Grava uma lista de arquivos de inclusão para o erro padrão (stderr).

/Yc

Grava um arquivo de cabeçalho pré-compilado.

Mensagens de diagnóstico

Se você especificar um recurso de opção ou o linguagem 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

The #import diretiva não é compatível com o /MP opção.

Término da compilação, a menos que um nível de aviso do compilador opção especifique algo em contrário.

D9014

Um valor inválido foi especificado para o processMax argumento.

O compilador ignora o valor inválido e assume um valor de 1.

D9030

A opção especificada é incompatível com /MP.

O compilador ignora o /MP opção.

Diretrizes

Medida de desempenho

Usar o time de compilação total para medida desempenho.Você pode medir o time de compilação com um relógio físico ou usar 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 time de software.

Processadores efetivos

Um computador pode ter um ou mais processadores virtual, que também são conhecidos sistema autônomo processadores efetivo, 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 virtual.

Por exemplo, um computador tiver um processador efetivo se ele tiver um processador físico que tem um principal e hyperthreading é desabilitado.Por outro lado, um computador terá oito processadores efetivo se ele possui dois processadores físicos, cada um com dois núcleos, e todos os núcleos têm hyperthreading ativado.Isto é, (8 processadores efetivo) = (2 processadores físicos) x (2 núcleos por processador físico) x (2 processadores efetivo por núcleo por causa do hyperthreading).

Se você omitir o processMax argumento da /MP opção, o compilador obtém o número de processadores efetivos do sistema operacional e, em seguida, cria um processo por processador efetivo. No entanto, o compilador não pode garantir o processo que executa em um determinado processador; o sistema operacional faz essa decisão.

Número de processos

O compilador calcula o número de processos que usará para compilar os arquivos de fonte.Que valor é menor do número de arquivos de fonte que você especificar na linha de comando e o número de processos que você especificar implicitamente ou explicitamente com o /MP opção. Você pode conjunto explicitamente o número máximo de processos se você fornecer o processMax argumento das /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ê especificar 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 esse é o menor cinco arquivos de fonte e um máximo de sete processos.Como alternativa, suponha que seu computador possui dois processadores efetivo 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.sistema autônomo resultado, o compilador irá executar a compilação com dois processos porque esse é o menor dos processos de dois e três arquivos de fonte.

Arquivos de fonte e ordem de compilação

Os arquivos de fonte 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 fonte serão ser compilados em uma ordem específica.

A arquivo de fonte é 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ível.Os arquivos restantes são processados quando um processo termine de tratar um arquivo anterior e está disponível para trabalhar em um dos arquivos restantes.

Não especifique o mesmo arquivo de fonte várias vezes em uma linha de comando.Isso pode ocorrer, por exemplo, se uma ferramenta cria automaticamente um makefile com base em informações de dependência em 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 arquivo mesmo ao mesmo time. Conseqüentemente, os compiladores diferentes irão tentar gravar o mesmo arquivo de saída ao mesmo time.Um compilador irá adquirir acesso exclusivo de gravar no arquivo de saída e bem-sucedida e outros compiladores falhará com um erro de acesso de arquivo.

Usando bibliotecas de tipos (# Import)

O compilador não oferece suporte ao uso do # Import diretiva com o /MP Alterne. Se possível, siga estas etapas para solucionar esse problema:

  • Mover todos os #import diretivas em seus vários arquivos para um ou mais arquivos de fonte e, em seguida, compilar esses arquivos sem a /MP opção. O resultado é um conjunto de arquivos de cabeçalho gerado.

  • Em seus arquivos de fonte restantes, insira # include diretivas que especificam os cabeçalhos gerados e, em seguida, compilar arquivos de fonte restantes usando o /MP opção.

Configurações de projeto do Visual Studio

A ferramenta VCBUILD.exe

Visual Studio usa o VCcompilação.exe ferramenta compilação soluções e projetos.A ferramenta VCBUILD.exe pode criar projetos ao mesmo time e o /MP opção do compilador pode criar unidades de compilação ao mesmo time. Se for apropriado para seu aplicativo, melhorar time de compilação a solução do usando um ou ambos os /MP e VCBuild.

O time de compilação da solução parcialmente depende do número de processos que executam a compilação.The /M opção da ferramenta VCBUILD.exe Especifica o número máximo de projetos para criar ao mesmo time. Da mesma forma, a processMax argumento das /MP opção especifica o número máximo de unidades de compilação a compilação ao mesmo time. If the /M option specifies P projects and the /MP option specifies C processes, a maximum of PxC processes execute at the same time.

A diretriz para decidir se deve usar VCBuild ou /MP tecnologia é o seguinte:

  • Se houver vários projetos com alguns arquivos em cada projeto, use o VCBuild 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 é balanceado, use os dois VCBuild e /MP. conjunto inicialmente o /M opção para o número de projetos para compilação e o /MP opção para o número de processadores no computador. Medir o desempenho e ajuste as configurações para produzir os melhores resultados.Repetir esse ciclo até ficar satisfeito com o time total de compilação.

opção do compilador /gm

Por padrão, uma compilação de projeto ativa o /Gm opção do compilador (compilações incrementais) para compilações de depurar e versão cria desativa. Portanto, a /MP opção do compilador automaticamente está desabilitado nas compilações de depurar porque ele está em conflito com o padrão /Gm opção do compilador.

Consulte também

Referência

The # Importarar diretriz

Outros recursos

Referência VCBUILD