<table width="652px" height="320px" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
  <tr>
     <td style="color:#003333; font-size:18pt;">
       <br><br><b><div align="center">Utilizaci&oacute;n: Gu&iacute;a de ayuda</div></b>
     </td>
  </tr>
  <tr>
     <td  style="padding: 10px 0px 10px 25px; font-size:12pt; color: #4E4E4E;" valign="top"  width="400">
        <div style='padding-left:20px;'>
		<br><br><br>
		<div style="color: #000000;"><br><u><b>Loguearse:</b></u></div>
		<br>
		<br>Por consola, ingrese lo siguiente reemplazando por el usuario correspondiente:
		<br>
		<br>
		<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
			<tr>
			<td width=600 height=60 style="padding-left:20px;">
			  > ssh -X usuario@200.45.54.94
			</td>
			</tr>
		</table>
		<br>
		<br>
		<br>
		<br>
		<div style="color: #000000;"><br><u><b>Env&iacute;o de archivos al servidor:</b></u></div>
		<br>
		<br>Ingrese lo siguiente:
		<br>
		<br>
		<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
			<tr>
			<td width=600 height=60 style="padding-left:20px;">
			  > scp archivo1 usuario@200.45.54.94:/carpeta/destino/
			</td>
			</tr>
		</table>
		<br>
		<br>
		<br>
		<br>
		<br>
		<div style="color: #000000;"><u><b>Env&iacute;o de archivos desde el servidor al equipo personal:</b></u></div>
		<br>
		<br>
		<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
			<tr>
			<td width=600 height=60 style="padding-left:20px;">
			  > scp usuario@200.45.54.94:/carpeta/archivo1 /carpeta/destino/
			</td>
			</tr>
		</table>
		<br>
		<br>
		<div style="color: #000000;"><b><i>Nota:</i></b></div> Para copiar una carpeta repita el mismo paso agregando el flag "-r" luego de "scp" ("scp -r ...").
		<br>
		<br>
		<br>
		<br>
		<br>
		<div style="color: #000000;"><u><b>Compilar c&oacute;digo fuente en C y Fortran:</b></u></div>
		<br>    Ya estando logueado, tipear lo siguiente:
		<br>
		<br>
		<div style="color: #000000;"><br><b>Para gcc:</b></div>
		<table width="100%">
			<tr>
			<td>
				<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
					<tr>
					<td width=300>
					       > gcc programa.c                       
					</td>
					<td>
						<i>Compila el programa en C programa.c, genera un archivo ejecutable a.out.</i>
					</td>
					</tr>
				</table>
			<tr>
			<td>
			<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
				<tr>
				<td width=300>
				       > gcc -o programa programa.c           
				</td>
				<td>
					<i>Compila el programa en C programa.c, genera un archivo ejecutable programa.</i>
				</td>
				</tr>
			</table>
			<tr>
			<td>
			<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
				<tr>
				<td width=300>
				       > gcc -c programa.c                    
				</td>
				<td>
					<i>No genera el ejecutable, sino el c&oacute;digo objeto, en el archivo programa.o. Si no se indica un nombre para el archivo objeto, usa el nombre del archivo en C y le cambia la extensi&oacute;n por .o.</i>
				</td>
				</tr>
			</table>
			<tr>
			<td>
			<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
				<tr>
				<td width=300>
				       > gcc -c -o objeto.o programa.c        
				</td>
				<td>
					<i>Genera el c&oacute;digo objeto indicando el nombre de archivo.</i>
					<br>
				</td>
				</tr>
			</table>
			<br>
			<br>
			<br>
			<div style="color: #000000;"><b>Para g++:</b></div>
			<table width="100%">
				<tr>
				<td>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=300>
						       > g++ -o programa programa.cpp         
						</td>
						<td>
							<i>Compila el programa en C++ programa.c, genera un archivo ejecutable programa.</i>
						</td>
						</tr>
					</table>
						<tr>
						<td>
							<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
								<tr>
								<td width=318>
							       		> g++ -c programa.cpp                  
								</td>
								<td width=300>
									<i>Igual para un programa en C++.</i>
								</td>
								</tr>
							</table>
						</td>
						</tr>
						<tr>
						<td>
							<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
								<tr>
								<td width=300>
								       > g++ -o ~/bin/programa program.cpp    
								</td>
								<td>
									<i>Genera el ejecutable programa en el subdirectorio bin del directorio propio del usuario.</i>
								</td>
								</tr>
							</table>
						</td>
						</tr>
						<tr>
						<td>
							<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
								<tr>
								<td width=300>
								       > g++ -L/lib -L/usr/lib programa.cpp   
								</td>
								<td>
									<i>Indica dos directorios donde han de buscarse bibliotecas. La opci&oacute;n -L debe repetirse para cada directorio de b&uacute;squeda de bibliotecas.</i>
								</td>
								</tr>
							</table>
						</td>
						</tr>
						<tr>
						<td>
							<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
								<tr>
								<td width=300>
								       > g++ -I/usr/include programa.cpp      
								</td>
								<td>
									<i>Indica un directorio para buscar archivos de encabezado (de extensi&oacute;n .h).</i>
								</td>
								</tr>
								<tr> 
								</td>
								</tr>
							</table>
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<div style="color: #000000;"><b>Para Fortran:</b></div>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=300>
						       > gfortran -o programa.exe programa.f  
						</td>
						<td>
							<i>Compila el programa en gfortran programa.f, genera un archivo ejecutable programa.</i>
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<br>
					<br>
					<div style="color: #000000;"><b>Ejecutar aplicaci&oacute;n:</b></div>
					<br>
					El uso de los recursos de c&oacute;mputo de los nodos esclavos se lleva acabo por medio del Sistema de Colas a trav&eacute;s del administrador de recursos TORQUE. La ejecuci&oacute;n de trabajos se lleva acabo via scripts los cuales son analizados por el sistema de colas TORQUE para poder identificar el tipo y la cantidad de recursos de c&oacute;mputo que necesita el trabajo en cuesti&oacute;n, posteriormente se ejecutar&aacute; el trabajo indicado en el script en el n&uacute;mero de nodos solicitados. 
					<br>
					<br>
					Para que la ejecuci&oacute;n de nuestro trabajo sea exitosa dentro del cl&uacute;ster es necesario indicarle al sistema de colas varias opciones de ejecuci&oacute;n: 
					<br>
					<br>	
					


