= 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 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 [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 del job: {{{ [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ódigo 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'' y generar un ejecutable con el nombre ''HelloWorldOpenMP'': {{{ [user@login1 ~]$ gcc HelloWorldOpenMP.c -fopenmp -o HelloWorldOpenMP }}} 3. 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 [http://slurm.schedmd.com/sbatch.html#SECTION_OUTPUT%20ENVIRONMENT%20VARIABLES link] 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. 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, 16 y 32, y compruebe si los resultados son el esperados.