jueves, 2 de febrero de 2017

Phenom II 3.6 GHz / 2.4 GHz uncore. Análisis en RMMA. Ampliado - LowLevelHardware

Ya en dos artículos, uno de ProfessionalSAT y el anterior de LowLevelHardware he analizado varios aspectos de este sistema. Aquí me centraré en las prestaciones del subsistema de memoria dando las cifras efectivos del ancho de banda para varios tamaños de acceso, haciendo un mapa detallado de la arquitectura de caché y memoria del AMD Phenom II.

Image1

RMMT RightMark Memory Analyzer

RMMT es uno de los componentes del avanzado paquete de análisis de microarquitectura RMMA de RightMark.org. Mide el ancho de banda de memoria para diferentes tamaños de acceso en lectura o escritura y es un software totalmente multithread.

Además soporta modos de acceso en lectura con hardware Prefetch y Non Temporal Store para escrituras saltando todos los niveles de caché.

Los valores dados por RMMA pueden considerarse valores reales, es decir, los que verá nuestro software, no como los de otros paquetes de software diseñados para dar un pico máximo que nunca se alcanza con software real (SiSoft Sandra …).

Análisis Phenom II fuera de especificación en RMMA

Configuración del sistema:

  • Procesador AMD Phenom II X4 940 Black Edition a 3.6 / 2.4 GHz
  • Placa Base ASUS M4A79-DeLuxe AMD 790FX – AMD 750
  • 4 GB en dos módulos Kingston HyperX DDR2 1066 5-5-5-15 2T 2.2V

En este artículo se detalla la configuración de BIOS del sistema con los núcleos a 3.6 GHz (3 GHz nominal) y el uncore (caché L3 y controladoras de memoria) a 2.4 GHz (1.8 GHz nominal).

Tabla_AnchoBanda

Ancho de banda del AMD Phenom II para diferentes tamaños de acceso:

  • Zona L1:                              0    -   256 KB
  • Zona L1 + L2:                      256  –  2304 KB (256 + 2048)
  • Zona L1 + L2 + L3:              2304 – 8448 KB (256 + 2048 + 6144)
  • Zona memoria principal:     8448 KB hasta el límite de la memoria física.

image

Phenom 3600 MHz / 2400 MHz uncore / 2 * 2 GB DDR2 1066 5-5-5-18 2T

Como vemos se delimitan perfectamente los diferentes niveles de caché. Todos los datos son en acceso concurrente de los cuatro núcleos, multithreaded x4.

Accesos en lectura dentro de cachés L1:

La caché L1 de los cuatro núcleos que componen un Phenom II es de 64 KB para datos y 64 KB para instrucciones. En este caso solo se testea la L1d y el tamaño total es de 64 x 4 = 256 KB.

16x4

Tamaño 64 KB. Lectura de 408274 MB/s en L1 multithreaded x4.

408274 MB/s equivalen a 399 GB/s. Cada L1 da unos 102000 MB/s (unos 100 GB/s) que una frecuencia de 3.6 GHz son unos 238 bits/ciclo efectivos o casi 30 bytes por ciclo efectivos (!!). Un valor impresionante.

Los procesadores Phenom y Phenom II son capaces de leer de L1 32 bytes por ciclo por núcleo, el valor más alto en la actualidad, duplicando a Core2 o Core i7, lo que queda demostrado por el dato anterior. Están dotados de dos puertos de lectura de 128 bits.

Al superar los 256 KB totales (64 KB x 4) entraremos en el terreno de la L2.

Accesos en lectura dentro de cachés L2:

La caché L2 de un Phenom II se compone de cuatro L2 unificadas discretas por núcleo (para datos e instrucciones) de 512 KB cada una para un total por chip de 2048 KB.

Los procesadores AMD tiene una arquitectura de cachés exclusiva, es decir, no duplican los contenidos de un nivel en el siguiente. Lo que hace que el tamaño efectivo total de caché sea igual al de la suma de los tamaños cada uno de los niveles.

128x4

Tamaño 512 KB. Lectura de 112676 MB/s en L2 multithreaded x4.

256x4

Tamaño 1024 KB. Lectura de 112807 MB/s en L2 multithreaded x4.

512x4

Tamaño 2048 KB. Lectura de 113061 MB/s en L2 multithreaded x4.

576x4_2304KB

Tamaño 2304 KB. Lectura de 111475 MB/s en L2 multithreaded x4.

