2010-09-22 13 views
8

Una pregunta que no he visto respondió que me parece muy interesante. Todos los demás hilos parecen discutir forzando el problema, es decir, cambiando a vinculación dinámica o simplemente distribuyendo la carga de trabajo. Estoy más interesado en averiguar qué causa que los enlaces tomen tanto tiempo.Encontrar cuellos de botella de tiempo de enlace

El problema es que realmente no veo ninguna forma oficial de obtener las métricas relevantes del vinculador, al menos no para el vinculador VS. Está el modificador/verbose que le dará una gran idea de lo que está haciendo el enlazador, pero no le dará ningún ajuste de precisión.

He estado pensando en ejecutar el proceso del enlazador desde una herramienta que realiza las medidas reales por línea. Si bien esto no proporcionará tiempos precisos, probablemente sea lo suficientemente preciso como para identificar cuellos de botella vinculantes.

Alguien sabe de un mejor enfoque, o tal vez incluso una herramienta para esta tarea?

+0

Difícil de ver el punto de esto, el enlazador tiene muy pocas perillas más allá de su soporte de enlace incremental. La vinculación es por naturaleza un problema O (n^2), necesita una n más pequeña. –

Respuesta

6

Encontré una excelente serie de artículos al respecto en http://gameangst.com/?p=46, que detalla bastante bien qué afecta a los tiempos de enlace. Al final, el autor también proporciona un programa al que llama tipo de símbolo (al http://gameangst.com/?p=320). Este es el programa que estaba buscando, ya que ayuda enormemente a identificar dónde gastar tu esfuerzo. ¡No hace daño que haya tardado unos 10 segundos en ponerlo en marcha y en funcionamiento!

+0

Muy buenos enlaces, gracias! –

3

Aunque no responder directamente a su pregunta:

En VS el enlazador es también responsable de la generación de código y optimización global, puede intentar desactivar "Enlace Tiempo de generación de código" para disminuir el tiempo de enlace.

EDITAR: Por lo tanto, debido a la naturaleza global del vinculador no se puede decir que el módulo de enlace X tarda el 10% del tiempo.

+2

es probable que quiera disminuir el tiempo de enlace ... –

+1

@Assaf Lavie, corregido, gracias. – ybungalobill

+1

Ese es un buen punto, sería bueno si también fuera posible comparar el LTCG y la fase de optimización. En general, creo que tanto el compilador como el vinculador deberían poder generar métricas de rendimiento con los modificadores correctos, ya que los tiempos de compilación y enlace son problemas comunes en bases de códigos grandes. También ayudaría a las bibliotecas, como el impulso para comparar más fácilmente los constructos más exóticos que sabemos que afectan los tiempos de enlace y compilación de forma negativa. – Ylisar

Cuestiones relacionadas