Compartir a través de


/MP (Compilar con varios procesos)

la opción de /MP puede reducir el tiempo total para compilar los archivos de código fuente en la línea de comandos.La opción /MP hace que el compilador cree una o más copias de sí mismo, cada una en un proceso independiente.A estas copias compilan simultáneamente varios archivos de código fuente.Esto permite reducir significativamente el tiempo total empleado en compilar los archivos de código fuente.

/MP[processMax]

Argumentos

  • processMax
    (Opcional) Número máximo de procesos que el compilador puede crear.

    El argumento processMax debe estar entre 1 y 65536.Si no, el mensaje de advertencia D9014del compilador, omite el argumento de processMax , y se supone que el número máximo de procesos es 1.

    Si omite el argumento processMax, el compilador recupera el número de procesadores efectivos del equipo desde el sistema operativo y crea un proceso para cada procesador.

Comentarios

La opción /MP del compilador puede reducir significativamente el tiempo de compilación al generar muchos archivos.Para mejorar el tiempo de compilación, el compilador crea hasta processMax copias de sí mismo, y después utilizar esas copias para compilar los archivos de código fuente al mismo tiempo.La opción /MP se aplica a las compilaciones, pero no a la vinculación o a la compilación de código en tiempo de vinculación.De forma predeterminada la opción de /MP está desactivada.

La mejora en tiempo de compilación depende del número de procesadores de un equipo, el número de archivos que hay que generar y la disponibilidad de recursos del sistema, tales como la capacidad de E/S.Experimente con la opción /MP para determinar el mejor el valor para compilar un proyecto determinado.Si necesita consejos que le ayuden a tomar esa decisión, vea Instrucciones.

Opciones incompatible y características de lenguaje

La opción /MP es incompatible con algunas opciones del compilador y características de lenguaje.Si utiliza una opción del compilador incompatible con la opción /MP, el compilador emite la advertencia D9030 y omite la opción /MP.Si utiliza una característica de lenguaje incompatible, el error C2813del compilador emite después finaliza o continúa según la opción actual de nivel de advertencia del compilador.

[!NOTA]

La mayoría de las opciones son incompatibles, ya que, si se permitieran, los compiladores que se ejecutan concurrentemente escribirían al mismo tiempo sus resultados en la consola o en un archivo determinado.Esa situación produciría una mezcla ininteligible de resultados.En algunos casos, la combinación de opciones empeoraría el rendimiento.

La tabla siguiente muestra una lista de las opciones del compilador y las características de lenguaje que son incompatibles con la opción /MP:

Opción o característica de lenguaje

Descripción

#import (directiva de preprocesador)

Convierte los tipos de una biblioteca de tipos en clases de C++ y, a continuación, escribe esas clases en un archivo de encabezado.

/E, /EP

Copia los resultados del preprocesador en la salida estándar (stdout).

/Gm

Habilita una recompilación incremental.

/showIncludes

Escribe una lista de archivos de inclusión en la salida estándar de error (stderr).

/Yc

Escribe un archivo de encabezado precompilado.

Mensajes de diagnóstico

Si especifica una opción o característica de lenguaje que es incompatible con la opción /MP, recibirá un mensaje de diagnóstico.La tabla siguiente muestra una lista de los mensajes y el comportamiento del compilador:

Mensaje de diagnóstico

Descripción

Comportamiento del compilador

C2813

La directiva #import no es compatible con la opción /MP.

La compilación finaliza a menos que una opción de nivel de advertencia del compilador especifique lo contrario.

D9014

Se ha especificado un valor no válido para el argumento processMax.

El compilador omite el valor no válido y supone un valor de 1.

D9030

La opción especificada es incompatible con /MP.

El compilador omite la opción /MP.

Instrucciones

Bb385193.collapse_all(es-es,VS.110).gifMedir el rendimiento

Utilice el tiempo de compilación total para medir el rendimiento.Puede medir el tiempo de compilación con un reloj físico o utilizar software que calcula la diferencia entre el inicio y el final de la compilación.Si su equipo tiene varios procesadores, un reloj físico podría producir resultados más precisos que la medición del tiempo mediante software.

Bb385193.collapse_all(es-es,VS.110).gifProcesadores efectivos

Un equipo puede tener uno o más procesadores virtuales, también conocidos como procesadores efectivos, para cada uno de sus procesadores físicos.Cada procesador físico puede tener uno o más núcleos y, si el sistema operativo permite el hyperthreading para un núcleo, cada núcleo actúa como dos procesadores virtuales.

Por ejemplo, un equipo tiene un procesador efectivo si tiene un procesador físico con un solo núcleo y el hyperthreading está deshabilitado.En contraste, un equipo tiene ocho procesadores efectivos si tiene dos procesadores físicos, cada uno de los cuales tienen dos núcleos, y todos los núcleos tienen el hyperthreading habilitado.Es decir, (8 procesadores efectivos) = (2 procesadores físicos) x (2 núcleos por procesador físico) x (2 procesadores efectivos por núcleo debido al hyperthreading).

Si omite el argumento processMax en la opción /MP, el compilador obtiene el número de procesadores efectivos desde el sistema operativo y, a continuación, crea un proceso por cada procesador efectivo.Sin embargo, el compilador no puede garantizar qué proceso se ejecuta en un procesador determinado: es el sistema operativo el que toma esa decisión.

Bb385193.collapse_all(es-es,VS.110).gifNúmero de procesos