111478 MB/s equivalen a 109 GB/s. Cada L2 transfiere unos 28000 MB/s (unos 28 GB/s) que una frecuencia de 3.6 GHz son unos 65 bits/ciclo efectivos o algo más de 8 bytes por ciclo efectivos, un valor no muy brillante, Core2 y Core i7 le superan ampliamente en velocidad de L2.

En los 2304 KB (576 KB x 4 núcleos) se sitúa el límite efectivo del tamaño de la L1 + L2 (64 + 512 KB) y por encima de este valor entramos en la zona de la caché L3.

Estrictamente hablando el papel de las L2 privadas de 512 KB consiste en reducir los accesos a la L3 compartida evitando la saturación de sus buses y proporcionar menor latencia y altas tasas de acierto al núcleo de ejecución.

Accesos en lectura dentro de caché L3:

Nota: Debido a que este sistema está fuera de especificación utiliza multiplicadores relativos de cores y L3 no standard y con ello los valores aquí detallados no son representativos del producto comercial en el tramo de L3 (576 – 8448 KB).

La caché L3 de Phenom II consta de 6144 KB unificados y comunes para los cuatro núcleos con buses de 64 bits, solo hay una L3 para servir a los cuatro procesadores. El tamaño efectivo (debido al diseño de cachés exclusivas) de la zona de L3 es de 6144 + (512 x 4) + (64 x 4) o algo más de 8 MB, 8448 KB.

Al superar este tamaño de bloque en acceso entraremos ya en memoria principal.

768x4_3072KB

Tamaño 3072 KB. Lectura de 43609 MB/s en L3 multithreaded x4.

1024x4_4096KB

Tamaño 4096 KB. Lectura de 44055 MB/s en L3 multithreaded x4.

2048x4_8192KB

Tamaño 7168 KB. Lectura de 44264 MB/s en L3 multithreaded x4.

44264 MB/s equivalen a 43 GB/s. La L3 unificada de 6 MB transfiere unos 44264 MB/s a los núcleos (unos 43 GB/s) o unos 11075 MB/s por núcleo.

Globalmente para todos los cores, a una frecuencia de 2.4 GHz (frecuencia del uncore) 44264 MB/s son unos 19.34 bytes/ciclo efectivos o casi 155 bits por ciclo efectivos. Siendo unos 4.83 bytes/ciclo o casi 39 bits/ciclo por cada núcleo referido a la frecuencia del uncore, en este caso en overclock a 2400 MHz.

En los 8448 KB, como he comentado anteriormente se encuentra el límite efectivo de la L3 para accesos multithreaded x4.

Accesos en lectura en memoria principal:

4096x4_16384KB

Tamaño 16384 KB. Lectura de 15041 MB/s en memoria multithreaded x4.

32768x4_131072KB

Tamaño 131072 KB. Lectura de 15024 MB/s en memoria multithreaded x4.

15024 MB/s (14.67 GB/s) se acerca mucho al límite teórico (17 GB/s) del dual channel DDR2 1066 que he instalado en el sistema, concretamente a un 86%. Un resultado excelente teniendo en cuenta que son medidas en condiciones reales.

Si consideras útil el contenido de este Blog, ayuda a mantenerlo ojeando algunas de las ofertas que consideres interesantes de nuestros anunciantes.

Carlos Yus Valero – informaticapremium

