stringtranslate.com

Multihilo especulativo

La especulación a nivel de subprocesos ( TLS ), también conocida como subprocesos múltiples especulativos o paralelización especulativa, [1] es una técnica para ejecutar especulativamente una sección de código de computadora que se anticipa que se ejecutará más adelante en paralelo con la ejecución normal en un sistema independiente separado. hilo . Tal hilo especulativo puede necesitar hacer suposiciones sobre los valores de las variables de entrada. Si resultan ser inválidos, entonces las partes del hilo especulativo que dependen de estas variables de entrada deberán descartarse y aplastarse. Si las suposiciones son correctas, el programa puede completarse en un tiempo más corto siempre que el hilo se haya podido programar de manera eficiente.

Descripción

TLS extrae subprocesos del código serie y los ejecuta de forma especulativa en paralelo con un subproceso seguro. El hilo especulativo deberá descartarse o volver a ejecutarse si sus presunciones sobre el estado de entrada resultan no válidas. Es una técnica de paralelización dinámica (tiempo de ejecución) que puede descubrir paralelismo que las técnicas de paralelización estática (tiempo de compilación) pueden no lograr explotar porque en tiempo de compilación no se puede garantizar la independencia de los subprocesos. Para que la técnica logre el objetivo de reducir el tiempo total de ejecución, debe haber recursos de CPU disponibles que puedan ejecutarse eficientemente en paralelo con el hilo principal seguro. [2]

TLS asume con optimismo que una determinada porción de código (generalmente bucles) se puede ejecutar de forma segura en paralelo. Para ello, divide el espacio de iteración en fragmentos que se ejecutan en paralelo mediante diferentes subprocesos. Un monitor de hardware o software garantiza que se mantenga la semántica secuencial (en otras palabras, que la ejecución avance como si el bucle se ejecutara secuencialmente). Si aparece una violación de dependencia, el marco especulativo puede optar por detener toda la ejecución paralela y reiniciarla; detener y reiniciar los hilos infractores y todos sus sucesores, para recibir datos correctos; o detener exclusivamente el hilo infractor y sus sucesores que han consumido datos incorrectos del mismo. [3]

Referencias

  1. ^ Estebanez, Álvaro (2017). "Una encuesta sobre técnicas de especulación a nivel de subprocesos". Encuestas de Computación ACM . 49 (2): 1–39. doi :10.1145/2938369. S2CID  423292.
  2. ^ Martínez, José F.; Torrellas, Josep (2002). «Sincronización especulativa» (PDF) . Actas de la décima conferencia internacional sobre soporte arquitectónico para lenguajes de programación y sistemas operativos (ASPLOS-X) - ASPLOS '02 . ACM. pag. 18. doi : 10.1145/605397.605400. ISBN 1581135742. S2CID  9189828. Archivado desde el original (PDF) el 18 de noviembre de 2018.
  3. ^ García Yaguez, Álvaro (2014). "Aplastando alternativas para la paralelización especulativa basada en software" . Transacciones IEEE en computadoras . 63 (7): 1826–1839. doi :10.1109/TC.2013.46. S2CID  14081801.

Otras lecturas