miércoles, 25 de abril de 2012

Wiki Contributions - Week 12

For this week I went back into the ruby on rails web interface, so looking into the documentation and some other information I found a library called Net::SSH, used to interact between Ruby and SSH. This will be needed in order for the web interface to use ssh to send the tasks to the nodes, and to receive the output from each node, in order to keep track of the cluster performance.


Links to the wiki:

Nominations:

viernes, 20 de abril de 2012

Tarea 4 - Sistemas Caóticos - Mar

Sistema Caótico - ¿Qué es?

Podría definirse un sistema caótico como un sistema dinámico muy sensible a las condiciones iniciales, es decir que ocurren cambios muy bruscos en la solución aunque alteres muy poquitito los valores con los que empiezas (o sea tus condiciones iniciales).


No se trata de encontrar soluciones exactas a las ecuaciones que definen dicho sistema dinámico (lo cual suele ser imposible), sino más bien el poder contestar preguntas como "¿A largo plazo, se estabilizará el sistema? ¿Y si lo hace, cuáles serán los estados posibles?" o "¿Variará el estado a largo plazo del sistema, si cambian las condiciones iniciales?"

Existen muchos ejemplos de sistemas caóticos, cosas como el clima, el crecimiento de las plantas, las tormentas, el latir del corazón(flujo de sangre), y otras más, tienen una naturaleza de este tipo.

En mi caso en particular, decidí estudiar el mar en lugares encerrados, y tratare de explicar por qué es caótico.


Características de un sistema caótico

Para conocer si un sistema es caótico, se suelen buscar las siguientes características:
  • Sensibilidad a las condiciones iniciales. Esta característica implica que cada punto en un sistema es arbitrariamente aproximado por otros puntos con trayectorias futuras significativamente diferentes. Entonces, una pequeña perturbación en la trayectoria actual puede llevar a un diferente comportamiento más adelante. 
  • Topologicamente mezclado. Esto significa que el sistema evolucionara con el tiempo, así que una región o conjunto abierto de su espacio eventualmente se sobrepondrá con otra región dada. 
  • Densidad de orbitas periódicas. La densidad de orbitas periódicas significa que cada punto del espacio es aproximado arbitrariamente de manera cercana por órbitas periódicas. Sistemas topologicamente mezclados que fallen esta condición, probablemente tampoco tengan sensibilidad a las condiciones iniciales, y por lo tanto pueden no ser caóticos.
En mi caso en particular, decidí estudiar el mar, y tratare de explicar por qué es caótico.

El mar

Como ya sabemos, Un mar es una masa de agua salada de tamaño inferior al océano, así como también el conjunto de la masa de agua salada que cubre la mayor parte de la superficie del planeta Tierra, incluyendo océanos y mares menores.

En las simulaciones posteriores se usará un tipo de mar específico, mar cerrado Los mares cerrados suelen ocupar extensas depresiones endorreicas . Corresponden a lagos muy grandes, de agua más o menos salada, entre los cuales destacan el mar Muerto, el mar Caspio y el mar de Aral.

¿Por qué es caótico?

El mar(pensandolo como un sistema), es caótico debido a que diversas partes de su "funcionamiento" afectan como se comporta. Por ejemplo, la temperatura, la presión del aire, las tormentas y también los efectos de la rotación de la Tierra afectan la dirección de las corrientes oceánicas y el comportamiento del mar, por lo tanto, es sensible a las condiciones iniciales




Un terremoto en algún lugar bajo el mar en un lugar alejado de la civilización, puede ocasionar enormes tsunamis que destruyen ciudades. Este tipo de eventos es lo que convierte el mar en un sistema caótico.


Como sistema caótico, también cumple con las características de ser topológicamente mezclado, y densidad de órbitas periódicas, pero es necesario observar las gráficas posteriores para ver estas características.


Aquí un video de la visualización de las corrientes oceánicas entre los años 2007-2010, realizada por la NASA :



Modelado mediante un Sistema de Ecuaciones

Investigando en internet, encontré un pdf interesante de un par de científcos que deseaban presentar un modelo de un mar caótico encerrado(bounded chaotic sea). El objetivo del pdf era dar una definición precisa de islas elípticas y mares caóticos. En dicho pdf, se proponen dos ecuaciones para modelar dicho már caótico encerrado:

Donde:
  • a >= 0, y b>= 0 son los parámetros de bifurcación
  • x, y son las variables
