Skip to content Skip to navigation

OpenStax-CNX

You are here: Home » Content » Introducción al Cómputo de Alto Rendimiento

Navigation

Recently Viewed

This feature requires Javascript to be enabled.
 

Introducción al Cómputo de Alto Rendimiento

Module by: José Enrique Alvarez Estrada. E-mail the authorTranslated By: José Enrique Alvarez Estrada

Based on: Introduction to High Performance Computing by Charles Severance, Kevin Dowd

Summary: Esta es una introducción al libro Cómputo de Alto Rendimiento.

¿Por qué Preocuparse por el Rendimiento?

Durante la última década, la definición de lo que se denomina "cómputo de alto rendimiento" ha cambiado dramáticamente. En 1988 apareció un artículo en el Wall Street Journal titulado "El Ataque de los Micros Asesinos", que describía la forma en que los sistemas de cómputo compuestos de varios pequeños procesadores económicos pronto haría obsoletas a las grandes supercomputadoras. En ese tiempo, una "computadora personal" que costaba US$3,000 podía realizar 0.25 millones de operaciones de punto flotante por segundo, una "estación de trabajo" que costaba US$20,000 podía realizar 3 millones de operaciones de punto flotante, y una supercomputadora que costaba US$3 millones podía realizar 100 millones de operaciones de punto flotante por segundo. Así que, ¿por qué no simplemente conectar 400 computadoras personales juntas para lograr el mismo rendimiento de una supercomputadora, por tan sólo US$1.2 millones?

Esta visión se ha hecho realidad en varias formas, pero no en la que pensaban aquellos que propusieron originalmente la idea de los "micros asesinos". En vez de ello, el rendimiento del microprocesador ha ganado implacablemente al de la supercomputadora. Esto ha sucedido por dos razones. Primero, se ha dedicado mucha más inteligencia a mejorar el rendimiento en el área de la computadora personal, que la aplicada a las supercomputadoras de los ochenta para el mismo fin. Además, una vez qu las compañías de supercómputo logran romper alguna barrera técnica, las compañías de microprocesadores pueden adoptar rápidamente tales elementos exitosos de los diseños de supercómputo, con pocos años de diferencia. El segundo factor, tal vez el más importante, fue la emergencia de un próspero mercado de la computadora personal y de negocios, con demandas cada vez mayores de rendimiento. Usos computacionales tales como las gráficas 3D, interfaces gráficas de usuario, multimedia y videojuegos fueron los factores impulsores de este mercado. Con un mercado tan grande, fluyero los dólares disponibles para la investigación y el desarrollo de procesadores económicos de alto rendimiento para el mercado casero. El resultado de esta tendencia hacia computadoras más rápidas y pequeñas, se hace evidente conforme los antiguos fabricantes de supercomputadoras están siendo adquiridos por compañías que fabrican estaciones de trabajo (Silicon Graphics compró Cray, y Hewlett-Packard compró Convex en 1996).

Como resultado, casi todo aquel con acceso a una computadora tiene ahora un procesador de "alto rendimiento". Conforme crecen las velocidades pico de esas nuevas computadoras personales, estas máquinas encuentra todos los retos de rendimiento típicos de las supercomputadoras.

Aunque no todos los usuarios de estaciones de trabajo personales requieran conocer los detalles íntimos del cómputo de alto rendimiento, aquellos quienes programan estos sistemas para extraerles el máximo rendimiento se beneficiarán de un entendimiento de las fortalezas y debilidades de estos novedosos sistemas de alto desempeño.

Alcances del Cómputo de Alto Rendimiento

El cómputo de alto rendimiento cubre un amplio espectro de sistemas, desde nuestras computadoras de escritorio hasta los grandes sistemas de procesamiento paralelo. Dado que la mayoría de los sistemas de alto rendimiento están basados en procesadores para computadoras con conjunto reducido de instrucciones (RISC por sus siglas en inglés), muchas técnicas aprendidas en cierto tipo particular de sistemas se transfieren fácilmente a los otros.