9 comentarios:

  1. Hola Carlos.

    Lo primero te doy las gracias por compartir tus conocimientos con el resto de usuarios. Me han sido de mucha ayuda tus artículos sobre los Phenom II (tengo un x4 940).

    Te escribo para preguntarte sobre un extraño resultado que me ha reportado el RMMT, a raiz de hacer pruebas al leer tu artículo del 12 de Marzo de 2009. En las pruebas de los niveles de memoria 1 y 2 los resultados son similares a los tuyos.
    En la memoria L3, obtengo diferentes resultados según el thread:
    thread 0: 10500 MB/s aprox.
    thread 1: 4130 MB/s aprox.
    thread 2: 4180 MB/s aprox.
    thread 3: 3900 MB/s aprox.
    No importa cuales estén en marcha, si dejo solo los threads 1, 2 y 3, el ancho se reparte entre los 3 . Pero el thread 0 siempre se mantiene por encima de los demás. En singlethread, este ronda los 12300 MB/s, y los demás no pasan de 7500 MB/s (y thread 3 ligeramente menos, entre 7450 y 7500).
    En el resultado total multithread esto se traduce en unos 22750 MB/s, frente a tus 44264 MB/s.
    Por otra parte, al llegar a la memoria principal (o eso creo), para un tamaño de 4096 KB por thread (16384 KB en total), se mantienen los mismos valores, siendo el total de 22400 MB/s.
    Para 32768 KB por thread, irrefutáblemente accediendo ya a la DDR2, en multithread obtengo curiosamente unos 2700 MB/s en thread 0, frente a 3150 MB/s, 3214 MB/s y 3000 MB/s en threads 1, 2 y 3 respectívamente.

    Como información de interés cuento que estoy haciendo overclock. Tengo 2 módulos de DDR2-800 que estoy intentando subir mientras mantengo CAS4, y no he encontrado otra manera que subiendo el FSB, de modo que no puedo subir las frecuencias del procesador simplemente desde los multiplicadores como has hecho tú. En este momento tengo los valores que puedes ver en esta captura del benchmark del Everest. http://www.gigasize.com/get.php?d=gsvyqw8nqrf

    No tengo ni idea de porqué puede suceder. Como detalle adicional, después de instalar un refrigerador por líquido compacto (circuito cerrado, sin montajes), se soltó el cable de alimentación de la bomba del líquido, y un par de veces se colgó (apagó) el ordenador, por sobrecalentamiento (al reiniciar comprobé temperatura, 100ºC los nucleos). No creo que se haya podido dañar, pero de cualquier detalle se puede sacar alguna pista.

    Si crees conveniente puedo mandarte un mensaje con voltajes u otra información. (Por cierto, no he encontrado otra manera de comunicarme contigo que comentando tu artículo)

    Te agradezco de antemano que pudieses ayudarme. Me parece una pena haberme metido tan a fondo en este tema y no poder sacarle todo el partido posible al procesador.

    ResponderEliminar
  2. En primer lugar te felicito por haberte leído uno de mis artículos de nivel más técnico.

    En segundo lugar, la verdad es que la velocidad de tu L3 en muy baja.

    Puede tener que ver con que esté dando errores de datos.. Puedes probar a dejarlo a frecuencias nominales y testear de nuevo con RMMA para ver si da resultados más normales.

    Además debes hacer las pruebas en una instalación limpia de Windows (sin ningún software instalado que compita por los recursos) y con los todos los drivers actualizados instalados.

    Un saludo.

    Carlos Yus.

    ResponderEliminar
  3. Hola Carlos. Gracias por contestar tan rápido. Estuve haciendo pruebas pero pronto llegaron los exámenes y lo dejé estar.
    Siento dejarte otra vez una parrafada, ojalá pudieramos hablar esto en un foro. Gracias de antemano.

    Hice las pruebas sin el overclock y seguía teniendo el mismo problema. Probé también en windows 7 en modo a prueba de fallos (estoy usando el 7 x64) y cambiando opciones de la bios, y en una instalación limpia del XP (x32), pero no cambió nada.

    He hecho alguna prueba más y no comprendo los resultados que obtengo, igual sacas tú alguna conclusión.
    Con el RMMT, en acceso single core (velocidades de acceso a L3 máximas por núcleo):

    core 0 9400 MB/s
    core 1 6250 MB/s
    core 2 6250 MB/s
    core 3 6250 MB/s

    (confirmado estableciendo afinidad desde el administrador de tareas de windows a cada núcleo en cada prueba)

    Con los threads no asignados a los núcleos (opción del RMMT):
    según cuantos threads en marcha hay:

    1: 16000 MB/s
    2: 14000 MB/s , 14000MB/s (Total: 29000 MB/s)
    3: 13500 MB/s , 13500MB/s , 13500 MB/s (total: 40000 MB/s)
    4: 3700 MB/s , 3700MB/s , 3700MB/s , 9000 MB/s (Total: 20200 MB/s)

    Esta última prueba la hice con la afinidad en todos los núcleos. Si lo dejaba en afinidad a un núcleo en concreto, la velocidad se repartía entre los threads operativos llegando a un máximo de velocidad que coincide con la de los núcleos obtenidas para cada uno en la primera prueba (es decir, poniendo afinidad al proceso del RMMT al core 2, independientemente de los threads en marcha, la velocidad máxima era de unos 6250 MB/s). En ocasiones en lugar de los 20000 MB/s de esta última prueba con 4 threads, obtenía unos 34000 que se mantenían constantes durante a veces 40 segundos, y en otras ocasiones casi 2 minutos, pero luego bajaba a 20000 MB/s.

    No se si dar por descartados los daños en el procesador por aquel sobrecalentamiento o por las pruebas de overclock que hice, ya que sí ha llegado el RMMT a medir como velocidad total de acceso a la L3 unos 40.000 MB/s (en la prueba con los threads no asignados a los núcleos, con 3 threads en marcha) y esos 40.000 MB/s reales en esa prueba, están por encima de los supuestos 27.950 MB/s teóricos que se derivan de las velocidades máximas single core ( 9200 + (6250 x 3) ), aunque quizá este sea un razonamiento erróneo.

    Otra cosa que no me parece normal, es que haciendo la prueba con 2500 KB de memoria utilizada por thread, 10000 KB en total, superando el límite de 8448 KB de la zona L1+L2+L3, los resultados de velocidad son los mismos que para la memoria L3 (ahora mismo: 8800 MB/s , 3700MB/s , 3700 MB/s , 3700 MB/s ). Incluso para 4000 KB por thread (total 16000 KB), obtengo las mismas frecuencias (sumadas las 4 en total unos 20000 MB/s).
    No creo que esté accediendo a la DDR2 800 a esa velocidad, imagino que seguirá en la L3, pero ¿porqué, y cómo si el tamaño de la memoria no da para tanto?

    Como ya he dicho estoy usando windows 7 x64, creo que no lo has mencionado en ninguno de los artículos sobre el phenom pero parece que usas el XP (por las capturas). Un amigo informático me ha dicho que había que tocar algo en windows para que utilizase multithread real, o algo parecido. No se si tendrá algo que ver.

    ResponderEliminar
  4. Andreu, tengo varias ideas acerca de tus problemas.

    - Una opción es que tu L3 esté corrompiendo datos y utilice las ECC para corregir sobre la marcha y baje obviamente su velocidad.

    - El hecho de que con 4 threads baje tanto la velocidad puede indicar problemas térmicos y el procesador haga throtling.

    Para analizarlo más en profundidad
    necesitaría verlo en persona...

    Un saludo,

    Carlos.

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Hola Carlos. Acabo de ver que la baja velocidad de esos 3 nucleos al acceder a la L3, corresponde a la velocidad de acceso a la RAM. Y el resultado cuando los bloques de memoria son de 5000 KB , son los mismos: núcleo 0 a 9000MB/s y los otros 3 nucleos a 3600MB/s , lo que da el extraño resultado de que para una memoria total de 20MB el acceso multithreaded es de casi 20.000 MB/s (sin subir las velocidades de stock, y con DDR2 800MHz). Adjunto una imagen http://img845.imageshack.us/img845/1771/falloram.jpg
    Como ya te comenté, si no asigno las tareas a los nucleos, la velocidad total sube mucho habiendo 3 threads en marcha.
    Estoy posteando este problema en hard-h2o.com pero quería comentarte la velocidad esta para supuestamente la ram. ¿Te dice algo todo esto?

    Gracias

    ResponderEliminar
  7. Obviamente hay algún problema.

    Creo que he dado con él. El fallo reside en el uso de Windows 7, si te das cuenta, RMMA y RMMT es un programa algo antiguo y programado pensando en Windwos XP o XP X64.

    Esa es la razón de que yo utilice en este tipo de pruebas este sistema operativo.

    Si te fijas, incluso en mis artículos actuales sobre Sandy Bridge utilizo XP X64 para RMMA y RMMT.

    Tus cifras no sólo son poco lógicas sino imposibles, nunca se puede superar un rendimiento porcentual del 100% en el ancho de banda de un bus.

    Un saludo,

    Carlos Yus.

    ResponderEliminar
  8. En su momento probé con RMMT en una instalación limpia de Windows XP, y daba el mismo fallo. Creo que el problema podría ser que en realidad esos 3 nucleos no acceden a la L3, sino directamente a la ram. Además eso explicaría la velocidad cuando hago la prueba con bloques de 5000 KB por thread, ya que al estar los 6MB de L3 disponibles para el núcleo que si funciona bien, puede funcionar ese thread a velocidad de L3, y los threads de los otros nucleos a velocidad de RAM. Cuando el bloque de memoria para el thread del núcleo que funciona bien, supera el tamaño de L3, baja a velocidad de ram.
    Conozco poco sobre el funcionamiento del procesador, por ejemplo sobre cómo se organiza el acceso de los nucleos a la L3, asi que aún no se explicar porqué cuando hago las pruebas, sin asignar afinidad de los threads a los nucleos, si alcanzo los 42 000 MB/s multithread con 3 threads en marcha (pero al activar el cuarto, baja la velocidad).

    ResponderEliminar
  9. Está claro, o en tu sistema el software, por alguna razón extraña, no funciona como debe o tienes un fallo muy curioso en tu Phenom II.

    Yo más bien me inclino por el problema de software...

    Un saludo,

    Carlos Yus.

    ResponderEliminar