Entonces, utilizando a = 3.5 y b = 0.3,  con x0 = 0.123,  0.177 < y0 < 0.277 con pasos de 0.01; en el pdf se presentaba la siguiente gráfica de un mar caótico:


Mi objetivo fue entonces, modelar dichas ecuaciones en un programa en python, para poder inicialmente reproducir dicho mar caótico. Inicialmente no tuve éxito, ya que al modelarlo se producían líneas, puntos y otras gráficas no deseables, pero en un punto, se produjo el primer avance. Dado a que x inicial = 0.123, y inicial = 0.177, observe que utilizando solo esos valores, se dibujaba un cŕculo bastante pequeño. Alejando la vista a los rangos de la imágen anterior ( -0.1 : 0.4), pude observar que dicho círculo se visuallizaba como un punto en el centro de dichas coordenadas, como la imágen anterior.

Gráfica inicial, se aprecia como un círculo               Gráfica ajustada, se aprecia como un punto

Ahí me di cuenta que después de encontrar dichos puntos para ese círculo, debía repetir el proceso, aumentando la y inicial con 0.01, para así ir expandiendo los círculos. Haciendo esto, logré la siguiente gráfica:

Utilizando a = 3.5 y b = 0.3,  con x0 = 0.123,  0.177 < y0 < 0.277 con pasos de 0.01;

Aquí es donde se podría definir la naturaleza caótica del sistema. Uno esperaría observando el comportamiento inicial del sistema, que la gráfica solamente fuera expandiendose en elipses, y elipses. Pero en algún punto, dependiendo de las condiciones iniciales, el sistema se convierte en una especie de triángulo, con las elipses en su interior. Esto puede visualizarse como un mar caótico cerrado.

Entonces podemos ver las tres características del sistema caótico:
  • Es sensible a las condiciones iniciales
  • Tiene una topología mezclada, ya que algunos puntos se sobreponen, y muestra diferentes formas.
  • Cada punto en el espacio son aproximados por órbitas periódicas.
Código:

#!/usr/bin/python

import math
dt=.01
a = 3.5
b = 0.3
pfile=open('sea.dat','w')
x=0.123
y=0.177
while y < 0.277:
 for i in range(1000):
  pfile.write("%f %f\n"%(x, y))
  x_n1 = -a*(math.pow(x, 2)) + y
  y_n1 = b - abs(x)
  y = y_n1
  x = x_n1
 y = y + dt
pfile.close()

Graficar con:

plot "sea.dat"; set xrange[-0.1:0.4]; set yrange[-0.1:0.4]; set title "Chaotic Sea"

Otros ejemplos:

Aquí hay algunos otros ejemplos modificando los paramétros de bifurcación, donde también se puede apreciar la naturaleza caótica:


Utilizando a = 4.8 y b = 0.3,  con x0 = 0.123,  0.177 < y0 < 0.277 con pasos de 0.01;


Utilizando a = 3.9, b = 0.3, x0 = 0.13, 0.16 < y0 < 0.277


Referencias:

jueves, 19 de abril de 2012

Extra - Aproximación a Ecuaciones Diferenciales

Para esta semana, se nos dio a la tarea de realizar una aproximación para resolver una ecuación diferencial, desde un simple programa, utilizando simples operacones matemáticas. Para esto, me base fuertemente en el código pasado del atractor de lorenz, que hacia algo similar para obtener los datos de las ecuaciones diferenciales de Lorenz.

En este caso, reemplace la ecuacion con una de ejemplo que encontré en una página web, y ajuste algunos datos para poder escribir los resultados en un archivo, y después graficarlos. La ecuación que utilicé, es la siguiente:


wpe6D.gif (1561 bytes)


El código es el siguiente:

#!/usr/bin/env python
import math
tstop=100
dt=.01
pfile=open('diferencial.dat','w')
efile=open('exact.dat', 'w')
t=0
y=1
while t<tstop:
 t=t+dt
 dydt= 3*math.exp(-4*t) - 2*y 
 y=y+dydt*dt
 exact = .5*math.exp(-4*t)*(5*math.exp(2*t)-3)
 pfile.write("%f %f\n" % (t, y))
 efile.write("%f %f\n" %(t, exact))
pfile.close()
efile.close()
print "Archivos escritos"

Es bastante sencillo, como explicado en clase definimos un dt pequeño(entre más pequeño, nuestra aproximación podrá ser más precisa, pero también tardará más en ejecutarse al generar muchas más datos). Usamos un archivo para escribir los datos de la aproximación, y otro para los datos exactos. 

