Version 3 (modified by carlos, 7 years ago) (diff) |
---|
ALTAMIRA
Se recomienda la lectura la guía de usuario del Supercomputador Altamira antes de la realización de las prácticas.
Práctica 1
Realizar el cálculo del número Pi mediante openMP y openMPI. El objetivo de esta práctica es comprobar que opción es más eficiente desde el punto de vista del tiempo de ejecución. Para este propósito usaremos los códigos PiOpenMP.c y PiMPI.c.
- Haciendo uso del programa module cargar el compilador gcc:
[user@login1 ~]$ module load gcc load gcc/4.6.3 (PATH, MANPATH, LD_LIBRARY_PATH)
- Compilar el programa PiOpenMP.c y generar un ejecutable con el nombre PiOpenMP:
[user@login1 ~]$ gcc PiOpenMP.c -fopenmp -o PiOpenMP
- Plantilla a ejecutar en el supercomputador:
#!/bin/bash #@ job_name = pi_openmp_%j #@ initialdir = . #@ output = pi_openmp_%j.out #@ error = pi_openmp_%j.err #@ total_tasks = 16 #@ wall_clock_limit = 00:02:00 export OMP_NUM_THREADS=16 echo "Numero de procesos: ${SLURM_NPROCS}" echo "Numero de nodos: ${SLURM_JOB_NUM_NODES}" echo "Numero de procesos por nodo: ${SLURM_JOB_CPUS_PER_NODE}" echo "Nodos: ${SLURM_JOB_NODELIST}" ./PiOpenMP
Más información sobre las variables de entorno (${SLRUM_*}) en el link.
- Envió del job PiOpenMP:
$ module load gcc load gcc/4.6.3 (PATH, MANPATH, LD_LIBRARY_PATH) $ mnsubmit PiOpenMP_template Submitted batch job 621356
- Una vez finalizado el job, compruebe el resultado obtenido en los ficheros output (openmp_%j.out) y error (openmp_%j.err). ¿ El resultado obtenido es el esperado? ¿Por qué?.
Práctica 3
Repita el envío del job de la práctica 3 modificando el número de threads a ejecutar, pero sin modificar la variable total_tasks. Para ello, utilice la variable de entorno OMP_NUM_THREADS.
- La plantilla a utilizar en ese caso será:
#!/bin/bash #@ job_name = openmp_%j #@ initialdir = . #@ output = openmp_%j.out #@ error = openmp_%j.err #@ total_tasks = 32 #@ wall_clock_limit = 00:02:00 export OMP_NUM_THREADS=XX echo "Numero de procesos: ${SLURM_NPROCS}" echo "Numero de nodos: ${SLURM_JOB_NUM_NODES}" echo "Numero de procesos por nodo: ${SLURM_JOB_CPUS_PER_NODE}" echo "Nodos: ${SLURM_JOB_NODELIST}" ./HelloWorldOpenMP
Donde XX es el número de threads a ejecutar.
- Envíe 3 jobs con XX igual a 8, 16 y 32, y compruebe si los resultados son el esperados.