<div style="color: #000000; margin-left:50px; font-size:10pt;">
      <li><b>Nombre del trabajo.</b> Este es el nombre que el sistema de colas mostrar&aacute; al momento de consultar el estado de nuestro trabajo.<br>
      Se indica con la opci&oacute;n <b>#PBS -N (NombreAplicaci&oacute;n)</b></li>      <br>

      <li><b>Nombre de la cola.</b> Una cola es una agrupaci&oacute;n l&oacute;gica de caracter&iacute;sticas de ejecuci&oacute;n en el cl&uacute;ster. Por ejemplo: se podr&iacute;a definir la cola "long48h6" la cual tendr&iacute;a por carater&iacute;stica que cualquier trabajo que sea enviado a ella tenga un tiempo de ejecuci&oacute;n m&aacute;ximo de 48 horas usando 6 procesadores por default (la definici&oacute;n de las colas, as&iacute; como de sus caracter&iacute;sticas son llevadas a cabo por el administrador del sistema).<br>
      El nombre de la cola de ejecucion se indica con la opci&oacute;n <b>#PBS -q (NombreCola)</b></li>      <br>

      <li><b>Tiempo de ejecuci&oacute;n.</b> Es el tiempo en reloj de 'pared' que nuestro c&aacute;lculo permanecer&aacute; en ejecuci&oacute;n, decimos reloj de 'pared' por que dentro del sistema operativo la ejecuci&oacute;n de un proceso tambi&eacute;n es medida por el tiempo efectivo que dicho proceso us&oacute; el procesador, a este tiempo se le denomina 'cputime'.<br>
      Se indica con la opci&oacute;n <b>#PBS -l walltime=(Horas):(Minutos):(Segundos)</b></li>      <br>

      <li><b>N&uacute;mero de nodos y procesadores.</b> Es posible indicarle al sistema de colas el n&uacute;mero nodos esclavos y de procesadores que necesitamos para nuestro trabajo. Por ejemplo, podemos indicarle que necesitamos 4 nodos usando solamente un procesador por nodo: nodos=4:proc=1, 4 nodos utilizando los 2 procesadores por nodo: nodos=4:proc=2.
      Esta opci&oacute;n se indica: <b>#PBS -l nodes=(N&uacute;meroEquipos) ppn=(N&uacute;meroDeCoresPorEquipo)</b><br>
      <b>Por ejemplo #PBS -l nodes=4:ppn=2.</b></li>      <br>

      <li><b>Standard error y standard output.</b> Son archivos que se generan como resultado de la corrida de nuestro c&oacute;digo en el cl&uacute;ster en caso de tener alguna salida a consola o en el caso de que hubiese alg&uacute;n error en la ejecuci&oacute;n. Se generan indicando la opci&oacute;n <b>#PBS -k eo</b></li>      <br>

      <li><b>Directorio de destino.</b> Es posible indicar al sistema de colas el directorio en donde se alojar&aacute;n los archivos con los resultados de la ejecuci&oacute;n. Esto se hace indicando la opci&oacute;n <b>#PBS -d /home/(NombreUsuario)/scripts/</b></li>
