Version 4 (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.
- Job OpenMP
- 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}" time ./PiOpenMP
- Envió del job PiOpenMP:
$ module load gcc load gcc/4.6.3 (PATH, MANPATH, LD_LIBRARY_PATH) $ mnsubmit PiOpenMP_template Submitted batch job 621356
- Job openMPI:
- Haciendo uso del programa module cargar el compilador OPENMPI:
[user@login1 ~]$ module load OPENMPI load OPENMPI/1.8.3 (PATH,LD_LIBRARY_PATH,MANPATH)
- Compilar el programa PiMPI.c y generar un ejecutable con el nombre PiMPI:
[user@login1 ~]$ mpicc PiMPI.c -o PiMPI
- Plantilla a ejecutar en el supercomputador:
#!/bin/bash #@ job_name = pi_mpi_%j #@ initialdir = . #@ output = pi_mpi_%j.out #@ error = pi_mpi_%j.err #@ total_tasks = 16 #@ wall_clock_limit = 00:02:00 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}" time mpirun -np 16 ./PiMPI
- Envió del job PiMPI:
$ module load OPENMPI load OPENMPI/1.8.3 (PATH,LD_LIBRARY_PATH,MANPATH)) $ mnsubmit PiMPI_template Submitted batch job 621357
- ¿Qué job ha tardado menos? ¿ Qué ocurre CuUna? 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 dificando 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.