jueves, 2 de febrero de 2017

Memoria Transaccional en Intel Haswell 22 nm – ProfessionalSAT

Intel ha confirmado la inclusión en su nueva micro arquitectura Haswell 22 nm (disponible en 2013) de extensiones de aceleración (Transactional Synchronization o Intel TSX) hardware para acceso a memoria transaccional, un avance significativo y que posibilitará un mejor aprovechamiento del acceso simultáneo a RAM de varios threads o cores.

TSX_Haswell_01Los primeros estudios de Intel en memoria transaccional datan de 2005.

En este artículo de perfil bastante técnico explico en que consiste el concepto de memoria transaccional y las variaciones respecto al manejo actual de la memoria y hago una introducción de la implementación de Intel en sus nuevos cores Haswell 22 nm.

Intel_HaswellIntel Haswell 22 nm.

El modelo actual

Durante años, y en la actualidad, el acceso a memoria concurrente por varios procesos o threads se resolvía mediante locks o bloqueos (Lock-based synchronization of shared data access) de la página de RAM.

Una dirección de memoria a la que un proceso (un thread) accede se bloquea hasta que el thread daba señal de que había acabado su trabajo. Esto se hace para proteger contra colisiones en acceso a memoria: un thread puede intentar escribir (cambiar el valor) en una dirección de memoria mientras otro thread está procesando instrucciones con el valor pasado (el anterior a la escritura) de esa posición.

En este caso podría darse corrupción de datos y un fallo de ejecución en el software. De ahí el lock pues debe siempre respetarse el orden temporal de los accesos a memoria que colisionen. Gracias a Memory disambiguation, sólo el de los que colisiones. Anteriormente todo el proceso de acceso a RAM era en orden (in order).

Digamos que este mecanismo lock-based es altamente pesimista, por algunas veces que pueden haber problemas en el acceso concurrente se prohíbe siempre el acceso simultáneo y se serializa el acceso a memoria. Esto tiene en muchos algoritmos graves consideraciones prestacionales pues limita la ejecución multithread.

La memoria transaccional, de la que hay numerosas implementaciones por software (aquejadas de graves problemas de velocidad), propone un mecanismo para evitar estos locks y con ello conseguir accesos concurrentes a paginas o estructuras en RAM cuando no haya conflictos (colisiones de memoria).

Memoria transaccional en Intel Haswell 22 nm

Intel integra en Haswell una implementación de Intel TSX de dos vías (HLE y RTM) para la memoria transaccional, ambas con soporte de aceleración hardware.

TSX_Haswell_02

En la imagen anterior las cinco operaciones se deben ejecutar de manera secuencial, en orden temporal. Con memoria transaccional pueden ejecutarse simultáneamente por varios threads con la condición de que no se altere el resultado final.

Intel-Tick-Tock

En esencia la memoria transaccional permite un acceso paralelo a RAM por varios threads aunque accedan a la vez a las mismas estructuras o páginas. Y en caso de conflicto proporciona un mecanismo para deshacer los procesos y volver a una ejecución serializada de los accesos a RAM.

HLE (Hardware Lock Elision)

HLE funciona del siguiente modo: mediante prefijos modifican la función normal de las instrucciones de acceso a memoria que bloquean y desbloquean la estructura de datos en RAM.

Para realizar un lock se utiliza el prefijo XACQUIRE, para deshacerlo XRELEASE. Para el thread que utiliza el prefijo XACQUIRE el lock se ejecuta con normalidad (el thread cree que la estructura de datos en RAM está bloqueada para toda la máquina), en realidad no es así y el resto de threads pueden procesar con acceso a dicha estructura.

Cualquier thread puede entonces acceder al lock (con XACQUIRE) y operar, con lo que puede obtenerse un incremento tangible de concurrencia y velocidad.

HLE es un modo en el que el procesador miente a los threads y les concede el lock incondicionalmente y simultáneamente, pero la CPU tiene un mecanismo de resolución de conflictos por si el thread escribe en el lock. De hecho el procesador monitoriza por hardware todas las direcciones RAM que el thread lee o escribe desde el momento en que accede al lock.

En este caso todas las operaciones ejecutadas posteriormente sobre el lock son inválidas y la CPU debe cancelarlas (se aborta la transacción) y precargar los datos anteriores conocidos como correctos antes de realizarse el lock.

En caso (XRELEASE) de ausencia de conflictos todas las operaciones en RAM se ejecutan atómicamente en una sola transacción actualizando así el contenido de la RAM para que el resto de threads puedan acceder a estos datos actualizados.

Lo verdaderamente interesante de HLE es que es compatible con hardware anterior, las CPUs anteriores a Haswell simplemente ignoran los prefijos XACQUIRE y XRELEASE porque para ellas no significan nada y ejecutan el código con el antiguo modelo lock-based.

RTM: Restricted Transactional Memory

RTM es incompatible con procesadores actuales. Los programadores de un software deberán desarrollar dos versiones del código (una con RTM y una lock based). En CPUs Haswell y compatibles se ejecutará la versión optimizada RTM.

A día de hoy RTM tiene un menor interés, sólo comentaré que cuenta con nuevas instrucciones (XBEGIN, XEND, ABORT) que el código utilizará explícitamente. Es decir, es totalmente incompatible con hardware actual y llevará años llegar a ver implementaciones significativas de RTM.

Conclusiones

Intel TSX es otra extensión al juego de instrucciones X86 y ya van… rondamos ya las 1000 instrucciones. La utilidad de TSx se hará evidente en software multi-threaded que compartan datos activamente. Por ejemplo programas que accedan en paralelo a matrices de datos…

Las-CPUs-Intel-Haswell-llegan-en-2013

Habrá que ver aplicación por aplicación los beneficios que aportará, será interesante en bases de datos, en cálculos de simulaciones físicas, incluso en determinadas aplicaciones de Excel.

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

El que tenga dudas o aportaciones tiene para ello la sección de comentarios, intentaré responder a todos y con la máxima claridad. Los Blogs deben de ser lugares de intercambio y agradezco vuestro feedback.

Carlos Yus Valero – informaticapremium      informaticapremium-logo-150px[3]

2 comentarios:

  1. hola no hay nada por el estilo en AMD?

    ResponderEliminar
  2. Sí, AMD lleva años con el concepto de memoria transaccional pero no ha hablado de implementarlo en ningún diseño.

    AMD lo llama extensiones ASF (advanced Synchronization Facility):

    http://blogs.amd.com/developer/2009/11/17/the-velox-research-project/

    Saludos,

    Carlos Yus Valero.

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.