wiki:openMPIvsMPI

Version 2 (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

Utilizando Una vez enviado nuestro primer job, ejecutaremos un job de tipo openMP usando el código del programa HelloWorldOpenMP.

  • 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.