Desafío informático HP-SEE

Apreciamos tus habilidades de programación, pero al mismo tiempo te ofrecemos un desafío. ¿Eres capaz de escribir el código de multiplicación de matriz-matriz más rápido?

Considere una matriz de tamaño variable N × N y un código de multiplicación matriz-matriz dado aquí. Intente modificar este código y mejorar su rendimiento. Las modificaciones se pueden implementar en C y / o lenguaje ensamblador, con paralelización OpenMP. El número total de operaciones de coma flotante durante la multiplicación matriz-matriz es (2N – 1) N ^ 2.

Además de la función main (int argc, char ** argv), la versión inicial del código utiliza tres funciones:

  • gettime (void) devuelve la hora del sistema y se usa para cronometrar el código;
  • matfill (long N, double * mat, double val) inicializa todos los elementos de una matriz de N × N mat al valor val; de esta manera, puede verificar fácilmente que el nuevo algoritmo produce un resultado correcto, pero el algoritmo tiene que cubrir las matrices A y B generadas aleatoriamente;
  • matmul (long N, double * a, double * b, double * c) realiza la multiplicación matriz-matriz de las matrices ayby ​​almacena el resultado en una matriz c. Todas las matrices tienen el mismo tamaño N × N.

Las modificaciones del código proporcionado deben realizarse solo en la función matmul (long N, double * a, double * b, double * c). El formato de los datos de entrada y salida debe seguir siendo el mismo: el código solo debe aceptar un argumento de la línea de comando (el tamaño de la matriz lineal N), y cuando se ejecuta, debe producir una salida de una sola línea, que contiene el tamaño de la matriz, el tiempo transcurrido (en segundos) y el recuento estimado de operaciones de punto flotante por segundo (flops). Por ejemplo:

[[email protected] mmm]$ ./mmm-v1 1000
   1000     7.144675e+00     2.799288e+08

El rendimiento de su código se medirá en una computadora con dos CPU Intel Xeon E5345 de cuatro núcleos a 2,33 GHz (4 MB de caché L3) y 32 GB de RAM. El código se compilará con el compilador Intel (versión 13.0.0) sin optimización (-O0) y con el indicador de paralelización OpenMP (-openmp). No se puede llamar a ninguna biblioteca externa, mientras que cualquier reordenamiento de los elementos de la matriz (como la transposición) debe realizarse dentro de la función temporizada matmul. El código fuente enviado debe ejecutarse sin errores ni pérdidas de memoria, y la precisión del resultado de la multiplicación debe corresponder a 64 bits (precisión doble). La puntuación se realizará para los tamaños N = 400, 800, 1200, 1600, 2400, 3200, 4800 y 9600. Se debe usar el mismo código para todos los tamaños de matriz, por lo que no se permite la codificación fija de valores particulares de N .

Resultados del desafío informático HP-SEE

El HP-SEE Computing Challenge se organizó entre el 26 de septiembre y el 15 de noviembre de 2012. En total, 14 participantes de 5 países diferentes enviaron 49 códigos. Los concursantes han podido presentar varias versiones del código, pero solo se tuvo en cuenta el código con mayor rendimiento de cada concursante. El desempeño de cada código fue medido manualmente por el comité de desafío. El código con el rendimiento general más alto fue presentado por Alexandros Sokratis Papadakis (Universidad de Patras, Grecia). La siguiente figura muestra la comparación de las actuaciones de los códigos de los concursantes medidos para tamaños de matriz N = 400, 800, 1200, 1600, 2400, 3200, 4800 y 9600.

INIT: rendimiento de la versión inicial del código

Elegibilidad

Los concursantes elegibles son estudiantes de pregrado / posgrado de los siguientes países: Grecia, Bulgaria, Rumania, Hungría, Serbia, ARY de Macedonia, Albania, Bosnia y Herzegovina, Montenegro, Moldavia, Armenia, Georgia, Azerbaiyán.

Envío de código

Su versión del código de impugnación debe enviarse por correo electrónico a [email protected] En el mismo correo electrónico debe proporcionar la siguiente información: nombre completo, nombre de la institución y país. Un concursante puede enviar varias versiones del código, pero solo se tendrá en cuenta el código con el mejor rendimiento. El rendimiento del código será medido manualmente por el comité de desafío y publicado en esta página junto con los resultados del desafío. Además, cada concursante recibirá los resultados del desafío por correo electrónico.

Fecha límite

El desafío informático HP-SEE está abierto hasta el 31 de octubre de 2012. La fecha límite se amplió hasta el 15 de noviembre de 2012.

Premio

El concursante con el mejor código recibirá una cobertura de costes de hasta 900 euros por su participación en un evento de formación de HPC organizado por HP-SEE o PRACE. Para obtener información sobre los próximos eventos de capacitación, visite la página de la Agenda de capacitación de HP-SEE o el portal de capacitación de PRACE. El ganador deberá proporcionarnos una prueba de su condición de estudiante para poder recibir su premio.