<< Chapter < Page Chapter >> Page >

Existen varias buenas razones para desear un nivel de detalle más fine que el que puede obtener usando un perfilador a nivel de subrutina. Para los humanos que tratan de entender cómo se usa una subrutina o función, un perfilador que indique cuáles líneas de código fuente se están ejecutando realmente, y cuán a menudo, resulta invaluable; unas pocas pistas acerca de dónde enfocar sus esfuerzos de afinación pueden ahorrarle mucho tiempo. Además, tal tipo de perfilador le ahora el descubrimiento de que una optimización particularmente inteligente no resulta en diferencia alguna, porque la colocó en una sección cuyo código nunca se ejecuta.

Como parte de una estrategia global, un perfilador de subrutinas puede dirigirlo hacia un puñado de rutinas que contabilizan la mayor parte del tiempo de ejecución, pero se necesita de un perfilador de bloques básicos Un bloque básico es una sección de código con un único punto de entrada y un único punto de salida. Si sabe cuántas veces se entró al bloque, sabe cuántas veces se ejecutó cada sentencia en el bloque, lo cuál le está dando un perfil línea por línea. El concepto de bloque básico se explica con más detalle en [link] para que pueda usted obtener las líneas de código asociadas.

Los perfiladores de bloques básicos también proporcionan a los compiladores la información que necesitan para realizar sus propias optimizaciones. Muchos compiladores trabajan a ciegas: pueden reestructurar y desenrollar ciclos, pero no pueden decir cuándo merece la pena hacerlo. Y lo que es todavía peor, a veces las optimizaciones mal ubicadas ¡tienen el efecto adverso de volver más lento el código! Ello puede deberse al gravamen a que se ve sometida la cache de instrucciones, a las pruebas innecesarias introducidas por el compilador, o a hipótesis incorrectas acerca de qué camino tomará una bifurcación a tiempo de ejecución. Si el compilador puede interpretar automáticamente los resultados de un perfilador de bloques básicos, o si puede usted proporcionarle algunos indicios, a menudo significa un tiempo de ejecución reducido con poco esfuerzo de su parte.

Existen muchísimos perfiladores de bloques básicos en el Mundo. Lo más parecido a un estándar, tcov , se distribuye con las estaciones de trabajo Sun. Es estándar porque la base instalada es muy grande. En las estaciones de trabajo basadas en MIPS, tales como las Silicon Graphics y las DEC, el perfilador (empaquetado como una extensión de prof ) se llama pixie . Explicaremos brevemente cómo ejecutar cada perfilador, usando un conjunto razonable de opciones. Puede consultar sus respectivas páginas de manual en busca de otras opciones.

Tcov

tcov , disponible para estaciones de trabajo Sun y otras máquinas SPARC que ejecuten SunOS, proporciona estadísticas de ejecución que describen el número de veces que fue ejecutada cada sentencia del código fuente. Es muy fácil de usar. Para ilustrarlo, asumamos que tenemos un programa fuente llamado foo.c . Los siguientes pasos crean un perfil de bloques básicos:


% cc -a foo.c -o foo % foo% tcov foo.c

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Cómputo de alto rendimiento. OpenStax CNX. Sep 02, 2011 Download for free at http://cnx.org/content/col11356/1.2
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Cómputo de alto rendimiento' conversation and receive update notifications?

Ask