Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
es:centro:servizos:hpc:escribir_script [2016/02/12 16:19] – [Parámetros PBS] fernando.guillenes:centro:servizos:hpc:escribir_script [2017/10/09 10:27] (actual) – [Variables de entorno durante la ejecución] diego.cougil
Línea 6: Línea 6:
 === Compilación C/C++/Fortran === === Compilación C/C++/Fortran ===
  
-La colección de compiladores GNU (GNU Compiler Collection, GCC) es accesible en el clúster a través de sus comandos y opciones habituales. Por defecto, los compiladores instalados en el sistema pertenecen a la versión 4.7.2 de GCC (versión por defecto del SO).((Esta versión de los compiladores disponen de una opción de optimización (''march'') para generar código específico para la arquitectura de los nodos del clúster (procesadores Opteron 6200 series, 15th Family //Bulldozer// Interlagos). Esta opción de compilación no garantiza el cumplimiento del estándar matemático definido en GCC, por lo que no se recomienda su uso, salvo en aquellos casos en los que se conozca en profundidad el comportamiento de las opciones de compilación.))+La colección de compiladores GNU (GNU Compiler Collection, GCC) es accesible en el clúster a través de sus comandos y opciones habituales. Por defecto, los compiladores instalados en el sistema pertenecen a la versión 4.9.2 de GCC (versión por defecto del SO).((Esta versión de los compiladores disponen de una opción de optimización (''march'') para generar código específico para la arquitectura de los nodos del clúster (procesadores Opteron 6200 series, 15th Family //Bulldozer// Interlagos). Esta opción de compilación no garantiza el cumplimiento del estándar matemático definido en GCC, por lo que no se recomienda su uso, salvo en aquellos casos en los que se conozca en profundidad el comportamiento de las opciones de compilación.))
  
 <code bash> <code bash>
Línea 47: Línea 47:
 El comando ''modules'' permite gestionar, de manera eficaz y consistente, múltiples versiones de librerías y sofware para que el usuario utilice la versión adecuada en función de sus requerimientos. Su funcionamiento se basa en el encapsulamiento, dentro de un módulo, de las variables de entorno relacionadas con una versión de software determinada. De este modo, es el propio usuario quien gestiona la utilización de las diferentes versiones de software disponibles en el sistema. El comando ''modules'' permite gestionar, de manera eficaz y consistente, múltiples versiones de librerías y sofware para que el usuario utilice la versión adecuada en función de sus requerimientos. Su funcionamiento se basa en el encapsulamiento, dentro de un módulo, de las variables de entorno relacionadas con una versión de software determinada. De este modo, es el propio usuario quien gestiona la utilización de las diferentes versiones de software disponibles en el sistema.
  
-La gestion, a nivel de usuario, de los módulos se realiza con el comando ''modules'' :+La gestión, a nivel de usuario, de los módulos se realiza con el comando ''modules'' :
  
 <code bash> <code bash>
Línea 61: Línea 61:
   * ''load'' Activa el módulo ''module_name''   * ''load'' Activa el módulo ''module_name''
   * ''unload'' Desactiva el módulo ''module_name''   * ''unload'' Desactiva el módulo ''module_name''
-  * ''purge'' Desactiva todos los los módulos de la sesión actual.+  * ''purge'' Desactiva todos los módulos de la sesión actual.
  
  
Línea 69: Línea 69:
 Se recomienda utilizar este comando de **manera interactiva**. Su uso dentro de ''.bashrc'' para cargar automáticamente //módulos// habituales no está recomendado, ya que todos los scripts que se ejecuten leen este fichero. Se recomienda utilizar este comando de **manera interactiva**. Su uso dentro de ''.bashrc'' para cargar automáticamente //módulos// habituales no está recomendado, ya que todos los scripts que se ejecuten leen este fichero.
  
-Se recomienda **utilizar las versiones por defecto de los difentes módulos**. En cualquier caso, el comando ''module avail'' porporciona una lista completa de todos los los módulos y versiones disponibles.+Se recomienda **utilizar las versiones por defecto de los diferentes módulos**. En cualquier caso, el comando ''module avail'' proporciona una lista completa de todos los módulos y versiones disponibles
 + 
 +==== Variables de entorno durante la ejecución ==== 
 +Por defecto, el entorno de ejecución del sistema Torque/PBS define algunas variables de entorno que pueden ser utilizadas dentro de los scripts (lista completa en el MAN de ''qsub''): 
 +  *  ''PBS_O_WORKDIR'': contiene el //path// del directorio de trabajo (''$PWD'') desde donde se ha ejecutado el comando ''qsub''. Es útil para establecer un directorio de referencia durante la ejecución de los trabajos indicados. 
 +  * ''PBS_ARRAYID'': contiene el índice del array correspondiente cuando el trabajo se lanza con la opción -t. 
 +  * ''PBS_JOBID'': el job_id asignado al trabajo. 
 +  * ''PBS_JOBNAME'': el nombre asignado por el usuario al trabajo. 
 + 
 +Además cualquier variable exportada desde el script de lanzamiento del trabajo estará disponible en el entorno de ejecución.
  
 ===== Escribir el script ===== ===== Escribir el script =====
Línea 121: Línea 130:
 </code> </code>
  
-==== Variables de entorno durante la ejecución ==== +===== Scritps de ejemplo =====
-Por defecto, el entorno de ejecución del sistema Torque/PBS define algunas variables de entorno que pueden ser utilizadas dentro de los scripts (lista completa en el MAN de ''qsub''): +
-  *  ''PBS_O_WORKDIR'': contiene el //path// del directorio de trabajo (''$PWD'') desde donde se ha ejecutado el comando ''qsub''. Es útil para establer un directorio de referencia durante la ejecución de los trabajos indicados. +
-  * ''PBS_ARRAYID'': contiene el índice del array correspondiente cuando el trabajo se lanza con la opción -t. +
-  * ''PBS_JOBID'': el job_id asignado al trabajo. +
-  * ''PBS_JOBNAME'': el nombre asignado por el usuario al trabajo.+
  
-Además cualquier variable que exportemos desde el script de lanzamiento del trabajo estará disponible en el entorno de ejecución.+Hay numerosos ejemplos de scripts para diversos lenguajes de programación en [[ es:centro:servizos:hpc:escribir_script:ejemplos | esta página ]].
  
-==== Ejemplos de scripts ==== 
- 
-A continuación se muestran varios ejemplos de scripts que muestran el conjunto básico de intrucciones para el envio de diferentes tipos de trabajos al gestor de colas. 
- 
-=== Ejemplo de trabajo secuencial: === 
-<code bash> 
-#!/bin/bash 
-#PBS -l nodes=1:ppn=1,walltime=1:00:00 
-#PBS -N ejemplo 
-#PBS -o salida.out 
-#PBS -e salida.err 
-#PBS -m ae -M direccion_correo@usc.es 
-cd $PBS_O_WORKDIR 
-./executable 
-</code> 
- 
- 
-=== Ejemplo de trabajos secuenciales en paralelo: === 
-<code bash> 
-#!/bin/bash 
-#PBS -l nodes=1:ppn=4,walltime=1:00:00 
-#PBS -N ejemplo 
-cd $PBS_O_WORKDIR 
-(cd dir1; ./executable1) & 
-(cd dir2; ./executable2) & 
-(cd dir3; ./executable3) & 
-(cd dir4; ./executable4) & 
-wait 
-</code> 
- 
- 
-=== Ejemplo de trabajo Java: === 
- 
-Java consume, por defecto, toda la memoria del sistema. En un sistema compartido por diferentes usuarios es necesario limitar la cantidad de memoria asignada a cada proceso, por lo que el tamaño del //heap// de Java en ''ctcomp2'' está limitado al 25 del límite de memoria de la cola asignada al proceso y, cualquier caso, con un tamaño máximo de 8 GB.  
- 
-Los usuarios pueden utilizar otros tamaños de //heap// en sus trabajos si modifican, antes de ejecutar JAVA, el valor de la opción -Xmx de JAVA a través de la variable ''_JAVA_OPTIONS''. Por ejemplo, si queremos que el //heap// tenga 16 GB, el comando sería:  
-<code bash> 
-export _JAVA_OPTIONS=-Xmx16777216K 
-</code> 
-Al modificar el tamaño del //heap// el usuario debe asegurarse, bajo su responsabilidad, que el conjunto de procesos que se estén ejecutando concurrentemente en su trabajo no sobrepase el límite de memoria establecido en la correspondiente cola, ya que en ese caso el trabajo será cancelado automáticamente. 
- 
-Los usuarios que ejecuten en sus trabajos una sola instancia de java (independientemente de los threads que ejecute) podrán aumentar el tamaño del //heap//, pero se recomienda que no sea un valor cercano al límite de memoria de la correspondiente cola. 
- 
- 
- 
-<code bash> 
-#!/bin/bash 
-#PBS -l nodes=1:ppn=64,walltime=1:00:00 
-#PBS -N ej-java 
-cd $PBS_O_WORKDIR 
-module load jdk 
-export _JAVA_OPTIONS=-Xmx16777216K 
-java executable 
-</code> 
- 
- 
- 
- 
-=== Ejemplo de trabajo OpenMP: === 
-<code bash> 
-#!/bin/bash 
-#PBS -l nodes=1:ppn=64,walltime=1:00:00 
-#PBS -N ej-openmp 
-cd $PBS_O_WORKDIR 
-export OMP_NUM_THREADS=64 
-./executable  
-</code> 
- 
- 
- 
-=== Ejemplo de trabajo MPI: === 
-<code bash> 
-#!/bin/bash 
-#PBS -l nodes=8:ppn=64,walltime=1:00:00 
-#PBS -N ej-mpi 
-cd $PBS_O_WORKDIR 
-module load openmpi 
-mpirun -np 512 ./executable 
-</code> 
- 
- 
- 
- 
-=== Ejemplo de trabajo R: === 
- 
-No es posible realizar una sesión R interactiva, por lo que es necesario escribir previamente los comandos en un script. 
- 
-<code bash> 
-#!/bin/bash 
-#PBS -l nodes=1:ppn=1,walltime=1:00:00 
-#PBS -N ej-R 
-cd $PBS_O_WORKDIR 
-module load R 
-R --no-save < test.R 
-</code> 
- 
- 
- 
-=== Ejemplo de trabajo MATLAB: === 
- 
-No es posible realizar una sesión MATLAB interactiva, por lo que es necesario escribir previamente los comandos en un script. MATLAB emplea internamente, y de manera transparente al usuario, threads para paralelizar ciertas operaciones, por lo que se puede utilizar reservando varios núcleos computacionales dentro de un mismo nodo. Sin embargo, en las versiones instaladas no es posible controlar esta característica, por lo que MATLAB utiliza todos los recursos del nodo asignado, independientemente de los recursos solicitados. Para evitar posibles cancelaciones debido a un uso indebido de los recursos asignados,  __se recomienda a los usuarios utilizar el paralelismo implícito de MATLAB solo cuando se reserve en exclusividad un nodo del clúster__. En cualquier otro caso, se recomienda solicitar únicamente un núcleo computacional y utilizar la opción ''-singleCompThread'', que desactiva el paralelismo implícito de MATLAB para realizar una ejecución secuencial. En este ejemplo, el nombre del script es ''test.m''. 
- 
-<code bash> 
-#!/bin/bash 
-#PBS -l nodes=1:ppn=1,walltime=1:00:00 
-#PBS -N ej-MATLAB 
-cd $PBS_O_WORKDIR 
-module load matlab 
-matlab -r test -nodisplay -nojvm -singleCompThread 
-# -r:         indicar el fichero a ejecutar (sin .m) 
-# IMPORTANTE: incluir la orden quit al final del fichero 
-# -nodisplay: sin display X. 
-# -nosplash:  sin pantalla inicial (OPCIONAL) 
-# -nojvm:     sin entorno java (OPCIONAL) 
-# -singleCompThread: ejecuta MATLAB secuencialmente 
-</code>