Los procesadores RISC de alto rendimiento están diseñados de forma tal que se puedan insertar fácilmente en un sistema multiprocesador, de entre 2 y 64 CPUs accesando a una memoria única, usando multiprocesamiento simétrico (SMP por sus siglas en inglés). Pero programar múltiples procesadores para resolver un único problema genera su propio conjunto de retos adicionales para el programador, quien debe estar consciente de cuántos de esos procesadores múltiples operan juntos, y cómo puede dividirse eficientemente el trabajo entre ellos.

Incluso en aquellos casos done cada procesador es muy poderoso, y puede ponerse un pequeño número de ellos en un único contenedor, a menudo existirán aplicaciones tan grandes que requieran distribuirse en varios contenedores. Para poder cooperar en la resolución de una aplicación más grande, estos contenedores se enlazan entre sí mediante una red de alta velocidad, de modo que operen como una red de estaciones de trabajo (NOW por sus siglas en inglés). Puede usarse una NOW individualmente como un sistema de encolamiento por lotes, o como una multicomputadora más grande, empleando una herramienta de paso de mensajes tal como la máquina virtual paralela (PVM por sus siglas en inglés) o la interfaz de paso de mensajes (MPI).

Para los problemas más granes, aquellos con más interacción entre datos y cuyos usuarios manejan presupuestos del orden de millones de dólares, todavía existe el extremo superior del espectro de computadoras de alto rendimiento, los sistemas de procesamiento paralelo escalable con centenares a millares de procesadores. Tales sistemas vienen en dos variedades. Una de ellas es programable usando paso de mensajes. En vez de usar una red de área local estándar, tales sistemas se conectan usando una interconexión propietaria, escalable, de gran ancho de banda y baja latencia (¿a poco no parece charla de mercadólogo?). Gracias a esta interconexión de alto rendimiento, esto istemas pueen escalar hasta miles de procesadores, a la vez que minimizan el tiempo utilizado (gastado) en la sobrecarga debida a las comunicaciones en sí.

El segundo tipo de sistema de procesamiento paralelo es el denominado acceso a memoria no-uniforme escalable (NUMA por sus siglas en inglés). Tales sistemas también usan un mecanismo de interconexión de alto rendimiento entre los procesadores, pero en vez de usarlo para intercambiar mensajes, lo emplean para instrumentar una memoria compartida distribuida, accesible para cualquier procesador a través del paradigma carga/almacenamiento. En este sentido es similar a programar sistemas SMP, excepto que el acceso a algunas zonas de memoria es más lento que a otras.

Estudiando Cómputo de Alto Rendimiento

Estudiar cómputo de alto rendimiento es una excelente excusa para repasar lo que sabemos de arquitectura de computadoras. Una vez en pos de extraer hasta el último bit de rendimiento de nuestros sistemas de cómputo, estaremos más motivados para comprender plenamente aquellos aspectos de la arquitectura que tienen un impacto directo en el rendiminto del sistema.

A lo largo de toda la historia de la computación, los vendedores nos han dicho que sus compiladores resolverán todos nuestros problemas, y que los creadores de tales compiadores pueden lograr el mejor rendimiento absoluto del hardware subyacente. Tal reclamo nunca ha sido, y probablemente nunca será, totalmente cierto. La habilidad del compilador para lograr el rendimiento máximo disponible en el hardware mejora con cada nueva generación de ambos, hardware y software. Sin embargo, conforme ascendemos en la jerarquìa de las arquitecturas de cómputo de alto rendimiento, podemos depender cada vez menos del compilador, y los programadores deben tomar a su cargo la responsabilidad del rendimiento de su código.

En los sistemas con un solo procesador y en los SMP con pocas CPUs, uno de nuestros objetivos como programadores debe ser quitarnos del camino y no estorbar al compilador. Con frecuencia los constructos usados para mejorar el rendimiento en una arquitectura en particular, limitan nuestra habilidad de mejorar el rendimiento en otra aquitectura. Es más, tales "brillantes" (léase obtusas) optimizaciones manuales a menudo confunden al compilador, limitando su habilidad de transformar automáticamente nuestro código para que tome ventaja de las fortalezas particulares de la arquitectura subyacente.

