Image default
ActualidadArtículosNoticiasProcesadoresSoftwareTecnología

Artículo Técnico: Intel Haswell soportará Transactional Synchronization Extensions (TSX)

Intel Corporation reveló esta semana nuevos datos relativos a la micro arquitectura de su sub-siguiente generación de procesadores de nombre clave “Haswell” (22nm), que se suman a los datos anunciados previamente respecto a las nuevas instrucciones AVX2, sin embargo, el anuncio de esta semana es un poco más especial en virtud de mejorar la eficiencia multi-hilo de Haswell.

Así, Intel Corporation esta semana reveló que su próxima generación de procesadores multi-núcleo de nombre clave “Haswell” soportará “Transactional Synchronization Extensions” (TSX), también denominada de manera más genérica “Hardware Transactional Memory” (HTM). Salvo que seas un programador de alto nivel, no es fácil explicar esta tecnología, pero intentaremos hacerlo con palabras simples y sencillas y si cometemos alguna errata u omisión, nos excusamos desde ya (no soy un experto en el tema, pero le pongo empeño por ustedes).

Multi-Hilo tradicional: bloqueos y serialización.

Para contextualizar… la memoria transaccional es un enfoque para la programación paralela que tiene el potencial de hacer eficiente y mucho más fácil la programación en paralelo de lo que es actualmente. La programación paralela relativamente es fácil cuando una tarea se puede dividir en muchos procesos independientes que no comparten ningún dato;  cada parte se ejecuta en un núcleo del procesador y no es necesaria una coordinación entre los núcleos. Pero las cosas se ponen difíciles cuando diferentes partes de la tarea no son completamente independientes, por ejemplo, si diferentes hilos o instancias necesitan actualizar un simple valor que están compartiendo, entonces el sistema bloquea recursos compartidos cuando éstos son modificados por un hilo del procesador y evita que otros puedan realizar cambios hasta que se desactive el bloqueo.

La solución tradicional usa bloqueos (Locks), de esta forma cada vez que un hilo (thread) necesita alterar un valor compartido, se hace de este “bloqueo”. Cuando esto ocurre los otros hilos no puede tomar este bloqueo mientras el hilo que lo tomo lo esté utilizando, por lo tanto, tienen que esperar su turno. El hilo con el bloqueo puede entonces modificar este valor en el área de memoria compartida (que por lo demás requiere computación compleja, y toma un largo tiempo) antes de liberar el bloqueo para que lo tome el siguiente hilo. Este sistema ciertamente funciona cuando el acceso a estos recursos es con poca frecuencia, pero tiene una serie de problemas o inconvenientes si los hilos solicitan con mucha frecuencia el acceso a este bloqueo, donde los tiempos se incrementan exponencialmente y no puede hacer ningún trabajo útil mientras esperan.

Memoria Transaccional, no más bloqueos.

Con la memoria transaccional la idea es no perder tiempo por sucesivos bloqueos hechos por los hilos o threads a las áreas de memoria compartida, en su lugar los desarrolladores marcan una porción de sus programas que modifican los datos compartidos en transacciones “atómicas” ejecutándolas todas de una sola vez dentro de un bloque atómico, el programa o aplicación puede leer el valor compartido sin bloquearlo, realizando todas las operaciones que necesita realizar, y escribiendo el valor que necesita finalizando y confirmando la transacción.

En palabras más sencillas con la memoria transaccional distintos hilos trabajan simultáneamente en zonas en las que antes no les era permitido. Sólo en el caso de que un “thread” intente acceder o modificar al mismo tiempo los mismos recursos que otro thread, se pondría en marcha el bloqueo para que no se entorpezcan. Esto significa que se retrasarán menos operaciones debido a bloqueos innecesarios.

La parte más inteligente sucede con la operación de confirmación: el sistema de memoria transaccional comprueba si los datos compartidos se han modificado desde que la operación atómica se inició. Si no es así, la confirmación sólo hace que la actualización y el hilo puedan continuar con su trabajo. Si el valor compartido ha cambiado, se anula la transacción, y el trabajo que el hilo realizo se deshace. Normalmente cuando esto sucede, el programa simplemente volverá a intentar la operación. Pero ya no tendremos bloqueos que ralenticen los procesos de acceso de los hilos.

Explicado esto las nuevas extensiones de sincronización de Intel van justamente en este sentido y son muy útiles en aplicaciones multi-hilo que hacen uso de memoria compartida que emplea mecanismos de sincronización. Gracias a las instrucciones TSX, las aplicaciones multi-hilo se ejecutarán más rápido en los chips multi-core/multi-threaded.