Para obtener los datos exactos, es necesario resolver la ecuación diferencial de un modo matemático, para esto utilicé wolfram alpha, donde escribí la ecuación diferencial anterior, y me dió la solución, dando lo siguiente como resultado:


En la imágen podemos observar la parte donde dice 'Diferential equation solution', esa es la solución a nuestra ecuación diferencial. Entonces en el programa, utilizo esta fórmula resuelta totalmente lineal para generar directamente los datos exactos, y los escribo en un archivo distinto. 

Ya para terminar, grafiqué los datos para comparar mi aproximación y la solucón exacta, y a la vista, son prácticamente iguales, es necesario ver los valores de los datos para poder apreciar la diferencia.

Gráfica:




Algunos datos:

AproximaciónExacto

0.010000 1.008824
0.020000 1.016341
0.030000 1.022621
0.040000 1.027733
0.050000 1.031741
0.060000 1.034705
0.070000 1.036684
0.080000 1.037735
0.090000 1.037910
0.100000 1.037262
0.110000 1.035838
0.120000 1.033684
0.130000 1.030846
0.140000 1.027366
0.150000 1.023283
0.160000 1.018636


0.010000 1.009313
0.020000 1.017299
0.030000 1.024031
0.040000 1.029575
0.050000 1.033997
0.060000 1.037359
0.070000 1.039720
0.080000 1.041136
0.090000 1.041661
0.100000 1.041347
0.110000 1.040242
0.120000 1.038395
0.130000 1.035848
0.140000 1.032646
0.150000 1.028828
0.160000 1.024434

Referencias:

Extra - Atractor de Lorenz

Atractor de Lorenz


El sistema de Lorenz es un sistema de ecuacones diferenciales ordinarias (Ecuaciones de Lorenz) estudiadas por Edward Lorenz. Es notable para obtener soluciones caóticas para ciertos valores de parámetros y condiciones iniciales. En particular, el atractor de Lorenz es un conjunto de soluciones del sistema de Lorenz en el cual, cuando se grafica, asemeja a una mariposa, o un número 8 dependiendo el ángulo de vista.


Descripción


Edward Lorenz desarrolló un modelo matemático simplificado para convección atmosférica. EL modelo es un sistema de tres ecuaciones diferenciales ordinarias, que se conocen como ecuaciones de Lorenz:
\frac{dx}{dt} = \sigma (y - x)
\frac{dy}{dt} = x (\rho - z) - y
\frac{dz}{dt} = xy - \beta z
Aquí, "x", "y", y "z" hacen el estado del sistema, "t" es el tiempo, y  \sigma\rho\beta, son los parámetros del sistema. 


