2010-08-19 11 views
5

Aparentemente, la velocidad del enlazador C++ en Visual Studio 2010 no ha mejorado tanto (alrededor del 25% en nuestro caso). Esto significa que todavía estamos atrapados con tiempos de enlace de entre 30 segundos y dos minutos. Seguramente hay vinculadores por ahí que funcionan mejor? ¿Alguien tiene experiencia con cambiar a otro enlazador o incluso un conjunto completo de herramientas y ver cómo los tiempos de enlace disminuyen drásticamente?¿Cuál es el enlazador más rápido de C++ para la plataforma de Windows?

Saludos,

Sebastiaan

+2

Dos minutos no suena demasiado. En el lado positivo, puedes pasar el tiempo para visitar SO. – dalle

+0

Estoy de acuerdo en que dos minutos no es un problema demasiado grande, pero es más grande que una cantidad mágica de segundos (que creo que son alrededor de diez segundos) donde de hecho te preguntas qué podrías estar haciendo en lugar de esperar. Entonces pierde la concentración con cada vez que se vincula. Compare esto con, por ejemplo, TDD en C#. Como el tiempo de enlace es negligente, permanece en el flujo. Sería genial si pudiéramos tener esos ciclos ajustados con C++ también. –

+2

¿Quizás podría intentar solucionar más de un error en cada ciclo de edición/compilación/depuración? :-) – paxdiablo

Respuesta

8

Puede encontrar un enlazador más rápido pero, a menos que sea diez veces más rápido y esté enlazando treinta veces por hora, creo que preferiría usar las herramientas con las que Microsoft ha probado.

Preferiría tener tiempos de enlace relativamente lentos que un software potencialmente inestable.

Y ustedes los niños se echan a perder hoy en día. En mi época, teníamos que enviar nuestras tarjetas de 80 columnas al centro de cómputo y, si éramos lucky, el operador lo escribiría el próximo jueves y podríamos comenzar a depurar de la salida impresa :-)

+6

¡Me alegra que las cosas hayan evolucionado desde entonces! ;) – ereOn

4

Puede haber, pero me imagino que estaría hablando mejoras en el rango de unos pocos puntos porcentuales. Es poco probable que encuentres algo que sea de magnitudes más rápido (que es, supongo, lo que te gustaría).

Sin embargo, existen formas de mejorar los tiempos de enlace. ¿Qué opciones has activado? Cosas como "Habilitar el enlace incremental" y "Habilitar enlace a nivel funcional" pueden tener efectos dramáticos en la vinculación del rendimiento (bueno, obviamente, la primera vez que lo enlace será un enlace "completo", pero los enlaces posteriores se pueden hacer mucho más rápido con estas configuraciones).

+0

Hemos desactivado todas esas opciones desagradables de enlazador, intentamos enlazar lo más "normal" posible. :) La lentitud del enlazador de Visual Studio es causada por la generación del pdb. Si lo dejamos/depuramos, la vinculación es agradable y rápida. Espero que haya algún linker por ahí que haga la generación de información de depuración de una manera más inteligente (paralela). –

+2

@Sebastiaan: Esas opciones del enlazador no son desagradables de ninguna manera. – rwong

+0

Desactive generación de código de tiempo de enlace (LTCG) porque es la opción más lenta. – rwong

5

Cuando verificamos la velocidad del enlazador, hemos identificado que la velocidad del disco es el factor más limitante. La cantidad de tráfico de archivos es enorme, especialmente debido a la información de depuración (simplemente verifique el tamaño del pdb).

Para nosotros la solución era:

  • instalar enormes cantidades de memoria RAM, por lo que una gran cantidad de tráfico de archivos puede almacenar en caché (ir a 4 GB, o incluso más, si usted está en 64b OS). Nota: puede que tenga que cambiar la configuración del sistema para que el sistema es capaz de dedicar más memoria para la caché
  • uso disco duro muy rápido (conexión entre varias de ellas como RAID puede ayudar aún más)

Tenemos También experimenté con SSD, pero el SSD que hemos probado tuvo un rendimiento de escritura muy lento, por lo tanto, el efecto neto fue negativo. Esto podría haber cambiado mientras tanto, especialmente con el mejor de los SSD.

Como primer paso, sugiero que inicie Process Explorer (o incluso Task Manager) y verifique la carga de su CPU y el tráfico de E/S durante la fase de enlace, para que pueda verificar si tiene CPU limitada o I/O limitado.

+1

¿Intentó discos RAM en máquinas con suficiente RAM? –

+0

No, no lo hicimos. Espero que el almacenamiento en caché adecuado tenga casi el mismo efecto (escribir de todos modos en el fondo), pero es posible que me equivoque fácilmente. Una vez que hemos actualizado la HW (HDD rápida + RAM grande), el problema ya no era importante para nosotros y no teníamos motivación para experimentar con más mejoras. – Suma

1

Echa un vistazo a las compilaciones de "Unity". Esto mejora los tiempos de enlace de forma espectacular:

The benefits/disadvantages of unity builds?

+0

Gracias por el consejo, pero ya estamos haciendo eso. Antes de hacerlo, los tiempos de enlace eran de entre cinco y diez minutos. –

2

Lloro y me pongo nervioso cuando mi tiempo de enlace está por encima de 10 seg.

Utilice discos SSD de estilo moderno. Tengo 2x 60 GB OCZ Vertex2 E Discos como un RAID 0 y IO ya no es un problema.Las SSD ahora son lo suficientemente buenas para el uso diario incluso para escrituras pesadas.

Y obtén algunos gigabytes de memoria. Ya no veo ningún motivo para trabajar con menos de 8 GB de RAM.

1

Active la vinculación incremental y la vinculación no debería llevar más de 1 segundo.

Cuestiones relacionadas