</div>







					<br>
					Entonces creamos un archivo de nombre <i>script.sh</i> y dentro del mismo se ingresa lo siguiente reemplazando los par&eacute;ntesis por los datos correspondientes:
					<br>
					<br>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=600>
							<br>	   #PBS -N (NombreAplicaci&oacute;n)
							<br>	   #PBS -q (NombreCola)
							<br>	   #PBS -l walltime=(Horas):(Minutos):(Segundos)
							<br>	   #PBS -l nodes=(N&uacute;meroEquipos) ppn=(N&uacute;meroDeCoresPorEquipo)
							<br>	   #PBS -k eo
							<br>	   #PBS -d /home/(NombreUsuario)/scripts/
							<br>
							<br>	   ./(NombreAplicaci&oacute;n)
							<br>
							<br>
						</td>
						</tr>
					</table>
					<br>
					<br>	 De necesitar correr la aplicaci&oacute;n con mpirun reemplace la &uacute;ltima l&iacute;nea por lo que sigue a continuaci&oacute;n:
					<br>
					<br>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=600 height=60>
							mpirun ./(NombreAplicaci&oacute;n)
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<br>	 Luego se sube el script a la cola de ejecuci&oacute;n que se indique:
					<br>
					<br>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=600 height=60>
							> qsub -q colaZ script.sh
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<br>	 Para mostrar el estado general de trabajos en el cluster:
					<br>
					<br>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=600 height=60>
							> qstat -a
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<br>	 Para mostrar los trabajos de un usuario especificado:
					<br>
					<br>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=600 height=60>
							> qstat -u (NombreUsuario)
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<br>	 Para mostrar s&oacute;lo los trabajos que est&aacute;n en ejecuci&oacute;n.
					<br>
					<br>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=600 height=60>
							> qstat -r
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<br>         Detener proceso subido a una cola de ejecuci&oacute;n:
					<br>
					<br>
					<table style="border-style: dotted; border-width: 1px; border-color: 660033;">
						<tr>
						<td width=600 height=60>
							> qdel (IdProceso)
						</td>
						</tr>
					</table>
					<br>
					<br>
					<br>
					<br>
					<br>
				</td>
				</tr>
			</table>
	</div>
     </td>
  </tr>
</table>
