Inicio > Aplicaciones > Mis conclusiones de la computación paralela

Mis conclusiones de la computación paralela

jueves, 11 de abril de 2024 Dejar un comentario Ir a comentarios

Algunas ideas que tenía acerca de la computación paralela resultaron ser erróneas, mientras que otras sólo serán relevantes en un futuro próximo. Sin lugar a dudas, la computación paralela fue empujada y forzada a la corriente principal de la informática orientada a objetos como lo fue en el milenio anterior.

Un poco de historia: Hardware

Los primeros en hacer frente a la computación paralela fueron los desarrolladores de hardware debido a que el hardware soporta diversos dispositivos trabajando al mismo tiempo, con diferentes tasas de operación y de tiempo de respuesta. El diseño de hardware es también “Dirigido por Eventos” debido a que los dispositivos trabajan independientemente y emiten un evento de interrupción cuando es necesario. El hardware de la computadora que conocemos hoy en día es totalmente paralelo sin embargo, esta centralizado en una sola CPU (Unidad Central de Procesamiento) y múltiples dispositivos periféricos.

Un poco de historia: Kernel

El siguiente apoyo a la computación paralela fue la infraestructura de software que en los sistemas operativos modernos es el Kernel. El Kernel debe ser compatible con diversos eventos por incorporarse en la forma de Interrupciones de Hardware y propagarse al software como eventos. Los Kernels generalmente tienen un diseño distribuido con distintos controladores que pueden comunicarse entre sí. El objetivo central en los sistemas es permitir la comunicación entre los controladores y admitir la sincronización pero no se supone que debe contribuir a la lógica del negocio de la aplicación en cualquier forma o manera.

Un poco de historia: Red

UNIX se basa en los servicios. Un servicio es una forma de llamar a una función sobre la red. Las Tecnologias de red  requieren de un diseño distribuido en el que cada elemento es totalmente paralelo hacia el próximo y no hay una “unidad de procesamiento” como sistema principal. UNIX llevó esto a otro nivel con Tecnologias como servicios, tuberías, procesador de mensajes, sockets, Fork y más. En un momento en que la programación era un trabajo tedioso, el desarrollo de un sistema operativo que soporte Fork significo grandes esfuerzos. Sin embargo UNIX había construido en apoyo de ese mecanismo que resuelve tantos problemas… Sólo nos olvidamos de cómo usarlo y yo no recuerdo haber visto un nuevo diseño de sistema que tenga Fork en el.

Un poco de historia: Aplicaciones

Cuando empecé con la programación en C y encontré algo acerca de los hilos intente hacer las cosas en paralelo solo para ver cómo funciona. El resultado fue, como pueden imaginar, más que peor. La aplicación funcionaba mucho más lenta, había “errores al azar” y el código se veía terrible. La explicación que obtuve fue que hay solo una CPU y los diferentes hilos compiten por ella. CPUs no Multi-núcleo significa que no hay ROI (retorno de la inversión) para usar múltiples hilos y son necesarios grandes esfuerzos para un diseño paralelo.  La única razón para usar hilos es cuando realmente tienes que, por ejemplo, cuando hay necesidad de esperar a un buffer de hardware o de red.

Computación Paralela hoy en día

Desde hace unos años las CPUs tienen ciertas limitaciones de hardware que hacen necesaria una refrigeración especial. En este punto la carrera para reducir el tamaño del silicio e incrementar la frecuencia del reloj ha terminado. En lugar de gastar grandes cantidades de silicio en el CPU para algoritmos avanzados que mejoren las instrucciones pre-fetch, CPUs más pequeños y más simples  son usados y hay espacio para más de una CPU en una misma oblea de silicio. Tenemos la CPU multi-núcleo que significa prácticamente varias CPUs en el mismo equipo.

Al principio, los núcleos de una CPU multi-núcleo eran más sencillos que el de un solo núcleo. Estos núcleos también operan en una frecuencia mucho más baja lo que significa que una aplicación diseñada para una operación única de la tarea tendría un enorme impacto en el rendimiento al pasar a un equipo nuevo, por primera vez.

La computación paralela se ha convertido en la corriente principal. Empezamos con una larga serie de conferencias sobre la computación paralela. Parecía que la gente quería saber sobre este tema, pero sobrevino que la computación paralela asusto a la gente. Hay una enorme brecha antes de que puedas llegar a ser un buen programador paralelo. Así como lo es para la programación orientada a objetos. Esto significa que los jefes de equipo y los arquitectos se encontraban en el mismo nivel que los programadores principiantes.

