Skip to content Skip to navigation

Connexions

You are here: Home » Content » Optimización de Ciclos - Conteo de Operaciones

Navigation

Recently Viewed

This feature requires Javascript to be enabled.
 

Optimización de Ciclos - Conteo de Operaciones

Module by: José Enrique Alvarez Estrada. E-mail the authorTranslated By: José Enrique Alvarez Estrada

Based on: Loop Optimizations - Operation Counting by Charles Severance, Kevin Dowd

Antes de que comience a reescribir el cuerpo de un bucle, o reorganizar el orden de los bucles, debe tener alguna idea de qué hace dicho cuerpo en cada iteración. Se llama conteo de operaciones al proceso de medir un ciclo para comprender la mezcla de operaciones. Necesitará contar el número de cargas, almacenamiento, operaciones de punto flotante, enteras, y llamados a bibliotecas por cada iteración del bucle. A partir de este conteo, puede ver cuán bien se corresponde la mezcla de operaciones de un ciclo dado con las capacidades del procesador. Por supuesto, el conteo de operaciones no garantiza que el compilador generará una representación eficiente de un ciclo.1 Pero ello generalmente le proporcionará una percepción suficiente como para dirigir sus esfuerzos de afinación.

Tenga en mente que una mezcla de instrucciones balanceada para una máquina puede no estarlo para otra. Los procesadores que hay hoy día en el mercado pueden generalmente ejecutar alguna combinación de una a cuatro instrucciones por ciclo de reloj. La aritmética de direcciones a menudo queda incrustada en las instrucciones que hacen referencia a memoria. Como el compilador puede reemplazar complicados cálculos de direcciones de bucles por expresiones simples (suponiendo que el patrón de direcciones es predecible), en ocasiones puede usted ignorar la aritmética de direcciones cuando hace el conteo de operaciones.2

Revisemos unos cuantos bucles, y veamos qué podemos aprender acerca de la mezcla de instrucciones:


DO I=1,N A(I,J,K) = A(I,J,K) + B(J,I,K) ENDDO

Este bucle contiene una suma de punto flotante y tres referencias a memoria (dos cargas y un almacenamiento). Hay algunas expresiones complejas de indexación de arreglos, pero probablemente el compilador las simplifique y pueda ejecutarlas en el mismo ciclo que aquellas de memoria y punto flotante. Para cada iteración del ciclo, debemos incrementar la variable índice y probarla para determinar si éste se ha completado.

Una tasa 3:1 de referencias a memoria respecto a operaciones de punto flotante sugiere que podemos aspirar a por lo menos 1/3 del rendimiento pico de punto flotante al ejecutar el bucle, a menos que haya más de un camino a la memoria. Son malas noticias, pero buena información. La tasa nos dice que debiéramos considerar primero la optimización de las referencias a memoria.

El bucle de abajo contiene una suma de punto flotante y dos operaciones a memoria - una carga y un almacenamiento. El operando B(J) es invariante en el bucle, así que su valor sólo requiere de cargarse una vez, antes de la entrada al bucle:


DO I=1,N A(I) = A(I) + B(J) ENDDO

Nuevamente, nuestro rendimiento de punto flotante está limitado, pero no tan severamente como en el ciclo anterior. La tasa de referencias a memoria respecto a operaciones de punto flotante es ahora de 2:1.

El siguiente ejemplo muestra un bucle con mejores perspectivas. Realiza multiplicaciones, a nivel de elementos, de números complejos y asigna los resultados de vuelta al primero de ellos. Hay seis operaciones a memoria (cuatro cargas y dos almacenamientos) y seis operaciones de punto flotante (dos sumas y cuatro multiplicaciones):


for (i=0; i<n; i++) { xr[i] = xr[i] * yr[i] - xi[i] * yi[i]; xi[i] = xr[i] * yi[i] + xi[i] * yr[i]; }

Pareciera que este bucle está cercanamente balanceado para un procesador que pueda realizar el mismo número de operaciones de memoria y de punto flotante por ciclo. Sin embargo, puede que no sea así. Muchos procesadores realizan una multiplicación y una suma de punto flotante en una sola instrucción. Si el compilador es lo suficientemente bueno para reconocer que la suma-multiplicación es apropiada, este ciclo puede también verse limitado por las referencias a memoria; cada iteración se compilará en dos multiplicaciones y dos multiplicaciones-sumas.

De nuevo, el conteo de operaciones es una forma simple de estimar cuán bien se mapean los requerimientos de un ciclo en las capacidades de una máquina. En el caso de muchos bucles, a menudo encontrará usted que su rendimiento está dominado por las referencias a memoria, tal como vimos en los últimos tres ejemplos. Ello sugiere que la afinación de las referencias a memoria es muy importante.

Footnotes

  1. Revise la salida en lenguaje ensamblador para estar seguro, la cuál puede estar introduciendo algo de desbordamiento. Para obtener un listado en lenguaje ensamblador en muchas máquinas, compile con la bandera –S. En las RS/6000, utilice la bandera –qlist.
  2. El compilador reduce la complejidad de las expresiones de indexación del ciclo con una técnica llamada simplificación de variables de inducción. Véase (Reference).

Content actions

Download module as:

PDF | EPUB (?)

What is an EPUB file?

EPUB is an electronic book format that can be read on a variety of mobile devices.

Downloading to a reading device

For detailed instructions on how to download this content's EPUB to your specific device, click the "(?)" link.

| More downloads ...

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks