<< Chapter < Page Chapter >> Page >

Además del peligro de la detención de banco, las referencias a una sola palabra que se realizan directamente a un sistema de memoria multibanco acarrean una latencia mayor que los accesos (exitosos) a memoria cache. Ello se debe a la referencias que se hacen a la memoria exterior, más lenta que la cache, e igual puede haber pasos adicionales de traducción de direcciones. Sin embargo, las referencias a la memoria en bancos está entubada. Tan pronto como las referencias han iniciado por adelantado lo suficientemente bien, pueden ocurrir simultáneamente muchas referencias multibanco entubadas, que le proporcionan una buena tasa de rendimiento.

El sistema CDC-205 ejecutaba operaciones vectoriales en un estilo memoria a memoria, usando un conjunto explícito de entubamientos de memoria. Este sistema proporcionaba un rendimiento superior en cálculos de vectores con incrementos unitarios muy largos. Una sola instrucción podía realizar 65,000 cálculos usando tres entubamientos de memoria.

Caches administradas por software

He aquí una idea interesante: si un procesador vectorial puede planificar el arranque de un entubamiento de memoria con suficiente antelación, ¿por qué no puede un procesador RISC comenzar un llenado de cache antes de que requiera los datos en esa misma situación? De esta forma, está aprestando la cache para ocultar la latencia del llenado de la misma. Si puede realizarse con suficiente antelación, dará la impresión que todas las referencias a memoria operan a la velocidad de la cache.

Este concepto se llama precarga (prefetch) y está soportado mediante el uso de una instrucción especial de precarga disponible en muchos procesadores RISC. Tal instrucción opera exactamente igual que una operación de carga común, excepto que el procesador no espera que la cache se llene antes de completar la instrucción. La idea es precargar lo suficiente como para tener los datos listos en cache al momento en que se realiza el cálculo. El siguiente ejemplo ilustra cómo se usa:


DO I=1,1000000,8 PREFETCH(ARR(I+8))DO J=0,7 SUM=SUM+ARR(I+J)END DO END DO

Esto no es realmente FORTRAN. La precarga usualmente se realiza en el código ensamblador generado por el compilador cuando detecta que usted está saltando a lo largo del arreglo usando un salto de tamaño fijo. El compilador típicamente estima cuán adelante debe precargar. En el ejemplo anterior, si el llenado de la cache fuera particularmente lento, el valor 8 en I+8 puede cambiarse a 16 o 32 mientras los demás valores se cambien en consonancia.

En un procesador que sólo puede ejecutar una instrucción por ciclo, podría no valer la pena precargar una instrucción; el intercambio tomaría tiempo valioso en el flujo de instrucciones de entrada, con beneficios dudosos. En un procesador superescalar, sin embargo, puede mezclarse un aviso de cache con el resto del flujo de instrucciones, y emitirlo entre otras instrucciones reales. Si ello salva a su programa de sufrir fallos de cache extra, valdrá la pena.

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