Los puntos de referencia paralelos de la NASA ( NPB ) son un conjunto de puntos de referencia que apuntan a la evaluación del rendimiento de supercomputadoras altamente paralelas . Son desarrollados y mantenidos por la División de Supercomputación Avanzada (NAS) de la NASA (anteriormente el Programa de Simulación Aerodinámica Numérica de la NASA) con sede en el Centro de Investigación Ames de la NASA . La NAS solicita resultados de rendimiento para NPB de todas las fuentes. [1]
Los benchmarks tradicionales que existían antes de NPB, como los bucles Livermore , el LINPACK Benchmark y el NAS Kernel Benchmark Program, generalmente estaban especializados en computadoras vectoriales. Generalmente adolecían de deficiencias, incluidas restricciones de ajuste que impedían el paralelismo y tamaños de problema insuficientes, lo que los hacía inadecuados para sistemas altamente paralelos. Igualmente inadecuados eran los benchmarks de aplicaciones a gran escala debido al alto costo de portabilidad y la falta de disponibilidad de herramientas de paralelización automática de software. [2] Como resultado, NPB se desarrolló en 1991 [3] y se lanzó en 1992 [4] para abordar la consiguiente falta de benchmarks aplicables a máquinas altamente paralelas.
La primera especificación del NPB reconoció que los puntos de referencia deberían incluir
A la luz de estas directrices, se consideró que el único enfoque viable era utilizar una colección de puntos de referencia "en papel y lápiz" que especificaran un conjunto de problemas solo algorítmicamente y dejaran la mayoría de los detalles de implementación a discreción del implementador bajo ciertos límites necesarios.
La NPB 1 definió ocho puntos de referencia, cada uno en dos tamaños de problemas denominados Clase A y Clase B. Se proporcionaron códigos de muestra escritos en Fortran 77. Utilizaron un problema de tamaño pequeño, Clase S , y no estaban destinados a fines de evaluación comparativa. [2]
Desde su lanzamiento, NPB 1 mostró dos debilidades importantes. En primer lugar, debido a su especificación de "papel y lápiz", los proveedores de computadoras generalmente ajustaron sus implementaciones de manera que su rendimiento se volvió difícil de alcanzar para los programadores científicos. En segundo lugar, muchas de estas implementaciones eran propietarias y no estaban disponibles públicamente, ocultando de manera efectiva sus técnicas de optimización. En segundo lugar, los tamaños de los problemas de NPB 1 se quedaron rezagados con respecto al desarrollo de las supercomputadoras a medida que estas últimas continuaban evolucionando. [3]
La NPB 2, publicada en 1996, [5] [6] incluía implementaciones de código fuente para cinco de los ocho puntos de referencia definidos en la NPB 1 para complementar, pero no reemplazar, a la NPB 1. Extendió los puntos de referencia con un tamaño de problema actualizado, la Clase C. También modificó las reglas para enviar los resultados de las evaluaciones comparativas. Las nuevas reglas incluían solicitudes explícitas de archivos de salida, así como archivos fuente modificados y scripts de compilación para garantizar la disponibilidad pública de las modificaciones y la reproducibilidad de los resultados. [3]
La NPB 2.2 contenía implementaciones de dos puntos de referencia más. [5] La NPB 2.3 de 1997 fue la primera implementación completa en MPI . [4] Se distribuyó con versiones en serie de los puntos de referencia consistentes con las versiones paralelas y definió un tamaño de problema Clase W para sistemas de memoria pequeña. [7] La NPB 2.4 de 2002 ofreció una nueva implementación de MPI e introdujo otro tamaño de problema Clase D aún mayor . [6] También aumentó un punto de referencia con subtipos intensivos de E/S . [4]
NPB 3 mantuvo la implementación MPI de NPB 2 y vino en más versiones, a saber, OpenMP , [8] Java [9] y Fortran de alto rendimiento . [10] Estas nuevas implementaciones paralelas se derivaron de los códigos seriales en NPB 2.3 con optimizaciones adicionales. [7] NPB 3.1 y NPB 3.2 agregaron tres puntos de referencia más, [11] [12] que, sin embargo, no estaban disponibles en todas las implementaciones; NPB 3.3 introdujo un tamaño de problema de Clase E. [7] Basado en el NPB 3 de zona única, se lanzó un conjunto de puntos de referencia de múltiples zonas que aprovechan el modelo de programación híbrido MPI/OpenMP bajo el nombre NPB-Multi-Zone ( NPB-MZ ) para "probar la efectividad de los paradigmas y herramientas de paralelización multinivel e híbridos". [1] [13]
A partir del NPB 3.3 se definen once puntos de referencia que se resumen en la siguiente tabla.