Archive

Archive for June, 2013

Scripts en Linux

June 24th, 2013

Un script en linux es un programa escrito en el lenguaje de Linux, es decir, una concatenación de comandos. Los scripts son muy útiles para realizar acciones que repetimos habitualmente y que suponen la ejecución de varios comandos o para ejecutar una concatenación compleja de acciones, que es más fácil de ir escribiendo y corriguiendo si lo hacemos como si se tratase de un programa. De este modo escribimos todos los comandos que queremos ejecutar en un fichero de texto con un comando por línea. Así ya hemos creado un script que cuando lo ejecutemos será equivalente a ejecutar todos los comandos que tenemos en el script.

Tux

Tux

La potencia de los scripts en Linux tal vez no se aprecie con el programa que ponemos como ejemplo, pero conforme vaya aumentando nuestro conocimiento de Linux, con más comandos y más complejos podremos automatizar tareas muy complejas. Con este post, de hecho creamos, la sección de “comandos avanzados”, donde describiremos comandos de interés para la programación de tareas complejas.

Veamos un ejemplo sencillo. Escribiremos un fichero de texto plano (no un .odt, .xdoc o similar que aparte del texto visible contiene mucha información “oculta” para darle el formato) que contenga las siguientes líneas y que llamaremos hola.sh:

#!/bin/bash

mkdir TMP
cd TMP
touch newfile.txt
echo "Hola mundo, el fichero ha sido creado"
ls

 

En este simple script hemos creado el directorio TMP con mkdir, nos hemos metido dentro de este directorio con cd, hemos creado un fichero vacío llamado newfile.txt con el comando touch, mostramos en pantalla un mensaje empleando el comando echo y listamos los ficheros que existen en el directorio con el comando ls. La primera línea es un poco especial e indica que “lenguaje queremos utilizar” (que shell). En este caso usamos bash que es el más común.

No obstante, no vamos a poder ejecutar el fichero hola.sh pues es un fichero de texto sin permiso de ejecución. Para darle permiso de ejecución usamos el comando chmod.

Tras darle permiso para ejecutarse a nuestro script hola.sh, dependiendo de la configuración de nuestro Linux, para ejecutar nuestros scripts debemos indicarle el donde está, en este caso si está en nuestra carpeta se indica explícitamente precediendo el nombre con “./". Si lo ejecutamos obtenemos:

$ chmod u+x hola.sh
$ ./hola.sh
Hola mundo, el fichero ha sido creado
hola.sh   newfile.txt

 

Donde nos muestra en una línea el mensaje del que hemos enviado a pantalla con echo y en la siguiente el resultado del comando ls.

La potencia de los scripts en Linux tal vez no se aprecie con un programa tan sencillo, pero conforme vaya aumentando nuestro conocimiento de Linux, con más comandos y más complejos podremos automatizar tareas muy complejas.

 

Comandos Avanzados, Linux

chmod y permisos en linux

June 20th, 2013

Linux es un sistema operativo multiusuario y permite varios usuarios en un mismo ordenador, además estos usuarios pueden estar organizados en grupos. Por ello existen 3 roles diferentes: el usuario que es uno mismo, el grupo al que pertenece el usuario y que puede tener más miembros y todo el mundo. Además, para asegurar la privacidad en linux todos los ficheros tienen 3 tipos de permisos, de lectura “r” (read), de escritura “w” (write) y de ejecucion “x” (eXecution), que según estén activados o no nos permiten leer, escribir o ejecutar un fichero, respectivamente. Asó pues con 3 roles y 3 permisos por rol tenemos 9 permisos que podemos gestionar. Para ver los permisos podemos listar los ficheros (ls) indicándole que nos dé más información el formato largo (-l). Por ejemplo:

$ ls -l hola.sh
-rw-rw-r-- 1 jose departamento 0 abr 24 10:24 hola.sh

