En arquitectura informática , la aceleración es un número que mide el rendimiento relativo de dos sistemas que procesan el mismo problema. En términos más técnicos, es la mejora en la velocidad de ejecución de una tarea ejecutada en dos arquitecturas similares con diferentes recursos. El concepto de aceleración fue establecido por la ley de Amdahl , que se centró especialmente en el procesamiento en paralelo . Sin embargo, la aceleración se puede utilizar de forma más general para mostrar el efecto sobre el rendimiento después de cualquier mejora de los recursos.
La aceleración se puede definir para dos tipos diferentes de cantidades: latencia y rendimiento . [1]
La latencia de una arquitectura es el recíproco de la velocidad de ejecución de una tarea:
dónde
El rendimiento de una arquitectura es la tasa de ejecución de una tarea:
dónde
La latencia se mide a menudo en segundos por unidad de carga de trabajo de ejecución. El rendimiento se mide a menudo en unidades de carga de trabajo de ejecución por segundo. Otra unidad de rendimiento son las instrucciones por ciclo (IPC) y su recíproco, los ciclos por instrucción (CPI), es otra unidad de latencia.
La aceleración no tiene dimensiones y se define de forma diferente para cada tipo de cantidad, de modo que se trata de una métrica consistente.
La aceleración en latencia se define mediante la siguiente fórmula: [2]
dónde
La aceleración en la latencia se puede predecir mediante la ley de Amdahl o la ley de Gustafson .
La aceleración del rendimiento se define mediante la fórmula: [3]
dónde
Estamos probando la efectividad de un predictor de saltos en la ejecución de un programa. Primero, ejecutamos el programa con el predictor de saltos estándar en el procesador, lo que produce un tiempo de ejecución de 2,25 segundos. A continuación, ejecutamos el programa con nuestro predictor de saltos modificado (y esperamos que mejorado) en el mismo procesador, lo que produce un tiempo de ejecución de 1,50 segundos. En ambos casos, la carga de trabajo de ejecución es la misma. Usando nuestra fórmula de aceleración, sabemos
Nuestro nuevo predictor de ramas ha proporcionado una aceleración de 1,5 veces respecto al original.
También podemos medir la aceleración en ciclos por instrucción (CPI), que es una latencia. Primero, ejecutamos el programa con el predictor de bifurcación estándar, que produce un CPI de 3. A continuación, ejecutamos el programa con nuestro predictor de bifurcación modificado, que produce un CPI de 2. En ambos casos, la carga de trabajo de ejecución es la misma y ambas arquitecturas no están en secuencia ni son paralelas. El uso de la fórmula de aceleración da como resultado
También podemos medir la aceleración en instrucciones por ciclo ( IPC ), que es un rendimiento y el inverso del CPI. Si utilizamos la fórmula de aceleración obtenemos
Logramos la misma aceleración de 1,5x, aunque medimos cantidades diferentes.
Sea S la aceleración de ejecución de una tarea y s la aceleración de ejecución de la parte de la tarea que se beneficia de la mejora de los recursos de una arquitectura. La aceleración lineal o aceleración ideal se obtiene cuando S = s . Al ejecutar una tarea con aceleración lineal, al duplicar la aceleración local se duplica la aceleración general. Como esto es ideal, se considera que tiene una escalabilidad muy buena .
La eficiencia es una métrica de la utilización de los recursos del sistema mejorado definido como
Su valor suele estar entre 0 y 1. Los programas con aceleración lineal y los programas que se ejecutan en un solo procesador tienen una eficiencia de 1, mientras que muchos programas difíciles de paralelizar tienen una eficiencia como 1/ln( s ) [ cita requerida ] que se acerca a 0 a medida que aumenta el número de procesadores A = s .
En contextos de ingeniería, las curvas de eficiencia se utilizan con más frecuencia para gráficos que las curvas de aceleración, ya que
En contextos de marketing, las curvas de aceleración se utilizan con más frecuencia, en gran medida porque suben y se dirigen a la derecha y, por lo tanto, parecen mejores para los menos informados.
A veces se observa una aceleración superior a A cuando se utilizan procesadores A en computación paralela , lo que se denomina aceleración superlineal . La aceleración superlineal ocurre rara vez y suele confundir a los principiantes, que creen que la aceleración máxima teórica debería ser A cuando se utilizan procesadores A.
Una posible razón para la aceleración superlineal en los cálculos de bajo nivel es el efecto de caché resultante de las diferentes jerarquías de memoria de un ordenador moderno: en la computación paralela, no solo cambia la cantidad de procesadores, sino también el tamaño de las cachés acumuladas de los diferentes procesadores. Con un mayor tamaño de caché acumulada, más o incluso todo el conjunto de trabajo puede caber en las cachés y el tiempo de acceso a la memoria se reduce drásticamente, lo que provoca una aceleración adicional además de la del cálculo real. [4]
Una situación análoga ocurre cuando se buscan grandes conjuntos de datos, como los datos genómicos buscados por las implementaciones de BLAST . En este caso, la RAM acumulada de cada uno de los nodos de un clúster permite que el conjunto de datos se mueva del disco a la RAM, lo que reduce drásticamente el tiempo que requiere, por ejemplo, mpiBLAST para buscarlo. [5]
También pueden producirse aceleraciones superlineales cuando se realiza un retroceso en paralelo: una excepción en un hilo puede provocar que varios otros hilos retrocedan antes de tiempo, antes de llegar a la excepción. [6]
También pueden producirse aceleraciones superlineales en implementaciones paralelas de ramificación y acotación para optimización: [7] el procesamiento de un nodo por un procesador puede afectar el trabajo que otros procesadores necesitan hacer para los otros nodos.