Añade a esto el hecho de que hay grandes cantidades de código ya escrito para una CPU de un solo núcleo y las ventajas que pueden obtenerse después de que al menos alguien lo re-escriban. Pero la más importante razón de peso para rechazar la computación paralela fue que es más fácil y más barato comprar otra máquina, que hacer el mejor de los núcleos del CPU. Esta fue una realidad que impulso la computación de la nube (Cloud Computing).

Quien esta haciendo Computación Paralela

Hay varios tipos de computación paralela. El hardware es paralelo porque el Kernel es paralelo. Con este tipo de paralelismo cada trabajador están haciendo otras cosas, y los trabajadores son dueños de sus recursos en lugar de compartirlos. Durante mucho tiempo ahora los chips DSP (Procesamiento de Señales Digitales) son CPUs multi-núcleo de manera que los chips ejecutados en estos chips pueden correr más rápido. Los algoritmos y chips DSP son evaluados en MIPS que es la cantidad de instrucciones por constante de tiempo. El aumento del rendimiento por medio de algoritmos significa que usa menos instrucciones o se han agregado más núcleos al CPU. Las PCs también ejecutan algoritmos tales como reconocimiento de rostros, detección des imágenes, filtrado de imágenes, detección de movimiento,  y mucho más. La transición desde un único núcleo a multi-núcleo fue rápida y simple.

El aumento en el rendimiento de los algoritmos es relativo a la cantidad de cálculos por ítem de datos. A más computación más núcleos se pueden utilizar. La combinación de imagines (fade) es un ejemplo de algoritmo que puede disfrutar del uso de más de un solo núcleo. Toma una imagen y combina cada pixel con el correspondiente pixel de otra imagen. Cada pixel debe ser leído de la memoria RAM y a continuación una simple adición y desplazamiento a la derecha se llevan a cabo y, a continuación el resultado debe ser escrito de nuevo a la RAM. La CPU puede operar a una velocidad de 3GHz y la RAM a 1 Ghz. Por cada pixel de la imagen: se lee el pixel A, se lee el pixel B, adiciona, desplaza ala derecha, escribe el pixel resultante. Añade otro núcleo y los núcleos de la CPU bloquearan entre si el acceso a la memoria. Esto es también valido para Base de Datos y algoritmos de bases de datos como algoritmos de ordenamiento, listas enlazadas, etc. Por esta razón, las nuevas CPUs multi-núcleo tienen un amplio soporte para el acceso paralelo a la memoria.

ROI del Computo Paralelo

La computación paralela es el nuevo futuro para las computadoras. Orientado a Objetos ya no es la palabra de moda. Le sigo diciendo a la gente que antes de hacer un diseño orientado a objetos en sus sistemas deben hacer diagramas de flujo. Los buenos DOO están basados en buenos diagramas de flujo, ya sea que las escribas o las pienses en tu cabeza como un arte.

Estamos acostumbrados a pensar que la interfaz de usuario es el producto y el DOO es la manera de conseguirlo. Ahora parece que se equivocaron: La experiencia de usuario es el producto y el diseño Paralelo es la manera de conseguirlo. La experiencia de usuario (UX) no es la interface de usuario (UI). La interfaz de usuario define el aspecto del producto, o en otras palabras la UI define lo que es el producto. El diseño orientado a objetos define el aspecto del código, o en otras palabras el DOO define lo que es el código fuente. La computación paralela define como funciona el código, o en otras palabras la computación paralela define lo que hace el código. La experiencia de usuario define como se comporta la aplicación, o en otras palabras la experiencia de usuario define lo que hace la aplicación.

No uso la librería de C++ debido a que usa listas enlazadas. Solo uso esa librería debido a que se puede ordenar.

No compro un producto, porque pareciera que quiero mostrarlo y por eso puedo comprarme un cuadro enmarcado en su lugar. Compro un producto debido a que hace algo que necesito y no hace lo que no necesito.

La computación paralela es básica para la experiencia de usuario. Incluso si tiene un solo núcleo es mejor tener un buen diseño paralelo. En la medida que los clientes conozcan esto, no quiero accidentalmente «Imprimir» en lugar de «Guardar» y esperar 5 segundos de castigo para abrir la ventana de diálogo en lo que puedes cerrarla. (Véase el video de demostracion de 43 min).

Hoy en día tenemos tantos recursos y buenas herramientas. Ahora es el momento de aprender a trabajar en paralelo y producir buenos productos con buena UX.

Comparte y diviertete:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • BlinkList
  • Blogosphere
  • Live
  • Meneame
  • MSN Reporter
  • MySpace
  • RSS
  • Suggest to Techmeme via Twitter
  • Technorati
  • LinkedIn
  • email
  • FriendFeed
  • PDF
  • Reddit
  • Wikio IT
  • Add to favorites
  • blogmarks
Top Footer