Definiciones previas
Rendimiento teórico
El rendimiento teórico o rendimiento pico hace referencia a la potencia máxima de procesamiento que sería capaz de proporcionar una CPU o sistema en un entorno de funcionamiento ideal, donde todos sus componentes funcionaran al máximo de sus especificaciones.
Como indica el nombre, se trata de una medida teórica que no se puede obtener en situaciones reales debido, entre otras razones, por el cuello de botella entre la velocidad del procesador y la memoria, y la dependencia de datos.
La manera de determinar el rendimiento pico de un sistema es muy simple. Como ya se ha comentado, solo hay que tener en cuenta las especificaciones técnicas del procesador, en concreto su frecuencia de funcionamiento y el número de operaciones que es capaz de finalizar por ciclo (arquitecturas superescalares, operaciones vectoriales, etc):
Rpeak = nº total de cores cores · frecuencia · número de operaciones por ciclo
Rendimiento empírico
Con el fin de obtener unos datos más cercanos a la realidad, se suelen utilizar una serie de pruebas de rendimiento o benchmarks. Existen una gran cantidad de tipos de benchmarks, que pueden medir distintos aspectos de rendimiento de los equipos informáticos, como el sistema de almacenamiento, ancho de banda a memoria, procesamiento gráfico,… o el rendimiento global del sistema. Algunos son totalmente sintéticos (programas diseñados para medir el rendimiento) como kernels o porciones de programas reales.
Flops
La unidad de con la que se suele medir el rendimiento son los flops, u operaciones en coma flotante por segundo. Al tomarse como unidad de rendimiento estas operaciones genéricas, se hace una abstracción la ISA concreta del procesador, lo que permite comparar arquitecturas distintas. Se suelen usar doble precisión (64 bits) para realizar las comparaciones, aunque con la irrupción del machine learning, también se están usando precisiones más bajas, e incluso operaciones de enteros.
Pruebas de rendimiento
En este entorno de computación científica, las métricas más relevantes son la potencia de cálculo y los anchos de banda y latencias a memoria, red de comunicaciones y almacenamiento. Los benchmarks más populares en entornos HPC son Linpack y HPCG.
Linpack es una librería que resuelve problemas de algebra lineal. Ha sido muy utilizada como benchmark de CPU. HPL (High Performance Linpack) es una versión paralela y optimizada de la misma que se usa para medir el rendimiento de los supercomputadores, y es la utilizada en la lista del TOP500 (los 500 sistemas más potentes del mundo).
HPCG (high performance conjugate gradient) es un benchmark relativamente nuevo, creado con la intención de modelar el acceso real que hacen los programas a memoria principal. Los accesos a memoria suelen hacer de cuello de botella por lo que este benchmark obtiene solo una fracción de la potencia bruta de la CPU. Complementa a Linpack, el cual hace un uso más intensivo del procesador, por lo que se suelen dar los valores de ambos benchmarks para describir un sistema.
Rendimiento de los nodos de PROTEUS
En las siguiente tablas se muestran los resultados obtenidos al calcular el máximo teórico y al evaluar los nodos mediante los benchmarks Linpack y HPCG.
Se han realizado dos evaluaciones: en una se ha empleado un único núcleo y en la otra todos los núcleos que contiene el nodo.
Máximo teórico – Rpeak (GFLOPS)
Calculado con la formula de más arriba y teniendo en cuenta que el número de operaciones por ciclo para cada arquitectura (4, 16 o 32), obtenemos los siguientes Rpeaks:
Apodo | Núcleo único | Nodo Completo |
---|---|---|
Calypso | 9,32 | 74,56 |
Kratos | 13,88 | 166,56 |
Hermes v1 | 41,6 | 832 |
Hermes v2 | 38,4 | 768 |
Metis v1 | 83,2 | 2329,6 |
Metis v2 | 86,4 | 2073,6 |
Linpack
Se ha usado la versión de HPL ofrecida por Intel, la cual está especialmente optimizada para sus procesadores. Las pruebas se han hecho utilizando un único núcleo y con todos los disponibles en el sistema. También, para aquellas CPUs que soportan TurboBoost, se han recogido los resultados con esta opción activa y desactivada:
Apodo | Núcleo único | % | No Turbo | % | Nodo Completo | % |
---|---|---|---|---|---|---|
Calypso | 8,87 | 95,1 | – | – | 66.09 | 88,6 |
Kratos | 14,09 | 102,5 | 13,3 | 95,8 | 151,6 | 91 |
Hermes v1 | 42,68 | 109,7 | 38,99 | 93,7 | 671,2 | 80,6 |
Hermes v2 | ||||||
Metis v1 | ||||||
Metis v2 | 1534,51 | 74 |
HPCG
Esta tabla se encuentra en construcción… Disculpa las molestias.
Apodo | Núcleo único | % | No Turbo | % | Nodo Completo | % |
---|---|---|---|---|---|---|
Calypso | – | – | ||||
Kratos | ||||||
Hermes v1 | ||||||
Hermes v2 | ||||||
Metis v1 | ||||||
Metis v2 |
Estas distintas familias tienen un rendimiento muy diferente. Un mismo programa puede tardar distintos tiempos en completarse según el nodo en que corra. Para ayudar a la estimación del tiempo de ejecución se ha realizado una comparativa de la potencia de cálculo de las CPUs de cada familia.
La potencia de cálculo de un sistema se suele medir en FLOPS (Floating Point Operations per Second), esto es, el número de operaciones en coma flotante por segundo, normalmente en doble precisión. Esta medida es independiente del conjunto de instrucciones de la CPU y sirve para comparar sistemas con arquitecturas distintas.
La potencia de cálculo de los procesadores actuales permiten tasas de miles de millones de operaciones por segundo, por lo que se suele usar el múltiplo GFLOPS.