Como programadores, es importante que conozcamos cómo trabaja el compilador, de forma que podamos saber cuándo ayudarlo, y cuándo hacernos a un lado. También debemos estar conscientes que conforme mejoran los compiladores (aunque nunca sea tanto como dicen los vendedores), es mejor delegar más responsabilidad en ellos.

Conforme ascendemos en la jerarquía de las computadoras de alto rendimiento, necesitamos aprender nuevas técnicas para mapear nuestros programas hacia esas arquitecturas, incluyendo extensiones de lenguajes, llamadas a bibliotecas y directivas de compilación. Conforme usamos estas características, nuestros programas se vuelven menos transportables. También, al utilizar estos constructos de alto nivel, no deberemos hacer modificaciones que resulten en un rendomiento pobre sobre los microprocesadores RISC individuales que a menudo conforman el sistema de procesamiento paralelo.

Midiendo el Rendimiento

Cuando se adquiere una computadora para aplicaciones computacionalmente intensivas, es importante determinar qué tan bien desempeñará esta función el sistema. Una forma de elegir uno de entre un conjunto de sistemas contendientes, es que cada vendedor le preste uno de sus sistemas durante un periodo de tiempo, para probar las aplicaciones. Al final de tal periodo de evaluación, puede usted devolver aquellos que no dieron el ancho y pagar por su favorito. Desafortunadamente, muchos vendedores no le prestan sus equipos durante tal periodo de tiempo a menos que haya alguna seguridad de que eventualmente lo comprará.

Con frecuencia evaluaremos el rendimiento potencial del sistema usando benchmarks. Hay benchmarks industriales, así como los suyos propios. Ambos tipos requieren de pensamiento y planeación cuidadosos, si se quiere que sean una herramienta efectiva para determinar el mejor sistema para su aplicación.

El Siguiente Paso

Independientemente del aspecto económico, el rendimiento computacional es un tema fascinante y retador. La arquitectura de cómputo es interesante por derecho propio, un tópico con el que todo profesional de la computación debe sentirse cómodo. Obtener hasta el último bit de rendimiento de una aplicación importante, puede ser un ejercicio estimulante, además de una necesidad económica. Probablemente hay algunas personas que simplemente disfrutan de unir ingenio con una arquitectura de cómputo inteligente.

¿Qué necesita para entrar al juego?

  • Una comprensión básica de las arquitecturas de cómputo modernas. No necesita un grado avanzado en ingeniería de cómputo, pero sí cuando menos entender la terminología básica.
  • Una comprensión básica de cómo realizar un benchmark, o medida de rendimiento, de forma que pueda cuantificar sus propios éxitos y fracasos, y usar esa información para mejorar el rendimiento de su aplicación.

Este libro pretende ser una introducción fácil de entender, así como una panorámica del cómputo de alto rendimiento. Es un campo interesante, y uno que se hará más importante conforme demandemos aún más a nuestras computadoras personales comunes. En el campo del cómputo de alto rendimiento, siempre hay una solución de compromiso entre el rendimiento de una sola CPU y el de un sistema con múltiples procesadores. Estos últimos generalmente son más caros y difíciles de programar (a menos que tenga usted este libro).

Algunas personas aseguran que eventualmente tendremos CPUs individuales tan rápidas, que no necesitaremos ningún tipo de arquitectura avanzada que requiera de habilidades especiales para programarla.

Hasta ahora en este campo de la informática, incluso a pesar de que el rendimiento del microprocesador económico ha incrementado en mil veces, no parece disminuir el interés en atar mil de esos procesadores, para incrementar la potencia en un millón de veces. Conforme más barato se vuelva el bloque constitutivo del cómputo de alto rendimiento, mayor será el beneficio de usar muchos procesadores. Si en algún momento en el futuro tenemos un solo procesador que sea más rápido que cualquiera de los sistemas escalables de 512 procesadores de hoy, piense cuánto podremos hacer cuando conectemos 512 de esos nuevos procesadores para formar un nuevo sistema.

De eso se trata este libro. Si le interesa, continúe leyendo.

Content actions

Download module as:

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks