c++ visual-studio-2010 compilation ssd

c++ - Acelera el tiempo de compilación con SSD



visual-studio-2010 compilation (5)

Quiero intentar acelerar el tiempo de compilación de nuestros proyectos en C ++. Tienen alrededor de 3M líneas de código.

Por supuesto, no necesito compilar siempre todos los proyectos, pero a veces hay muchos archivos de origen modificados por otros y necesito recompilarlos todos (por ejemplo, cuando alguien actualiza un archivo de origen ASN.1 ).

He medido que la compilación de un proyecto intermedio (que no involucra a todos los archivos de origen) lleva aproximadamente tres minutos. Sé que no es demasiado, pero a veces es muy aburrido esperar a que se compile.

He intentado mover el código fuente a un SSD (un antiguo OCZ Vertex 3 60 GB) que, comparándolo, es de 5 a 60 veces más rápido que el HDD (especialmente en lectura / escritura aleatoria). De todos modos, el tiempo de compilación es casi el mismo (tal vez 2-3 segundos más rápido, pero debería ser una oportunidad).

¿Tal vez mover la bandeja de Visual Studio a SSD otorgaría un incremento adicional en el rendimiento?

Solo para completar la pregunta: Tengo un W3520 Xeon @ 2.67 GHz y 12 GB de DDR3 ECC.


Descubrí que compilar un proyecto de alrededor de 1 millón de líneas de C ++ se aceleró en aproximadamente un factor de dos cuando el código estaba en un SSD (sistema con un Core i7 ocho núcleos, 12 GB de RAM). En realidad, el mejor rendimiento posible que obtuvimos fue con un SSD para el sistema y otro para la fuente; no era que la compilación fuera mucho más rápida, sino que el sistema operativo era mucho más sensible mientras una gran compilación estaba en marcha.

La otra cosa que hizo una gran diferencia fue permitir la construcción paralela. Tenga en cuenta que hay dos opciones separadas que deben habilitarse:

  • Menú HerramientasOpcionesProyectos y soluciones → número máximo de construcciones de proyectos paralelos
  • Propiedades del proyecto → C ++ / GeneralCompilación multiprocesador

La compilación del multiprocesador es incompatible con un par de otras banderas (incluida la reconstrucción mínima, creo), así que revise la ventana de resultados para ver si hay advertencias. Encontré que con el conjunto de indicadores de compilación de MP, todos los núcleos alcanzaban una carga del 100%, por lo que al menos se puede ver que la CPU se está utilizando de forma agresiva.


La compilación / vinculación de C ++ está limitada por la velocidad de procesamiento, no por E / S de HDD. Es por eso que no estás viendo ningún aumento en la velocidad de compilación. (Mover los binarios del compilador / vinculador al SSD no hará nada. Cuando compila un proyecto grande, el compilador / vinculador y la biblioteca necesaria se leen en la memoria una vez y se quedan allí).

He visto algunas aceleraciones menores al mover el directorio de trabajo a un SSD o un disco RAM al compilar proyectos en C (lo que consume mucho menos tiempo que los proyectos en C ++ que hacen un uso intensivo de plantillas, etc.), pero no lo suficiente para que valga la pena.


Reemplacé mi unidad de disco duro con un SSD con la esperanza de que redujera el tiempo de compilación de mi proyecto C ++. Simplemente reemplazar la unidad de disco duro con un SSD no solucionó el problema y el tiempo de compilación con ambos fue casi el mismo.

Sin embargo, después de los fallos iniciales, conseguí acelerar la compilación aproximadamente seis veces.

Se realizaron los siguientes pasos para aumentar la velocidad de compilación.

  1. Desactivó la hibernación: "powercfg -h off" en el símbolo del sistema

  2. Desactivado la indexación de la unidad en la unidad C

  3. Archivo de página reducido a 800 min / 1024 máx (inicialmente se estableció en un tamaño administrado por el sistema de 8092).


Todo esto depende en gran medida de su entorno de compilación y otra configuración. Por ejemplo, en mi servidor de compilación principal, tengo 96 GiB de RAM y 16 núcleos. El disco duro es bastante lento, pero eso no importa realmente, ya que todo está almacenado en la memoria RAM.

En mi escritorio (donde también compilo a veces) solo tengo 8 Gib de RAM y seis núcleos. Hacer la misma compilación paralela podría acelerarse mucho, ya que seis compiladores que se ejecutan en paralelo consumen suficiente memoria para que la diferencia de velocidad de SSD sea muy notable.

Hay muchas cosas que influyen en los tiempos de compilación, incluida la proporción de CPU a E / S "límite". En mi experiencia ( GCC en Linux) incluyen:

  • Complejidad del código. Muchos de los metatemplados hacen que use más tiempo de CPU, más código similar a C podría hacer que la E / S de los objetos generados (más) sea dominante
  • Configuraciones del compilador para archivos temporales, como -pipe para GCC.
  • Optimización en uso. Por lo general, cuanto mayor es la optimización, más domina el trabajo de la CPU.
  • Construcciones paralelas. La compilación de un solo archivo a la vez probablemente nunca producirá suficiente E / S para que el disco duro más lento de hoy alcance cualquier límite. Sin embargo, la compilación con ocho núcleos (o más) a la vez puede
  • Sistema operativo / sistema de archivos en uso. Parece que algunos sistemas de archivos en el pasado se han atascado en el patrón de acceso para muchos archivos construidos en paralelo, esencialmente poniendo el cuello de botella de E / S en el código del sistema de archivos, en lugar del hardware subyacente.
  • RAM disponible para el almacenamiento en búfer. Cuanto más agresivamente un sistema operativo pueda almacenar su E / S, menos importante será la velocidad de la unidad de disco duro. Esta es la razón por la que a veces un make -j6 puede ser más lento que un make -j4 pesar de tener suficientes núcleos inactivos.

Para abreviar: depende de suficientes cosas para hacer cualquier "sí, te ayudará" o "no, te ayudará a no" pura especulación, así que si tienes la posibilidad de probarlo, hazlo. Pero no le dedique demasiado tiempo, por cada hora que intente reducir sus tiempos de compilación a la mitad, trate de calcular la frecuencia con la que usted (o sus compañeros de trabajo, si tiene alguno) podría haber reconstruido el proyecto, y cómo se relaciona con eso. el posible tiempo ahorrado.


Un punto que no se menciona es que al usar ccache y una compilación altamente paralela, verás los beneficios de usar un SSD.