Intel Transactional Synchronization Extensions.

El soporte para memoria transaccional en Haswell Intel le ha nombrado como Transactional Synchronization Extensions (TSX) que vienen en dos partes: Hardware Lock Elison (HLE) que permite una fácil conversión de programas basados en “bloqueos” en programas transaccionales y Restricted Transactional Memory (RTM) que es una implementación de memoria transaccional más completa.

Las instrucciones TSX proveerán, por lo tanto, un set de instrucciones y extensiones que permitirá a los programadores especificar regiones de código (también llamadas regiones transaccionales) para sincronización transaccional. Los programadores pueden usar estas extensiones para lograr un mejor rendimiento en sus aplicaciones multi-hilo.

Con la sincronización transaccional, el hardware puede determinar dinámicamente si los hilos (Threads) se deben serializar a través de secciones protegidas (lock-protected critical sections) y realizar la serialización sólo cuando sea necesario.  Según nos explica James Reinders en Intel.

With transactional synchronisation, the hardware can determine dynamically whether threads need to serialise through lock-protected critical sections, and perform serialisation only when required. This lets the processor expose and exploit concurrency that would otherwise be hidden due to dynamically unnecessary synchronisation

Según nos explica Reinder, si el programador hace su trabajo correctamente y la ejecución transaccional se completa satisfactoriamente, todas las operaciones de memoria realizadas en ese segmento de código parecerán haber sido ejecutadas simultáneamente desde la perspectiva de otros procesadores en el sistema.

Memoria Transaccional por hardware: desde HPC a los PC

Cabe destacar que la memoria transaccional no es algo nuevo, es una técnica utilizada en Computación de Alto Rendimiento (HPC), donde cobra vital importancia en virtud de la cantidad de procesadores y núcleos que poseen grandes supercomputadores que hemos visto en las notas al respecto.

Hace algunos años en Agosto de 2009, Intel, IBM y Sun fundaron un Grupo a fin de elaborar una especificación común para la memoria transaccional. Los tres estaban planeando incorporar esta característica en sus próximas generaciones de procesadores, SUN por ejemplo tenía la intención de hacerlo en su procesador Rock, pero fue cancelado luego de la adquisición por parte de Oracle. Un año después  (2010) IBM tuvo más éxito incorporando esta técnica en el  Blue Gene / P. En la Conferencia de Supercomputación en Seattle el 2011, el primer procesador con “Hardware Transactional Memory” (HTM) fue presentado bajo el nombre oficial de PowerPC A2.

El próximo año Intel traerá esta tecnología al mercado de consumo con sus procesadores Haswell que soportaran esta técnica que en resumidas palabras incrementan el rendimiento de aplicaciones multi-hilo de una manera dinámica al ejecutar código multi-hilo más eficientemente en el acceso a recursos compartidos.

Con esto Intel no quiere implantar nuevos modelos de programación paralela, pero si dotar de una mejor preparación a su próxima generación de procesadores para interpretar más eficientemente en ciertos niveles y escenarios de cómputo, operaciones multi-hilo y permitir una implementación más eficiente de nuevos modelos de programación. De paso ganarse a los programadores para que sus aplicaciones estén optimizados para sus procesadores.

Haswell, por lo tanto, brindará extensiones de Ejecución Transaccional por Hardware en lugar de Software Transactional Memory (STM) como han venido siendo los esfuerzos de Intel por años y así ha refinado su compilador Intel C++ STM. Actualmente la gran mayoría de los procesadores no soporta HTM y el sistema de memoria transaccional se ha centrado en implementaciones basadas en software, por lo que estos procesadores de alguna u otra forma tienen que emular -por software- esta implementación. Con Haswell esto será distinto ya que su arquitectura permitirá memoria transaccional por hardware a través de instrucciones y extensiones TSX.

Según el último roadmap de Intel, Haswell (22nm), que es el sucesor del –aun no lanzado- Ivy bridge (22nm) llegará entre los meses de marzo y junio del próximo año.

Pueden encontrar más información al respecto en: [Intel] y este [PDF] o las fuentes que dejamos aquí abajo, por si lo que intentamos explicar –amateurmente-, no les quedo del todo claro.

Fuentes: [x-bit labs] [Bit-Tech] [arstechnica]

Posts relacionados

Review Asus ROG Zephyrus G16 (2024) [GU605MI]

Mario Rübke

Review Asus ROG Strix Scar 18 (2023): Back to School

Mario Rübke

Intel lanza la primera fundición de sistemas del mundo diseñada para la era de la inteligencia artificial

Mario Rübke