lunes, 13 de febrero de 2012

Principios de la Computación en paralelo

 

Hace mucho tiempo he querido comenzar a escribir algo sobre Parallel Computing, y dedicare algunos post para ello, mostrarles a ustedes algo de profundización sobre el tema el cual me parece muy apasionante, la programación en paralelo cambiara universo del desarrollo computacional ya que iniciara con el aprovechamiento de los núcleos que tienen nuestros equipos, de nada sirve tener un computador de n procesadores y n núcleos si la aplicación que correrá en nuestros equipos no provee la gestión de los procesadores en paralelo. Esto que quiere decir ? Pues que si en la vida real tenemos un software que fue desarrollado hace mucho mas de 5 años y nos preguntan en la compañía sin comprando un computador Multiprocesador con n núcleos la aplicación responderá mucho mas rápido, pues la respuesta es NO!!, ya que la aplicación responderá a la velocidad que lo permita el procesador pero la aplicación seguirá trabajando de forma serial, gestionando procesos e hilos, pero desaprovechando los procesadores que posee.

Todo comenzó por una predicción realizada por el Ingeniero Gordon Moore, el cual observo que la tendencia de la microelectrónica con respeto a los circuitos integrados, esta predicción fue llamada luego Ley de Moore y decía se duplicaría la cantidad de transistores por pulgada cuadrada cada dos años en los circuitos integrados, y anticipaba que la complejidad de los circuitos integrados se duplicarían cada año con una disminución de costos considerable. La predicción realizada por Moore fue proyectada a diez años presentado la proyección como se muestra en la grafica siguiente.

clip_image001

Sin embargo esta ley se sostuvo por mas de 50 años, el problema que se tiene hoy en día es que la nanotecnología se esta trabajando con tamaños menores de una millonésima de metro, y cada vez es mas difícil para los fabricantes de hardware miniaturizar a este nivel y cuando los fabrican los dispositivos electrónicos no se comportan como fueron diseñados.

Otro de los factores que afecta es la velocidad del procesador, debido a que entre mas rápido vaya el reloj del procesador , mayor calor se produce requiriendo de tecnologías de enfriamiento avanzadas y costosos.

A continuación comparto con ustedes un video de la empresa AMD , que muestra Record Guinness en velocidad de procesador , el cual llega a 8.333 Ghz, se imaginan ustedes que actualmente para llegar a esa velocidad deben tener a una persona que le ayude a refrigerar el procesador con Nitrógeno Liquido, http://www.youtube.com/watch?v=UKN4VMOenNM o que deban disponer de un buen espacio físico en su habitación de estudio, para colocar los tanques de nitrógeno liquido para su refrigeración?.

Otro atenuante es que la velocidad de transmisión de datos esta limitada por el hardware de un equipo, el limite absoluto de la velocidad es la velocidad de la luz la cual es ( 30Cm/Nanosegundo), y actualmente en el hardware se utiliza como conductor el cobre el cual es un buen conductor y de precio cómodo a usuario final, con este conductor la máxima velocidad de transmisión que se puede alcanzar es de (9Cm/nanosegundo), bajo esta premisa es importante tener en cuenta que seria necesario encontrar un conductor que transmitiera los datos a esta velocidad , o que se pudieran miniaturizar los elementos a un nivel molecular o atómico, el limite seria alcanzado dependiendo de que tan pequeños pueden ser los componentes.

En conclusión si queremos obtener velocidades de procesamiento altas, el interesado tendrá que pensar :

  1. Obtener un sistema de enfriamiento bastante sofisticado.
  2. Utilizar un superconductor para fabricación de hardware , lo cual resultaría también costoso, se imaginan tener un equipo con un superconductor como el oro y tener este superconductor aumentaría la velocidad de procesamiento actual , pero la limitante seria el problema con la fabricación de elementos electrónicos con nanotecnología.

Aumentar Velocidad de reloj implica aumento de uso de potencia.

Aumentar uso de potencia implica aumentar salida de calor .

Debido a los inconvenientes nombrados anteriormente, las compañías deciden fabricar procesadores con múltiples núcleos con el fin de aumentar la velocidad de procesamiento, y como se realiza esto? , gestionando los núcleos del procesador de tal forma que podamos ejecutar procesos en paralelo o de manera simultanea, de tal forma que si el fabricante de software logra gestionar la utilización de los núcleos de alguna forma puede paralelizar el procesamiento , aumentando velocidad de respuesta de los procesos que ejecuta el software.

Debido a los nuevos requerimientos que la industria propone en su hardware es necesario tener una plataforma que nos ayude a poder gestionar estos recursos, para ello Microsoft propone una extensión de CLR (Common Laguage Runtime) adicionando características para programación en paralelo, esto lo podremos encontrar en Microsoft .Net Framework 4.0 incluido con Visual Studio 2010.

Con el uso de arquitecturas multinucleos, la programación ya no debe basarse únicamente en la administración de hilos, se debe pensar en la administración de procesos en cada núcleo, la programación debe escribirse diferente para esto!!!!

Existe una aplicación llamada CoreInfo que nos informa la asignación entre los procesadores lógicos y el procesador físico, el nodo NUMA (non-uniform memory ), el zócalo en el que residen, y la memoria cache que es asignada a cada procesador lógico. Esta aplicación usa la función de Windows GetLogicalProcessorInformation y lo imprime en pantalla. Esta aplicación es útil para hacerse una idea de la topología del procesador y la memoria cache del sistema.descargue esta aplicación en el siguiente enlace http://technet.microsoft.com/en-us/sysinternals/cc835722

 

clip_image002

 

Según la grafica anterior podemos ver que se tienen 4 procesadores fiscos disponibles, y Soket 0, y los nodos NUMA.

clip_image003

El el siguiente post profundizaremos sobre los computadores con multiples procesadores y las arquitecturas NUMA y SMP, también hablaremos de las diferencias entre procesos, hilos, multihilos , etc y algunos ejemplos iniciales con .Net desde luego con C#

No hay comentarios:

Publicar un comentario