El primer carácter si es “-” nos indica que es un fichero, en caso de directorios aparece “d“. Los 3 siguientes caracteres son los permisos del usuario. Como vemos tiene permisos de lectura y escritura (rw). El de ejecución no está activado y aparece “-“. Los 3 siguientes son para el grupo y tiene los mismos permisos, lectura y escritura (rw). El resto de usuarios en el ordenador solo tienen permisos de lectura (r).

Para cambiar los permisos de nuestros ficheros se usa el comando chmod. La manera más intuitiva es indicar a quien – u, g,o o a para indicar usuario, grupo, otros o a todos (all) respectivamente – le queremos dar (+) o quitar (-) permiso de lectura, escritura o ejecución (r, w o x respectivamente). Veamos un ejemplo donde primero añadimos al usuario permiso de ejecución del fichero hola.sh y luego eliminamos permiso de lectura al todo el mundo y finalmente le volveremos a dar permiso de lectura al usuario.

$ ls -l hola.sh
-rw-rw-r-- 1 jose departamento 0 abr 24 10:24 hola.sh
$ chmod u+x hola.sh
$ ls -l hola.sh
-rwxrw-r-- 1 jose departamento 0 abr 24 10:24 hola.sh
$ chmod a-r hola.sh
$ ls -l hola.sh
--wx-w---- 1 jose departamento 0 abr 24 10:24 hola.sh
$ chmod u+r hola.sh
$ ls -l hola.sh
-rwx-w---- 1 jose departamento 0 abr 24 10:24 hola.sh

 

Como vemos al usuario le ha aparecido el permiso de ejecución x, también tiene de lectura y escritura y el grupo tiene de escritura. Hay otro tipo de permisos especiales que no vamos a tratar y otra sintaxis para cambiarlos menos intuitiva.

 

 

 

Comandos básicos, General, Linux

top500. Munduko ordenagailu potenteenen zerrenda.

June 14th, 2013

