Diferenzas

Isto amosa as diferenzas entre a revisión seleccionada e a versión actual da páxina.

Enlazar a esta vista de comparación

Next revision
Previous revision
centro:servizos:hpc:escribir_script [2017/04/03 10:37] – edición externa 127.0.0.1centro:servizos:hpc:escribir_script [2018/03/16 09:35] (actual) – [Escribir o script] jorge.suarez
Liña 1: Liña 1:
-[[ es:centro:servizos:hpc#instrucciones_de_uso_del_cluster| >> Volver a la página principal del cluster ]]+[[ es:centro:servizos:hpc#instrucciones_de_uso_del_cluster| >> Volver á páxina principal do clúster ]]
  
-====== Preparación del trabajo para su envío al gestor de colas ======+====== Preparación do traballo para o seu envío ao xestor de colas ======
 ===== Compilación ===== ===== Compilación =====
 ----------------- -----------------
 === 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.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.)) +colección de compiladores GNU (GNU Compiler Collection, GCC) é accesible no clúster a través dos seus comandos e opcións habituais. Por defecto, os compiladores instalados no sistema pertencen á versión 4.9.2 de GCC (versión por defecto do SO).((Esta versión dos compiladores dispón dunha opción de optimización (''march'') para xerar código específico para arquitectura dos nodos do clúster (procesadores Opteron 6200 series, 15th Family //Bulldozer// Interlagos). Esta opción de compilación non garante o cumprimento do estándar matemático definido en GCC, polo que non se recomenda o seu uso, salvo naqueles casos nos que se coñeza en profundidade o comportamento das opcións de compilación.))
 <code bash> <code bash>
 ct$ module load gcc ct$ module load gcc
Liña 15: Liña 14:
 </code> </code>
  
-Las opciones recomendadas son: +As opcións recomendadas son: 
-  * ''-O'' Genera código optimizado para obtener un mayor rendimientoEs equivalente a ''-O1''. Alternativamente, se pueden utilizar las opciones ''-O0'', ''-O2'' ''-O3''El número indica el nivel de optimización, siendo el nivel sin ningún tipo de optimización el nivel con el que se obtiene un mayor rendimiento (la opción ''-O3'' realiza algunas optimizaciones agresivas que pueden generar resultados imprecisos).  +  * ''-O'' Xera código optimizado para obter un maior rendementoÉ equivalente a ''-O1''. Alternativamente, pódense utilizar as opcións ''-O0'', ''-O2'' ou ''-O3''número indica nivel de optimización, sendo nivel sen ningún tipo de optimización nivel co que se obtén un maior rendemento (opción ''-O3'' realiza algunhas optimizacións agresivas que poden xerar resultados imprecisos).  
-  * ''-o <name>'' Establece el nombre del fichero ejecutable.+  * ''-o <name>'' Establece o nome do ficheiro executable. 
  
  
 === Compilación OpenMP === === Compilación OpenMP ===
  
-La colección de compiladores GCC permite la compilación de código OpenMP, indicándolo mediante la opción ''-fopenmp''.+colección de compiladores GCC permite compilación de código OpenMP, indicándoo mediante opción ''-fopenmp''.
  
 <code bash> <code bash>
Liña 32: Liña 32:
 === Compilación MPI === === Compilación MPI ===
  
-Para compilar código MPI es necesario cargar un módulo MPI (como, por ejemploel módulo ''openmpi''), que proporcione los scripts de compilación de código MPI (''mpicc'', ''mpicxx'', ''mpif77''). Estos scripts hacen llamadas al compilador del lenguaje correspondiente. +Para compilar código MPI é preciso cargar un módulo MPI (como, por exemplomódulo ''openmpi''), que proporcione os scripts de compilación de código MPI (''mpicc'', ''mpicxx'', ''mpif77''). Estes scripts fan chamadas ao compilador da linguaxe correspondente.
 <code bash> <code bash>
 ct$ module load openmpi ct$ module load openmpi
Liña 41: Liña 40:
 </code> </code>
  
-===== Gestión del entorno =====+===== Xestión do contorno =====
 ------------------ ------------------
-==== Gestión de software con modules ====+==== Xestión de software con modules ====
  
-El comando ''modules'' permite gestionar, de manera eficaz consistente, múltiples versiones de librerías y sofware para que el usuario utilice la versión adecuada en función de sus requerimientosSu 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 modoes el propio usuario quien gestiona la utilización de las diferentes versiones de software disponibles en el sistema.+comando ''modules'' permite xestionar, de maneira eficaz consistente, múltiples versións de librarías e sofware para que usuario empregue a versión axeitada en función dos seus requirimentosO seu funcionamento baséase no encapsulamento, dentro dun módulo, das variables de contorna relacionadas cunha versión de software determinada. Deste xeitoé o propio usuario quen xestiona a utilización das diferentes versións de software dispoñibles no sistema. 
 + 
 +A xestión, a nivel de usuario, dos módulos realízase co comando ''modules'' :
  
-La gestion, a nivel de usuario, de los módulos se realiza con el comando ''modules'' : 
  
 <code bash> <code bash>
Liña 56: Liña 56:
 ct$ module purge ct$ module purge
 </code> </code>
-Las opciones son: +As opcións son: 
-  * ''avail'' Muestra todos los módulos disponibles en el sistema. +  * ''avail'' Amosa todos os módulos dispoñibles no sistema. 
-  * ''list'' Muestra todos los módulos que están siendo utilizados en la sesión actual. +  * ''list'' Amosa todos os módulos que están a ser empregados na sesión actual. 
-  * ''load'' Activa el módulo ''module_name'' +  * ''load'' Activa módulo ''module_name'' 
-  * ''unload'' Desactiva el módulo ''module_name'' +  * ''unload'' Desactiva módulo ''module_name'' 
-  * ''purge'' Desactiva todos los los módulos de la sesión actual.+  * ''purge'' Desactiva todos os módulos da sesión actual.
  
  
  
-El comando ''modules'' manipula las variables de entorno relacionadas con los //path// del sistema (''PATH'', ''LD_LIBRARY_PATH'', etc.), por lo que se recomienda a los usuarios no modificar estas variables de modo arbitrario.+comando ''modules'' manipula as variables de contorna relacionadas cos //path// do sistema (''PATH'', ''LD_LIBRARY_PATH'', etc.), polo que se recomenda aos usuarios non modificar estas variables de xeito arbitrario.
  
-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.+Recoméndase utilizar este comando de **maneira interactiva**. O seu uso dentro de ''.bashrc'' para cargar automaticamente //módulos// habituais non está recomendado, xa que todos os scripts que se executen len este ficheiro.
  
-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.+Recoméndase **empregar as versións por defecto dos diferentes módulos**. En calquera caso, comando ''module avail'' proporciona unha listaxe completa de todos os módulos e versións dispoñibles. 
 +==== Variables de contorna durante a execución ==== 
 +Por defecto, a contorna de execución do sistema Torque/PBS define algunhas variables de contorna que poden ser utilizadas dentro dos scripts (listaxe completa no MAN de ''qsub''): 
 +  *  ''PBS_O_WORKDIR'': contén o //path// do directorio de traballo (''$PWD'') dende onde se executou o comando ''qsub''. É útil para establecer un directorio de referencia durante a execución dos traballos indicados. 
 +  * ''PBS_ARRAYID'': contén o índice do array correspondente cando o traballo se lanza coa opción -t. 
 +  * ''PBS_JOBID'': o job_id asignado ao traballo. 
 +  * ''PBS_JOBNAME'': o nome asignado polo usuario ao traballo.
  
-==== Variables de entorno durante la ejecución ==== +Ademais calquera variable exportada desde o script de lanzamento do traballo estará dispoñible na contorna de execució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 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 exportada desde el script de lanzamiento del trabajo estará disponible en el entorno de ejecución. +===== Escribir script =====
- +
-===== Escribir el script =====+
 ---------------- ----------------
-El envío de trabajos se realiza a través de un comando cuyo argumento obligatorio es el nombre de un script de //shell//. **El script tiene que disponer de permisos de ejecución**.  +envío de traballos realízase a través dun comando cuxo argumento obrigatorio é o nome dun script de //shell//. **script ten que dispor de permisos de execución**.
 <code bash> <code bash>
 ct$ chmod u+x script.sh ct$ chmod u+x script.sh
Liña 89: Liña 87:
  
  
-Dentro del script, el usuario debe indicar la acciones que se realizarán en los nodos, una vez que los recursos requeridos estén disponibles. [[#ejemplos_de_scripts|Ejemplos de scripts]] contiene diferentes ejemplos relacionados con los módulos instalados en el clúster).+Dentro do script, usuario debe indicar as accións que se realizarán nos nodos, unha vez que os recursos requiridos estean dispoñibles. [[:centro:servizos:hpc:escribir_script:ejemplos|Exemplos de scripts]] contén diferentes exemplos relacionados cos módulos instalados no clúster).
  
-El script tiene básicamente tres elementos: +script ten basicamente tres elementos: 
-  - La definición del intérprete a usar, por defecto ''#!/bin/bash'' +  - definición do intérprete a usar, por defecto ''#!/bin/bash'' 
-  - Una serie de comentarios de BASH que comienzan por ''#PBS'' de modo que actúan como instrucciones para el gestor de colas. +  - Unha serie de comentarios de BASH que comezan por ''#PBS'' de modo que actúan como instrucións para o xestor de colas. 
-  - Comandos de BASH que definen el trabajo ejecutar.    +  - Comandos de BASH que definen o traballo executar.    
-Ejemplo simple de script:+Exemplo simple de script:
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Liña 105: Liña 103:
 ==== Parámetros PBS ==== ==== Parámetros PBS ====
 === Básicos === === Básicos ===
-  * ''-N'' Indica el nombre de referencia de nuestro trabajo en el sistema de colas. Por defecto sería el nombre del ejecutable.\\ Ej: ''#PBS -N myjob'' +  * ''-N'' Indica o nome de referencia do noso traballo no sistema de colas. Por defecto sería o nome do executable.\\ Ex: ''#PBS -N myjob'' 
-  * ''-l'' Indica los recursos que se solicitan para la ejecución de nuestro trabajo, como el número de núcleos computacionales y el tiempo de ejecuciónLos diferentes tipos de recursos se separan por comas.\\ Ej: ''#PBS -l nodes=1:ppn=1,walltime=1:00:00'' +  * ''-l'' Indica os recursos que se solicitan para a execución do noso traballo, como número de núcleos computacionais e o tempo de execuciónOs diferentes tipos de recursos sepáranse por comas.\\ Ex: ''#PBS -l nodes=1:ppn=1,walltime=1:00:00'' 
-    *  ''nodes=N:ppn=K'': solicitamos ''N'' nodos computacionales''K'' núcleos en cada nodo.((No se garantiza la ejecución en exclusividad de los nodos, si no se solicitan los 64 núcleos de un nodo.)) +    *  ''nodes=N:ppn=K'': solicitamos ''N'' nodos computacionais''K'' núcleos en cada nodo.((Non se garante a execución en exclusividade dos nodos, se non se solicitan os 64 núcleos dun nodo.)) 
-    *  ''walltime=HH:MM:SS'': solicitamos la exclusividad de los recursos durante un tiempo máximo de HH horas, MM minutos SS segundos. El límite máximo de tiempo permitido es de 168 horas (1 semana). +    *  ''walltime=HH:MM:SS'': solicitamos a exclusividade dos recursos durante un tempo máximo de HH horas, MM minutos SS segundos. límite máximo de tempo permitido é de 168 horas (1 semana). 
- +* ''-e'' Indica o ficheiro no que se redireccionará a saída estándar de erro do noso executable. Por defecto, a saída estándar de erro redirecciónase a un ficheiro con extensión ''.eXXX'' (onde ''XXX'' representa identificador PBS do traballo). \\ *Ex: ''#PBS -e mySTD.err'' 
-  * ''-e'' Indica el fichero en el que se redireccionará la salida estándar de error de nuestro ejecutable. Por defecto, la salida estándar de error se redirecciona a un fichero con extensión ''.eXXX'' (donde ''XXX'' representa el identificador PBS del trabajo). \\ Ej: ''#PBS -e mySTD.err'' +  * ''-ou'' Indica o ficheiro no que se redireccionará a saída estándar do noso executable. Por defecto, a saída estándar redirecciónase a un ficheiro con extensión ''.oXXX'' (onde ''XXX'' representa identificador PBS do traballo). \\ Ex: ''#PBS -ou mySTD.out'' 
-  * ''-o'' Indica el fichero en el que se redireccionará la salida estándar de nuestro ejecutable. Por defecto, la salida estándar se redirecciona a un fichero con extensión ''.oXXX'' (donde ''XXX'' representa el identificador PBS del trabajo). \\ Ej: ''#PBS -mySTD.out'' +  * ''-m'' Indica tipo de eventos que serán notificados por correo electrónico. Os argumentos posibles desta opción son: ''b'' cando o traballo se emita aos nodos, ''a'' no caso de que se aborte a execución do traballo inesperadamente e/ou ''e'' cando o traballo termine a súa execución sen ningún incidente. Estes argumentos non son excluíntes e pódense combinar.\\ Ex: ''#PBS -m ae'' 
-  * ''-m'' Indica el tipo de eventos que serán notificados por correo electrónico. Los argumentos posibles de esta opción son: ''b'' cuando el trabajo se emita a los nodos, ''a'' en caso de que se aborte la ejecución del trabajo inexperadamente y/''e'' cuando el trabajo termine su ejecución sin ningún incidente. Estos argumentos no son excluyentes y se pueden combinar.\\ Ej: ''#PBS -m ae'' +  * ''-M'' Indica dirección de correo na que se notificarán os eventos indicados coa opción ''-m''.\\ Ex: ''#PBS -M nombre.usuario@usc.es''
-  * ''-M'' Indica la dirección de correo en la que se notificarán los eventos indicados con la opción ''-m''.\\ Ej: ''#PBS -M nombre.usuario@usc.es''+
  
 === Avanzados === === Avanzados ===
-  * ''-t'' Crea un array de trabajos. Útil cuando se quieren enviar muchos trabajos que usan el mismo script y solo cambian los datos de entrada. Se definen uno o varios rangos de números separados por comas y/o guionesSi solo se pone un único número, el rango será de 0 hasta dicho número. \\ Ej:+  * ''-t'' Crea un array de traballos. Útil cando se queren enviar moitos traballos que usan o mesmo script e só cambian os datos de entrada. Defínense un ou varios rangos de números separados por comas e/ou guiónsSe só se pon un único número, rango será de 0 ata o devandito número. \\ Ex:
 <code bash> <code bash>
 ... ...
Liña 123: Liña 120:
 ... ...
 </code> </code>
-En este ejemplo los datos de entrada se encuentran en 5 ficheros llamados input.0, input.1,etc. Al usar este script generaremos trabajos distintos cada uno con un valor del índice distinto. El de índice 0 leerá los datos de entrada del archivo input.0 escribirá la salida en output.0, el de índice 1 usará input.1 output.1, etc. +Neste exemplo os datos de entrada atópanse en 5 ficheiros chamados input.0, input.1,etc. Ao usar este script, xeraremos traballos distintos cada un cun valor do índice distinto. de índice 0 lerá os datos de entrada do arquivo input.0 escribirá a saída en output.0, de índice 1 usará input.1 output.1, etc. 
-  * ''-W'' Permite especificar atributos adicionales para el trabajo con el formato ''nombre=valor[,nombre=valor...]''La lista completa y su formato está en la página del MAN. El atributo más útil es ''depend=dependency_list'' que permite establecer dependencias entre trabajos.  +  * ''-W'' Permite especificar atributos adicionais para o traballo co formato ''nomee=valor[,nomee=valor...]''A listaxe completa e o seu formato está na páxina do MAN. atributo máis útil é ''depend=dependency_list'' que permite establecer dependencias entre traballos.  
-Por ejemplo, para hacer que el trabajo empiece cuando job1 haya terminado con éxito pondríamos esto en el script que lanza el job2 (hace falta saber el job_id del trabajo 1):+Por exemplo, para facer que o traballo comece cando job1 rematase con éxito poriamos isto no script que lanza job2 (fai falla saber job_id do traballo 1):
 <code bash> <code bash>
 #PBS -Wdepend=afterok:<job1_id>  #PBS -Wdepend=afterok:<job1_id> 
 </code> </code>
  
-===== Scritps de ejemplo =====+===== Scritps de exemplo =====
  
-Hay numerosos ejemplos de scripts para diversos lenguajes de programación en [[ es:centro:servizos:hpc:escribir_script:ejemplos | esta página ]].+Hai numerosos exemplos de scripts para diversas linguaxes de programación [[ es:centro:servizos:hpc:escribir_script:ejemplos | nesta páxina ]].