= ALTAMIRA = [[NoteBox(note, Se recomienda la lectura la [https://grid.ifca.es/wiki/Supercomputing/Userguide guía de usuario] del Supercomputador Altamira antes de la realización de la práctica.)]] == Práctica 1 == El objetivo de esta práctica es tomar contacto con el uso del Supercomputador Altamira, así como del sistema de colas [https://computing.llnl.gov/linux/slurm/ SLURM] instalado en él: 1. Conéctese al frontend de Altamira (altamira1.ifca.es) mediante el comando `ssh` (!Linux/Mac OS) o el programa [http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe 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 }}} 2. 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`" }}} 3. Envío de jobs: {{{ [user@login1 ~]$ mnsubmit sleep_template Submitted batch job 621336 }}} 4. 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) }}} 5. 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ódifo del programa [http://moodle.unican.es/moodle27/pluginfile.php/96708/mod_resource/content/0/HelloWorldOpenMP.c 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) }}} 2. Compilar el programa ''HelloWorldOpenMP.c'': {{{ [user@login1 ~]$ gcc HelloWorldOpenMP.c -fopenmp -o HelloWorldOpenMP }}} 3. Plantilla a ejecutar: {{{ #!/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_NNODES}" echo "Nodos: ${SLURM_NODELIST}" ./HelloWorldOpenMP }}} 4. Envió del job openMP: {{{ $ module load gcc load gcc/4.6.3 (PATH, MANPATH, LD_LIBRARY_PATH) $ mnsubmit HelloWorldOpenMP_template Submitted batch job 621342 }}} 5. 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 platilla 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_NNODES}" echo "Nodos: ${SLURM_NODELIST}" ./HelloWorldOpenMP }}} Donde '''XX''' es el número de ''threads''.