wiki:Altamira

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

El objetivo de esta práctica es tomar contacto con el uso del Supercomputador Altamira, así como del sistema de colas SLURM instalado en él:

  1. Conéctese al frontend de Altamira (altamira1.ifca.es) mediante el comando ssh (Linux/Mac OS) o el programa PyTTY (Windows). Para ello, previamente cada alumno ha recibido un correo con una cuenta y una clave de acceso:
    [user@localmachine ~]$ ssh user@altamira1.ifca.es
    
  1. Desde el frontend, utilizando la plantilla que se adjunta enviar un job. Para lo cual, será necesario utilizar el comando mnsubmit, así como los editores vi o nano.

Plantilla:

#!/bin/bash
#@ job_name = sleep_%j
#@ initialdir = .
#@ output = sleep_%j.out
#@ error = sleep_%j.err
#@ total_tasks = 1
#@ wall_clock_limit = 00:02:00
 
echo "Nodo: ${SLURM_NODELIST}"

echo "Hora de inicio `date`"
sleep 30
echo "Hora de fin `date`"
  1. Envío del job:
    [user@login1 ~]$ mnsubmit sleep_template
    Submitted batch job 621336
    
  2. Para monitorizar el job use el comando mnq:
    [user@login1 ~]$ mnq
      JOBID     NAME     USER    STATE       TIME TIMELIMIT CPUS  NODES NODELIST(REASON)
     621336 0.sleep_     user  PENDING       0:00      2:00    1      1 (Priority)
    
    
  3. Comprobar el resultado obtenido en los ficheros de output(sleep_%j.out) y error(sleep_%j.err).

Práctica 2

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

  1. Haciendo uso del programa module cargar el compilador gcc:
    [user@login1 ~]$ module load gcc
    load gcc/4.6.3 (PATH, MANPATH, LD_LIBRARY_PATH)
    
  1. Compilar el programa HelloWorldOpenMP.c y generar un ejecutable con el nombre HelloWorldOpenMP:
    [user@login1 ~]$ gcc HelloWorldOpenMP.c -fopenmp -o HelloWorldOpenMP
    
  1. Plantilla a ejecutar en el supercomputador:
    #!/bin/bash 
    #@ job_name = openmp_%j
    #@ initialdir = .
    #@ output = openmp_%j.out
    #@ error = openmp_%j.err
    #@ total_tasks = 32
    #@ 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}"
    
    ./HelloWorldOpenMP
    

Para mas información sobre las variables de entorno link

  1. Envió del job openMP:
    $ module load gcc
    load gcc/4.6.3 (PATH, MANPATH, LD_LIBRARY_PATH)
    $ mnsubmit HelloWorldOpenMP_template
    Submitted batch job 621342
    
  1. Una vez finalizado el job, compruebe el resultado obtenido en los ficheros output (openmp_%j.out) y error (openmp_%j.err).

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 el número de nodos. 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.

  1. Envíe 3 jobs con XX igual a 8, 32 y 64, y compruebe si los resultados son el esperados.