Superkonputazioaren munduan, top500  delako  zerrenda erreferente bat da (http://www.top500.org), bertan, munduko potentziarik handieneko 500 ordenagailuak ageri baitira. Zerrenda hau urtean bi aldiz eguneratzen da, ekaina eta azaroan antolatzen diren ISC (International Supercomputing Conference) bileretan.

1993. urtean sortu zen, superkonputazio munduaren joerak aztertzeko eta superkonputagailuen arteko aladaraketa konparagarriak egin ahal izateko. Oinarri beazala,  LINPACK liburutegietan (algebra linearreko liburutegi bat) ageri den LINPACK testa aukeratu zen, beraz, top500 zerrenda test hau azkarren exekutatzen duten ordenagailuen zerrenda da. Orokorrean, zerrenda honetako ordenagailuek test hauek optimizatzen dituzte, emaitzak onak izan eta zerrendan sartu ahal izateko, honek dakarren ospeagatik.

Zerrenda sortu zenetik, bertako sistemen potentzia 14 hilabetero (gutxi gora bera) bikoiztu dela ikusten da azpiko irudian. Moore-en legearekiko hobekuntza nabarmena da. (Moore-en legea: zirkuitu integratuen transistore kopurua bi urtero bikoizten da). Moore-en eratorria den bigarren lega bat ere nabarmen hobetzen du (honek  prozesgailuaren eraginkortasunaren hobekuntza kontutan hartzen eta  potentzia 18 hilabetero hobetzen dela dio). Eraginkortasun hobekuntza honek agerian uzten du arlo honek duen garrantzia. Eragingortasun hau lortzeko, hainbat eragileek, instituzioeek zein makina fabrikatzaileek, egindako esfortzua nabarmena da,  kalkulu zientifikoak gaur-egun duen garrantzia erakusten digularik

Top500

Top500-eko superkonputagailuen eraginkortasunaren garapen exponentziala GFLOP-etan. Lerro gorria superkonputagailu azkarrenari dagokio, horia 500.-ari eta urdina lista guziko ordenagailuen eraginkortasunaren baturari (Wiki Commons).

Superkonputagailuek 1993. urtea ezkero  jasandako  garapena  modu sinple eta argian ikusi daiteke top500 zerrendan. Bertan, prozesagailu kopuruak, prozesagailu motak, fabrikatzaileak, sistema eragileak, kokapen geografikoen aldaketak etb. erraz aztertu daitezke. Kalkulu zientifikoaren gida bat bezala erabili daiteke superkonputazioaren joerak (prozesadore motak, sare motak …) ikusteko edo etorkizunean estandarizatu daitezkeen teknologia berrien froga eremu bat bezala ere ikus daiteke.

Informatikaren islada orokor bat ere eman diezaguke, edo zergaitik, gizartearen zientzia eta teknologiarena garapenarena, batez ere ordenagailu hauek zeinek eraiki eta non kokatuta dauden begiratzen badugu. Adibidez, azaroko 2012 zerrenda aztertuz ikus dezakegu:

  • Prozesagailuen %99.4-a enpresa amerikarrak egindakoak direla (IBM, Intel eta AMD). %0.6-a Fujitsu Japoniarrenak.
  • Ordenagailu hauek egiten dituzten enpresak begiratuz ere %90 inguru EEBB-ak direla.
  • Sareari dagokionez, %45-ak infiniband sare mota dutela eta %37-ak Gigabit ethernet.
  • Sistema eragileak aztertuz, %94-ak Linux erabiltzen dutela, %0.6-ak windows.
  • Kokapenaren aldetik, %50 EEBB,  %21 Europan, %14.4 Chinan eta %6-a Japonen daudela. Hego hemisferioan 9 besterik ez 7 Autralian eta  2 Brasilen.

Datu hauek sakon aztertu beharrik gabe, hainbat ondorio nabarmen erraz atera daitezke.

2006. urtean green500 lista sortu zen. Bertan, top500-eko ordenagilu berak ageri dira berriz, baina erabilitako Watt bakoitzeko ordenatuta, hau da  FLOPS/W erlazioa begiratuz, non FLOPS  (FLoating-point Operations per Second) den, eta W  Watt potentzia unitatea. Superkonputagailuen energi behar izugarria dela eta, energiaren aldetik eraginkorrenak nabarmentzeko sortu zen zerrenda hau. Titan, 2012. Azaroko top500  zerrendako lehenengoa da. Bere kontsumoa  9.000 etxebizitzen adinakoa da, hala ere, konputagailu hau oso eraginkorra da  green500 listako 3. delarik.

Goian esan den bezala, badaude munduan hainbat superkonputagailu zerrendako lehenegoak bezain potenteak direnak eta arrazoi desberdinengaik ageri ez direnak, Blue Waters da horietako bat  (ikus  Blue Waters el superordenador rebelde eta Titan vs. Blue Waters bien top500 lehena eta Blue Waters-en arteko desberdintasunak ikusteko eta  Titan, 2012. Azaroko top500  zerrendako lehenengoa ).

 OHARRA: Posta hau leheango erdaraz idatzi genuen  El Top de los ordenadores más potentes del mundo postaren itzulpen osatu bat da.

HPC

Superordenadores: Titan vs. Blue Waters

June 11th, 2013

En este post comparamos Titan, el superordenador más potente del mundo, y Blue Waters, el controvertido supercomputador al no enviar resultados para entrar en la lista donde debería de ocupar uno de los primeros puestos.

Titan supercomputer

Titan supercomputer

A día de hoy Titan es el superordenador más potente del mundo según la lista del top500.org (se actualiza cada 6 meses, ¿Qué es el top500?). No obstante, como ya comentamos en este post anterior el ordenador Blue Waters decidió no enviar el resultado de su benchmark Linpack al top500.org para ser incluido en la lista. El motivo es que consideran el benchmark Linpack muy simple, que no mide más que ciertas características muy concretas de un supercomputador y que el orientar el diseño y los esfuerzos a conseguir un buen Linpack, y por tanto un buen posicionamiento en el top500.org,  puede perjudicar el rendimiento general de la máquina en aplicaciones reales.

En la siguiente tabla comparamos las características de ambos supercomputadores. Mencionar que para construir Titán se desmantelaron los nodos de su predecesor Jaguar y se instalaron en la misma infraestructura los nuevos nodos y redes de Titan, lo cual habrá influenciado en un menor costo. Recientemente el Lawrence Livermore National Laboratory, que alberga a Titan, ha llegado a un acuerdo con DataDirect para instalar en Titan un potente sistema de ficheros paralelo basado en Lustre con un ancho de banda de más de 1 TB/s y 40 PB de capacidad, que no se incluyen en la tabla.

 

Característica

Titan

Blue Waters

Vendedores Cray/AMD/NVIDIA Cray/AMD/NVIDIA
Procesadores Interlagos/Kepler Interlagos/Kepler
Rendimiento medido 17.6
Rendimiento pico teórico 27 11.6
Rendimiento pico teórico CPUs 3 PFLOPS 7.1 PFLOPS
Rendimiento pico teórico GPUs 24 PFLOPS 4.5 PFLOPS
Nodos totales 18688 25712
Nodos con GPUs 18688 3072
Memoria RAM total 688 (TB) 1510 (TB)
Interconexión Gemini, 3D Torus Gemini, 3D Torus
Almacenamiento de disco on-line 20 (?) PB 26 PB
Ancho de banda a disco 0.4-0.7 TB/s <1 TB/s
Almacenamiento en cinta 15-30 PB 300 PB
Ancho de banda a cinta 7 GB/s <100 GB/s
Almacenamiento de disco on-line 20 (?) PB 26 PB
Costo ~97 millones de $ 188 millones de $

 

HPC

Java en supercomputación

June 7th, 2013

La máquina virutal java (JVM) es un programa que ejecuta programas realizados en el lenguaje de proposito general Java. Una de las grandes ventajas de Java es que sus programas pueden correr en cualquier sistema operativo – Linux, Solaris, Windows, etc – una vez se haya instalado la máquina virtual java en el ordenador. Es decir, no es necesario ni compilarlo, ni modificarlo para adaptarlo al sistemas operativo nativo del ordenador.

En la supercomputación o HPC (High Performance Computing) se mantiene a día de hoy la percepción de que Java es un lenguaje que ofrece menos rendimiento que los comúnmente utilizados C, C++ o Fortran. Esta creencia tan fuertemente arraigada tiene su origen en las primeras versiones de la JVM. En 1995 cuando apareció la primera versión de Java su rendimiento si era menor al de C++, sin embargo, la JVM ha sufrido notables mejoras de funcionalidad desde su primera versión. Si además tenemos en cuenta las ventajas inherentes que nos ofrece Java no resulta complicado comprender que su uso en HPC se vea incrementado día a día. Se pueden destacar dos capacidades principales que hacen de Java un lenguaje con el potencial necesario para su uso en HPC: “el recolector de basura” y “el compilador Just-In-Time”.

El recolector de basura (Garbage Collector) se encarga de liberar la memoria no usada, lo cual facilita el trabajo de los programadores, deshaciéndose de la necesidad de liberar la memoria explícitamente en las aplicaciones permitiendo un código más limpio, más seguro y unas aplicaciones más robustas. Aunque esta ventaja también implica un gasto mayor de memoria del que otros lenguajes requieren. El compilador Just-In-Time (JIT), que ofrece la posibilidad de la creación y compilación de nuevas funciones mientras la aplicación se esta ejecutando, permite mejorar el rendimiento.

Cálculo numérico con Java

En lo concerniente a las operaciones de cálculo, Java es incapaz de seguir a otros lenguajes como C, tardando tres o incluso cuatro veces más en completar dichas tareas. Esto se debe a que Java no dispone de soporte nativo para números complejos, arrays multidimensionales y que las funciones trigonométricas no se encuentran optimizadas.

Proyectos de supercomputación en Java para el procesamiento de datos

En los últimos dos años se ha avanzado mucho en lo que a supercomputación con Java se refiere, han surgido grandes proyectos destinados tanto al cálculo científico, como al intercambio de grandes cantidades de información en los sectores financieros. Incluso en la Organización Europea para la Investigación Nuclear (CERN) se han llevado a cabo grandes proyectos con Java.

Gaia satellite

The data collected by the Gaia satellite will be analized using Java.

Dentro del ámbito del tratamiento de datos científicos en HPC mediante el uso de Java podemos encontrar la misión astrométrica espacial Gaia. El objetivo de esta misión es enviar una sonda que orbitará alrededor del Sol a una distancia de 1,5 millones de kilómetros de la Tierra durante los próximos 5 años para crear un mapa tridimensional de nuestra galaxia. Se estima que a lo largo de los cinco años que durará la misión la sonda observará miles de millones de estrellas más de 70 veces para obtener datos como: luminosidad, temperatura, gravitación, la composición en elementos químicos… Esta ingente cantidad de datos se analizarán con Java.

Un supercomputador esta formado por diversos nodos de cálculo interconectados entre sí que trabajan conjuntamente. Para esta colaboración es necesaria que los nodos se intercambien información. El modelo más utilizado para lograrlo es el paso de mensajes (Message Passing Interface, MPI), y su equivalente en Java es Message Passing in Java (MPJ). En este proyecto habría que destacar la creación de una aplicación Java llamada “MPJ-Cache”. Este middleware mediante el uso de MPJ ofrece una interfaz de programación (API) de alto nivel que ofrece al programador funcionalidades como: almacenamiento temporal en cache, precarga de datos, división y recombinación de archivos grandes, precarga de datos… de forma distribuida en los nodos. El uso de la misma registró un rendimiento total de hasta 100 Gbps.

En cuanto al procesamiento de grandes cantidades de datos en Java orientados a la supercomputación nos encontramos con la herramienta “LMAX Disruptor”. Fue creada inicialmente para manejar el procesamiento de datos en un entorno financiero, sin embargo, debido al gran avance que ha supuesto aspira a llegar más allá. El problema inicial es que que los bloqueos en las colas que requieran la mediación del Sistema Operativo resultan muy costosos, por ello decidieron crear este framework libre de bloqueos. Para lograrlo hace uso del “magic ring buffer” que, como indica su propio nombre, es un anillo el cual se usa de buffer para pasar de un proceso a otro. Cada registro del buffer guarda un puntero al siguiente proceso. Este sistema sustituye el uso de las colas lo cual ofrece un mayor rendimiento al evitar los bloqueos, sin embargo, incrementa la complejidad del propio código.

Conclusión

Es posible que Java aun tarde años en acabar por alcanzar a C++ y Fortran en su uso, sin embargo la portabilidad que nos ofrece el propio Java es un gran punto a su favor. Esto unido a las diversas librerías y herramientas dota a Java con las funcionalidades necesarias para suplir con creces las necesidades de proyectos de supercomputación. A pesar de ello, tiene carencias difíciles de ser pasadas por alto, como las dificultades mencionadas para los cálculos. Otra desventaja añadida al uso de Java en comparación con otros lenguajes es la memoria, Java requiere más de la que C++ utiliza. De modo que, si bien Java dispone de las capacidades necesarias para el HPC, no siempre resulta ser eficiente en todos los aspectos necesarios, lo cual le augura un futuro incierto como entorno de desarrollo general en HPC, aunque si es viable en ciertos campos.

Gorka Frade Camino,
Alumno en prácticas del centro IEFPS Elorrieta-Erreka Mari en prácticas en el IZO-SGI.

Referecias

Tesis de Aidan Fries. The use of Java in large scientific applications in HPC environments.
Java vs C++ performace.
Wikipedia. High performance computing.

Wikipedia. Compilación en tiempo de ejecución.

Wikipedia. Java.

Wikipedia. Java performance.

Análisis del rendimiento de Java.
LMAX Disruptor.

 

 

HPC