Python (http://mensch.org/vplot/lorenz/lorenz.py):


#!/usr/bin/python
#Valores usados por las formulas
tstop=100
dt=.02
a=5.
b=15.
c=1.
#Abrimos un archivo para escribir los valores
pfile=open('lorenz.dat','w')
pfile.write("#Lorenz attractor written by lorenz.py \n")
pfile.write("#a=%6.2f  b=%6.2f   c=%6.2f \n" % (a,b,c))
t=0
x=1
y=0
z=0
while t<tstop:
 t=t+dt
 #Ecuaciones de Lorenz
 dxdt=a*y-a*x
 dydt=b*x-y-z*x
 dzdt=x*y-c*z
 x=x+dxdt*dt
 y=y+dydt*dt
 z=z+dzdt*dt
 pfile.write("%f %f %f %f\n" % (t,x,y,z))
pfile.close()
print "file lorenz.dat was written"

Octave - (http://en.wikipedia.org/wiki/Lorenz_system)



# Prevent Octave from thinking that this is a function file:
1;
% Lorenz equations solved by ODE Solve
%% x' = sigma*(y-x)
%% y' = x*(rho - z) - y
%% z' = x*y - beta*z
function dx = lorenzatt(X)
    rho = 28; sigma = 10; beta = 8/3;
    dx = zeros(3,1);
    dx(1) = sigma*(X(2) - X(1));
    dx(2) = X(1)*(rho - X(3)) - X(2);
    dx(3) = X(1)*X(2) - beta*X(3);
    return
end
 
% Using LSODE to solve the ODE system.
lsode_options("absolute tolerance",1e-3)
lsode_options("relative tolerance",1e-4)
t = linspace(0,25,1e3); X0 = [0,1,1.05];
[X,T,MSG]=lsode(@lorenzatt,X0,t);
T
MSG
plot3(X(:,1),X(:,2),X(:,3))
view(45,45)
Gráficas

Utilizando el código de python: \sigma = 5 \rho = 15 \beta = 1
Utlizando el código de Octave \sigma = 10, \rho = 28, \beta = 8/3
Referencias: 

miércoles, 18 de abril de 2012

Wiki Contributions - Week 11

Researching about clusters and administraton of clusters, I found a good application that will probably help a lot  with the cluster. ClusterSSH, which in short helps to create  a ssh connection with multiple hosts and run commands in all of them. This could be extremely useful, because the web interface could use this application instead of basic ssh to do some tasks in the hosts. Also I managed to mount some Ubuntu 10.10 (32 bit) virtual machines using VirtualBox, which I'll use to make tests:




Unfortunately, I still couldn't create a network in order for the nodes to connect, but that should be easy enough to do it in a couple hours, I'll look into that in the following days.


Class links:
- ClusterSSH




And for laboratory:
High Availability Clusters and Fault Tolerance


Extras for laboratory(Guessing game, both game's words are in the same post):
Extra Laboratory

High Availability Cluster and Fault Tolerance

Previously while looking at some information about clusters, I stumbled upon a certain kind of clusters, the High Availability Clusters. So I was a little curious, and I decided to look further into the those clusters, and I found out that they pretty much are involved with fault tolerance(which is the topic for this week), so then I had a motive to really research about that.

Fault Tolerance

Fault tolerance is the ability of a system to perform its function correctly even in the presence of internal faults. The purpose of fault tolerance is to increase the dependability of a system. A complementary but separate approach to increasing dependability is fault prevention. This consists of techniques, such as inspection, whose intent is to eliminate the circumstances by which faults arise.



Classifications

Based on duration, faults can be classified as transient or permanent. A transient fault will eventually disappear without any apparent intervention, whereas a permanent one will remain unless it is removed by some external agency. While it may seem that permanent faults are more severe, from an engineering perspective, they are much easier to diagnose and handle. A particularly problematic type of transient fault is the intermittent fault that recurs, often unpredictably.

A different way to classify faults is by their underlying causeDesign faults are the result of design failures, like the coding.While it may appear that in a carefully designed system all such faults should be eliminated through fault prevention, this is usually not realistic in practice. For this reason, many fault-tolerant systems are built with the assumption that design faults are inevitable, and theta mechanisms need to be put in place to protect the system against them. Operational faults, on the other hand, are faults that occur during the lifetime of the system and are invariably due to physical causes, such as processor failures or disk crashes.

Finally, based on how a failed component behaves once it has failed, faults can be classified into the following categories:
  • Crash faults -- the component either completely stops operating or never returns to a valid state;
  • Omission faults -- the component completely fails to perform its service;
  • Timing faults -- the component does not complete its service on time;
  • Byzantine faults -- these are faults of an arbitrary nature
Error Detection
The most common techniques for error detection are:
  • Replication checks -- In this case, multiple replicas of a component perform the same service simultaneously. The outputs of the replicas are compared, and any discrepancy is an indication of an error in one or more components. A particular form of this that is often used in hardware is called triple-modular redundancy (TMR), in which the output of three independent components is compared, and the output of the majority of the components is actually passed on 4 . In software, this can be achieved by providing multiple independently developed realizations of the same component. This is called N-version programming.
  • Timing checks -- This is used for detecting timing faults. Typically a timer is started, set to expire at a point at which a given service is expected to be complete. If the service terminates successfully before the timer expires, the timer is cancelled. However, if the timer times out, then a timing error has occurred. The problem with timers is in cases where there is variation in the execution of a function. In such cases, it is dangerous to set the timer too tightly, since it may indicate false positives. However, setting it too loosely would delay the detection of the error, allowing the effects to be propagated much more widely.
  • Run-time constraints checking -- This involves detecting that certain constraints, such as boundary values of variables not being exceeded, are checked at run time. The problem is that such checks introduce both code and performance overhead. A particular form is robust data structures, which have built-in redundancy (e.g., a checksum). Every time these data structures are modified, the redundancy checks are performed to detect any inconsistencies. Some programming languages also support an assertion mechanism.
  • Diagnostic checks -- These are typically background audits that determine whether a component is functioning correctly. In many cases, the diagnostic consists of driving a component with a known input for which the correct output is also known.

High Availability Clusters

High-availability clusters (also known as HA clusters or failover clusters) are groups of computers that support server applications that can be reliably utilized with a minimum of down-time. They operate by harnessing redundant computers in groups or clusters that provide continued service when system components fail. Without clustering, if a server running a particular application crashes, the application will be unavailable until the crashed server is fixed. HA clustering remedies this situation by detecting hardware/software faults, and immediately restarting the application on another system without requiring administrative intervention, a process known as failover. As part of this process, clustering software may configure the node before starting the application on it.


Some features of HA clusters:

  • HA clusters are often used for critical databases, file sharing on a network, business applications, and customer services such as electronic commerce websites.
  • HA cluster implementations attempt to build redundancy into a cluster to eliminate single points of failure, including multiple network connections and data storage which is redundantly connected viastorage area networks.
  • HA clusters usually use a heartbeat private network connection which is used to monitor the health and status of each node in the cluster.
Some known High Availability Clusters
References:

Proyecto PIC - Reloj Digital

Descripción:

Reloj digital, utilizando displays de 7 segmentos para mostrar la hora. Cuenta con la opción de editar la hora utilizando botones, y con segundero para mejor visualización.

Características:
  • Reloj de 12 horas.
  • Se entra al "modo de edición" al presionar dicho botón.
  • El segundero se reinicia al entrar al modo edición,
  • Se aumenta la hora al presionar el botón hora, y los minutos al presionar el botón minuto.
  • Para salir del modo edición, se presionan el botón de nuevo..
Materiales:

Diagrama de Conexiones



Nota: En el diagrama se omiten las conexiones a tierra y corriente del PIC y el decodificador por simplicidad, puedes ver el diagrama del PIC AQUÍ, y el decodificador AQUÍ, para ver en que pin conectarlos.

Funcionamiento

El microcontrolador PIC es el responsable de todas las funciones del circuito. El circuito proveerá las salidas en binario para poder mostrar los diferentes números en los displays mediante el puerto B.

Ejemplo: Si desearamos mostrar el número 7 en los display, daríamos el valor binario 0111, al puerto B, lo que el decodificador 74LS47 pasaría a las salidas para poder mostrar un 7 en los displays.

De esta forma podemos mostrar el número que deseemos en los displays, pero debido a que las conexiones de los displays están multiplexadas, normalmente se mostraría el mismo número en todos los displays(algo que no nos conviene ya que queremos un reloj). Esto lo arreglará el PIC, prendiendo y apagando los displays en cuestión de segundos para poder dar la apariencia al ojo humano de que no están parpadeando, y muestran diferentes números. Si deseas saber más sobre multiplexación, puedes leer este post que realice con un ejemplo más sencillo.

Obviamente nosotros no queremos mostrar cualquier número en los displays, queremos mostrar la hora, usando un timer. Esto significa que los displays cambiarán con el tiempo, cada uno dependiendo de los demás. Por ejemplo cuando las unidades del segundero lleguen a un número mayor a 10, estos se deben reiniciar a 0, y sumar uno a la decena del segundero. Entonces cuando el segundero llegue a 6 (que serían 60 segundos), se debe reiniciar también, y aumentar 1 a los minutos, y así sucesivamente.
El PIC se encargara de toda esta lógica.

Pero medir los segundos no es tarea fácil, agregando además que tenemos que dar retrasos entre el código para poder visualizar correctamente los displays multiplexados, por esto me fue difícil ajustar el reloj lo más posible a los segundos, ya que no pude determinar cuanto tiempo tarda en ejecutar código, para compensarlo y ajustar el segundero lo mejor posible. 

Ahora, el reloj sería inservible si solo se reiniciara al apagarlo y no nos diera la opción de editarlo. Por lo tanto se da la opción de editar las horas y minutos mediante dos push buttons. Al presionar el botán de editar, el reloj se detendrá y se pondrá a las 12:00, reiniciando los segundos a 0. Entonces presionando el botón hora, el PIC detectará el alto voltaje y aumentará en 1 las horas (que pasará a ser la 1, ya que es un reloj de 12 horas). Lo mismo con el botón de minutos.

Al desconectar el circuito, el reloj se reiniciará, y la próxima vez que se conecte estará en las 12 en punto.

Código


Pruebas

Las siguientes pruebas fueron hechas poniendo a funcionar el reloj, al mismo tiempo que el reloj de una computadora. Cabe destacar que estas pruebas no son perfectas, ya que existe el error humano de si en realidad empezaron los dos relojes al mismo tiempo(cosa que obviamente no sucedió). En la primera medición, hubo un total de 9 segundos de retraso en 1 hora, lo cual no es nada eficiente, y no sería aceptable en un reloj. En la segunda medición, después de algunas modificaciones a la programación del PIC, el retraso se redujo a poco menos de 1 segundo por hora, lo que sigue siendo ineficiente, pero fue lo más preciso a lo que pude llegar, sin utilizar un oscilador externo.

Medición 1 Medición 2
HoraRetrasoHoraRetraso
01:05Ninguno5:49Ninguno
01:111 Segundo6:07Ninguno
01:141 Segundo6:11Ninguno
01:162 Segundos6:15Ninguno
01:202 Segundos6:18Ninguno
01:253 Segundos6:23Ninguno
01:354 Segundos6:26Ninguno
01:446 Segundos6:31Ninguno
01:527 Segundos6:35Ninguno
2:059 Segundos6:42Casi un segundo


Fotos del Circuito:



Referencias:

lunes, 16 de abril de 2012

Wiki Contributions - Week 10

For week 9 I didn't get any good advance because I was kind of busy with some other stuff, I just managed to read some Ruby on Rails tutorials to some functions, but nothing big. So leaving that aside for a while, I decided to investigate a little more about the beowulf clusters, and more particularly into the master-head node, to see how the master node is supposed to work, and what should the master node do in the network. Then I found out that there is a way to create a virtual cluster, using VirtualBox which allows you to build and test the cluster without the need for the extra hardware.This could be useful to test some stuff first, before using the Cluster, but only for that, because the performance will be probably poor. Of course I still will be working with the web interface, with the help of Raúl I hope.

For the class, the wiki is crashed currently(April 15th) but again, I'll post the information here in my blog first, in order to upload it later to the wiki.


-- Edit -- 


Now the wiki is online again, so here it is the direct link to the wiki:


And for the laboratory, a small investigation about some MPI implementations:


domingo, 15 de abril de 2012

MPICH2 and Open MPI

I previously made posts about MPI, more exactly about mpi4py, which needed a MPI distribution in order to work properly. For that I used Open MPI, but MPICH2 was also an alternative, so in this post I'll explain each.

MPICH

MIPICH2 is a high performance and widely portable implementation of the Message Passing Interface (MPI), a standard for message-passing for distributed-memory applications used in parallel computing, it works for both (MPI and MPI-2)


The CH part of the name was derived from "Chameleon", which was a portable parallel programming library developed by William Gropp, one of the founders of MPICH.

The original implementation of MPICH (MPICH1) implements the MPI-1.1 standard. The latest implementation (MPICH2) implements the MPI-2.2 standard.

MPICH2 replaces MPICH1 and should be used instead of MPICH1 except for the case of clusters with heterogeneous data representations (e.g., different lengths for integers or different byte ordering). MPICH2 does not yet support those systems. MPICH2 is distributed as source (with an open-source, freely available license). It has been tested on several platforms, including Linux (on IA32 and x86-64), Mac OS/X (PowerPC and Intel), Solaris (32- and 64-bit), and Windows. 

MPICH2 is one of the most popular implementations of MPI. It is used as the foundation for the vast majority of MPI implementations including IBM MPI (for Blue Gene), Intel MPI, Cray MPI, Microsoft MPI, Myricom MPI, OSU MVAPICH/MVAPICH2, and many others.


The goals of MPICH2 are to provide an MPI implementation for important platforms, including clusters, SMPs, and massively parallel processors. It also provides a vehicle for MPI implementation research and for developing new and better parallel programming environments. 

Installing MPICH2:

If you wish to install MPICH/MPICH2 yourself, download the source code from here. Just unpack the software, move inside the directory and type:

configure 
make
make install

Compiling MPICH2 application programs:

To compile a certain c source fila, type:
mpicc -g -o binary_file_name source_file.c 

For example, for the program PrimePipe.c included in the example directory, make an executable prp this way:
mpicc -g -o prp PrimePipe.c
(If you wish to use C++, use mpicxx instead of mpicc.)

Running MPICH2 application programs:

Set up a hosts file, listing which machines you wish your MPI app to run on, e.g. hosts3:


pc28.cs.ucdavis.edu
pc29.cs.ucdavis.edu
pc30.cs.ucdavis.edu

Run, say for the above executable prp on the above hosts file, by typing


mpiexec -f hosts3 -n 3 prp 100 0

where 100 and 0 are the command-line arguments to prp.


Open MPI


The Open MPI Project is an open source MPI-2 implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able to combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software vendors, application developers and computer science researchers.


Open MPI represents the merger between three well-known MPI implementations:
  • FT-MPI from the University of Tennessee
  • LA-MPI from Los Alamos National Laboratory
  • LAM/MPI from Indiana University
with contributions from the PACX-MPI team at the University of Stuttgart. These four institutions comprise the founding members of the Open MPI development team.
These MPI implementations were selected because the Open MPI developers thought that they excelled in one or more areas. The stated driving motivation behind Open MPI is to bring the best ideas and technologies from the individual projects and create one world-class open source MPI implementation that excels in all areas. The Open MPI project names several top-level goals:
  • Create a free, open source software, peer-reviewed, production-quality complete MPI-2 implementation.
  • Provide extremely high, competitive performance (low latency or high bandwidth).
  • Directly involve the high-performance computing community with external development and feedback (vendors, 3rd party researchers, users, etc.).
  • Provide a stable platform for 3rd party research and commercial development.
  • Help prevent the "forking problem" common to other MPI projects.
  • Support a wide variety of high-performance computing platforms and environments.

References:

Domótica y Ambientes Inteligentes

Trabajando con sistemas integrados es común escuchar el término de domótica. En la clase y laboratorio hay un grupo de personas que actualmente están trabajando en realizar diferentes proyectos que están enfocados en esa área, como el control de aire acondicionado, regulación del flujo de agua y otros proyectos interesantes, por lo que decidí investigar un poco al respecto.

Domótica

Se entiende por domótica el conjunto de sistemas capaces de automatizar una vivienda, aportando servicios de gestión energética, seguridad, bienestar y comunicación, y que pueden estar integrados por medio de redes interiores y exteriores de comunicación, cableadas o inalámbricas, y cuyo control goza de cierta ubicuidad, desde dentro y fuera del hogar. Se podría definir como la integración de la tecnología en el diseño inteligente de un recinto cerrado.


La automatización de la casa puede incluir control centralizado de la luz, ventilación, calentamiento y el aire acondicionado, además de otros sistemas, para mejorar el confort, eficiencia de energía y la seguridad. También existe un tipo de domótica dedicado a las personas ancianas y discapacitadas que puede proveer una calidad de vida mejorada para las personas que de otra manera requieren de enfermeras u otro tipo de cuidado.

Un sistema como este requiere circuitos eléctricos integrados unos con otros dentro de una casa. Las técnicas empleadas incluyen no solo las mencionadas anteriormente, sino también el control de actividades domésticas como los sistemas de entretenimiento, regado de plantas, alimentación de mascotas, cambiar el ambiente para diferentes eventos, y el uso de robots domésticos. 



Los dispositivos pueden ser conectados mediante una red de computadoras para permitir el control mediante una computadora personal, y pueden ser usadas remotamente a través de internet. Mediante la integración de las tecnologías de información, estos sistemas pueden comunicarse de una manera integrada lo que resulta en beneficios en la seguridad y la eficiencia de la energía.

Ya que el número de dispositivos controlables en una casa aumenta, la interconexión y comunicación se convierte en una característica conveniente y deseada. Por ejemplo, una chimenea puede enviar un mensaje de alerta cuando necesita limpieza, o un refrigerador cuando necesita reparación. Los cuartos pueden ser inteligentes y enviar señales al controlador cuando alguien entra. Si se supone que nadie debería estar en la casa y la alarma es activada, el sistema llamaría al dueño, los vecinos o a un número de emergencia.

En instalaciones simples esto puede ser tan simple como prender los focos cuando una persona entra en un cuarto. Por otro lado, en sistemas avanzados los cuartos pueden sentir no solo cuando una persona esta dentro, sino saber quien es esa persona y quizás ajustar la luz, temperatura, niveles de música o canales de televisión, tomando en cuenta el día de la semana, la hora del día y otros factores.

Otras tareas automáticas incluyen activar el aire acondicionado para ajustarlo a un modo de ahorro de energía cuando no haya personas en la casa, y volviendo al modo normal cuando una persona esta por volver. Algunos sistemas más sofisticados pueden mantener un inventario de productos, grabando su uso mediante códigos de barra, o una etiqueta RFID, y preparar una lista de compras o hasta ordenar reemplazos automáticamente.

La domótica también provee una interfaz remota para los aparatos caseros o la automatización del sistema en sí mediante una línea de teléfono, transmisión inalámbrica o el internet, para permitir el control y monitoreo mediante un smartphone o un navegador web.



Un ejemplo de monitoreo remoto en la domótica puede referirse a un detector de incendios, que detecta cuando hay una posible alerta de incendio, haciendo que todas las luces de la casa parpadeen para informar de una posible alerta de incendio. Si el la casa esta equipada con un home theatre, un sistema con automatización en casa puede apagar todos los componentes de audio y video para evitar distracciones, o para hacer un anuncio de emergencia. El sistema puede también llamar al dueño de la casa a su número de celular para alertarlo, o llamar al departamento de bomberos.

En términos de automatización de luz en la casa, es posible ahorrar energía instalando varios productos. Con funciones simples como sensores y detectores de movimiento integrados en un simple sistema, se pueden ahorrar horas de energía desperdiciada en aplicaciones residenciales y comerciales.

Arquitectura

Desde el punto de vista de donde reside la inteligencia del sistema domótico, hay varias arquitecturas diferentes:
  • Arquitectura Centralizada: un controlador centralizado recibe información de múltiples sensores y, una vez procesada, genera las órdenes oportunas para los actuadores.
  • Arquitectura Distribuida: toda la inteligencia del sistema está distribuida por todos los módulos sean sensores o actuadores. Suele ser típico de los sistemas de cableado en bus, o redes inalámbricas.
  • Arquitectura mixta: sistemas con arquitectura descentralizada en cuanto a que disponen de varios pequeños dispositivos capaces de adquirir y procesar la información de múltiples sensores y transmitirlos al resto de dispositivos distribuidos por la vivienda, por ejemplo, aquellos sistemas basados en Zigbee y totalmente inalámbricos.

Aplicaciones


Podemos dividir las funciones o servicios que se ofrecen en cinco subgrupos:

1. Ahorro Energético

El ahorro energético es un concepto al que se puede llegar de muchas maneras. En muchos casos no es necesario sustituir los aparatos o sistemas del hogar por otros que consuman menos sino una gestión eficiente de los mismos.
  • Climatización: programación y zonificación.
  • Gestión eléctrica:
    • Racionalización de cargas eléctricas: desconexión de equipos de uso no prioritario en función del consumo eléctrico en un momento dado
    • Gestión de tarifas, derivando el funcionamiento de algunos aparatos a horas de tarifa reducida
  • Uso de energías renovables
2. Confort

El confort conlleva todas las actividades que se puedan llevar a cabo que mejoren el confort en una vivienda. 


  • Iluminación:
    • Apagado general de todas las luces de la vivienda
    • Automatización del apagado/ encendido en cada punto de luz.
    • Regulación de la iluminación según el nivel de luminosidad ambiente
  • Automatización de todos los distintos sistemas/ instalaciones / equipos dotándolos de control eficiente y de fácil manejo
  • Integración del portero al teléfono, o del videoportero al televisor
  • Control vía Internet
  • Gestión Multimedia y del ocio electrónicos
  • Generación de macros y programas de forma sencilla para el usuario.
3. Seguridad 

Consiste en una red de seguridad encargada de proteger tanto los bienes patrimoniales como la seguridad personal.



  • Alarmas de intrusión (Antiintrusión): Se utilizan para detectar o prevenir la presencia de personas extrañas en una vivienda o edificio.
    • Detección de un posible intruso
    • Cierre de persianas puntual y seguro
    • Simulación de presencia
  • Alarmas de detección de incendios, fugas de gas, escapes de agua, concentración de monóxido de carbono.
  • Alerta médica. 
  • Acceso a Cámaras IP.

4. Comunicaciones

Son los sistemas o infraestructuras de comunicaciones que posee el hogar.



  • Control remoto desde Internet, PC, mandos inalámbricos(smartphones, PDA con WiFi).
  • Asistencia remota
  • Mantenimiento remoto
  • Informes de consumo y costes
  • Transmisión de alarmas.
  • Intercomunicaciones.
5. Accesibilidad

En la accesibilidad se incluyen las aplicaciones o instalaciones de control remoto del entorno que favorecen la autonomía personal de personas con limitaciones funcionales, o discapacidad.
La domótica aplicada a favorecer la accesibilidad es un reto ético y creativo pero sobre todo es la aplicación de la tecnología en el campo más necesario, para suplir limitaciones funcionales de las personas. El objetivo de estas tecnologías es favorecer la autonomía personal. Los destinatarios de estas tecnologías son todas las personas, ya que por enfermedad o envejecimiento, todos somos o seremos discapacitados, más pronto o más tarde.

Referencias