El compilador calcula el número de procesos que utilizará para compilar los archivos de código fuente.Ese valor es el menor de entre el número de archivos de código fuente que ha especificado en la línea de comandos y el número de procesos que especifica explícita o implícitamente con la opción /MP.Puede establecer explícitamente el número máximo de procesos si proporciona el argumento processMax de la opción /MP.O bien, puede utilizar el valor predeterminado, que es igual al número de procesadores efectivos de un equipo, si omite el argumento processMax.

Por ejemplo, suponga que especifica la siguiente línea de comandos:

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

En este caso, el compilador utiliza cinco procesos, ya que ése es el número menor entre cinco archivos de código fuente y un máximo de siete procesos.Por otro lado, suponga que su equipo tiene dos procesadores efectivos y usted especifica la línea de comandos siguiente:

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

En este caso, el sistema operativo indica dos procesadores; por consiguiente, el compilador utiliza dos procesos en sus cálculos.Como resultado, el compilador ejecutará la compilación con dos procesos, ya que ése es el número menor entre dos procesos y tres archivos de código fuente.

Bb385193.collapse_all(es-es,VS.110).gifArchivos de código fuente y orden de compilación

Puede que los archivos de código fuente no se compilen en el mismo orden en el que aparecen en la línea de comandos.Aunque el compilador crea un conjunto de procesos que contienen copias del compilador, el sistema operativo decide cuándo se debe ejecutar cada proceso.Por consiguiente, no se puede garantizar que los archivos de código fuente se compilarán en un orden determinado.

Un archivo de código fuente se compila cuando hay un proceso disponible para compilarlo.Si hay más archivos que procesos, los procesos disponibles compilan el primer conjunto de archivos.Los archivos restantes se procesan cuando un proceso finaliza con un archivo anterior y queda disponible para trabajar con otro archivo.

No especifique el mismo archivo de código fuente varias veces en una línea de comandos.Esto podría ocurrir, por ejemplo, si una herramienta crea automáticamente un archivo make basado en información de dependencias en un proyecto.Si no especifica la opción /MP, el compilador procesa secuencialmente la lista de archivos y vuelve a compilar cada aparición del archivo.Sin embargo, si especifica la opción /MP, los diferentes compiladores podrían compilar al mismo tiempo el mismo archivo.Por consiguiente, los diferentes compiladores intentarán escribir al mismo tiempo en el mismo archivo de salida.Un compilador obtendrá acceso de escritura exclusivo al archivo de salida y podrá realizar su tarea, pero los otros compiladores obtendrán un error de acceso al archivo y no podrán utilizarlo.

Bb385193.collapse_all(es-es,VS.110).gifUtilizar bibliotecas de tipos (#import)

El compilador no admite el uso de la directiva #import con el modificador /MP.Si es posible, siga estos pasos para evitar ese problema:

  • Mueva todas las directivas #import de los diversos archivos de código fuente a uno o más archivos y, a continuación, compile esos archivos sin la opción /MP.El resultado es un conjunto de archivos de encabezado generados.

  • En los archivos de código fuente restantes, inserte directivas #include que especifiquen los encabezados generados y, a continuación, compile los archivos de código fuente restantes mediante la opción /MP.

Bb385193.collapse_all(es-es,VS.110).gifOpciones de configuración de proyectos de Visual Studio

Bb385193.collapse_all(es-es,VS.110).gifHerramienta MSBUILD.exe

Visual Studio utiliza la herramienta MSBuild.exe para compilar soluciones y proyectos.La opción de la línea de comandos **/maxcpucount:**number (o **/m:**number) de la herramienta MSBuild.exe puede compilar varios proyectos al mismo tiempo.Y la opción del compilador /MP puede compilar varias unidades de compilación al mismo tiempo.Si es adecuado para su aplicación, puede mejorar el tiempo de compilación de su solución utilizando /MP o /maxcpucount, o ambas opciones.

El tiempo de compilación de su solución depende en parte del número de procesos que realizan la compilación.El argumento number de la opción de MSBuild /maxcpucount especifica el número máximo de proyectos que se van a compilar al mismo tiempo.De igual forma, el argumento processMax de la opción del compilador /MP especifica el número máximo de unidades de compilación que se van a generar al mismo tiempo.Si la opción /maxcpucount especifica P proyectos y la opción /MP especifica C procesos, se ejecutarán un máximo de PxC procesos al mismo tiempo.

El criterio para decidir si se debe utilizar MSBuild o /MP es el siguiente:

  • Si hay muchos proyectos con pocos archivos en cada proyecto, utilice la herramienta MSBuild.

  • Si hay pocos proyectos con muchos archivos en cada proyecto, utilice la opción /MP.

  • Si el número de proyectos y archivos por proyecto está equilibrado, utilice ambas opciones, MSBuild y /MP.Inicialmente, establezca la opción /maxcpucount en el número de proyectos que se van a compilar, y la opción /MP en el número de procesadores de su equipo.Mida el rendimiento y, a continuación, ajuste la configuración para producir los mejores resultados.Repita el ciclo hasta que esté satisfecho con el tiempo de compilación total.

Bb385193.collapse_all(es-es,VS.110).gifLa opción /Gm del compilador

De forma predeterminada, una compilación del proyecto habilita la opción /Gm del compilador (compilaciones incrementales) para las versiones de depuración, y lo deshabilita para las versiones de lanzamiento.Por consiguiente, la opción /MP del compilador está deshabilitada automáticamente en versiones de depuración porque entra en conflicto con la opción /Gm predeterminada del compilador.

Vea también

Referencia

Directiva #import (C++)

Referencia de la línea de comandos de MSBuild