Claves y Componentes de la Inteligencia de Negocios
   
EDA: Una Nueva Generación de Aplicaciones
   
UWB: La Nueva Ultra Banda Ancha
   
CMMI: Mejorando Procesos en Forma Integrada
   
MIME: Haciendo del E-Mail Una Herramienta Universal
   
XML:El estándar de los negocios electrónicos
   
P3P: Tras la privacidad en la red
   
UML: Un Lenguaje Modelo
 
ANÁLISIS
MIMO: Wireless Más Inteligente
ANÁLISIS
SOA: Creando empresas flexibles
ANÁLISIS
El poder de ajax
ANÁLISIS
MPLS: La Nueva Generación de Redes Privadas Virtuales
Ver Todas  


ANÁLISIS
CUANDO EL PROCESAMIENTO ES LA CLAVE

Ver Análisis Resumido

Empresas de telecomunicaciones, bancos, proyectos científicos y cualquier otra compañía que requiera de un alto procesamiento de cómputo tiene claro que la única solución son los HPC o Sistemas de Alto Rendimiento Computacional.

Cuando comenzó a idearse el proyecto de la autopista urbana Costanera Norte, el departamento de informática de la concesionaria tenía claro que debía montar un equipamiento de última generación con un tendido de más de 40 kilómetros de fibra óptica que permitieran la comunicación. El resultado fue una sala de servidores con más de 60 computadores de alto rendimiento con una capacidad de almacenamiento mayor a los 5 Terabytes, dispuestos para resguardar todo lo ocurrido a lo largo de la autopista.

Cuando se habla de infraestructura informática de alto rendimiento (High Power Performance Computer - HPC) o clúster de alto rendimiento, el término se suele confundir con alta disponibilidad. Pero el alto rendimiento se refiere a las propiedades del hardware y software para brindar poderosas prestaciones en cuanto a capacidad de cálculo se refiere. Los motivos para utilizar una infraestructura de este tipo son fundamentalmente dos:

- El tamaño del problema por resolver.

- El precio de la máquina necesaria para resolverlo.

Para garantizar esta capacidad de cálculo, los problemas necesitan ser paralelos, ya que el método con el que los clusters agilizan el procesamiento es dividir el problema en unos más pequeños y calcularlos en los nodos, por lo tanto, si el problema no cumple con esta característica, no puede utilizarse el cluster para su cálculo.

Algunos de los retos informáticos más complicados se abordan y, a menudo, resuelven utilizando sistemas HPC. Las compañías pueden ahora implementar clusters de servidores que ejecuten Windows Server 2003, Unix o Linux, beneficiándose de potencia de superconmutación. Por otro lado, proveedores como Sun Microsystems, HP e IBM poseen equipos que se mueven en el mundo de alta capacidad.

En términos simples, HPC significa una gran demanda de procesamiento de datos en procesadores, memoria y otros recursos de hardware, donde la comunicación entre ellos es muy rápida. La capacidad de procesamiento con la que cuentan estas supermáquinas permite satisfacer las necesidades más exigentes de la ciencia, la investigación y la industria en general.

Arquitectura paralela

Uno de los centros más importantes de investigación es Cornell Theory Center (CTC), perteneciente a la Cornell University (EE UU). Desde la década de los 80, este centro de investigaciones es líder mundial en el desarrollo de la High Performance Computing, con iniciativas sin precedentes en este ámbito, entre las que destacan la creación, en el año 2000, de un supercomputador basado en sistemas de cluster que corre sobre Microsoft Windows 2000. Utilizando tecnología de Microsoft, CTC ha desarrollado soluciones de supercomputación para los más diversos campos de la ciencia y la industria: finanzas, biomedicina, realidad virtual, física cuántica.

La mayor revolución que han experimentado los superordenadores en los últimos tiempos ha sido la paulatina transformación de las tradicionales y monolíticas máquinas basadas en gigantescos servidores a otras desarrolladas sobre servidores en cluster.

Esta evolución ha permitido a numerosos centros de investigación y compañías de todo tipo contar con los servicios de superordenadores, al poder adquirir, progresivamente, servidores de procesamiento en función de sus necesidades y presupuesto.

Las arquitecturas tradicionales de los microprocesadores tienen atributos fundamentales que limitan su desempeño. Para lograr un alto rendimiento, los procesadores no solo deben ejecutar las instrucciones de una manera más rápida, sino, que también deben ejecutar más instrucciones por ciclo de reloj, a esto nos referimos como una mayor "ejecución en paralelo". Esto permite que más información sea procesada al mismo tiempo, por consiguiente esto mejora el rendimiento global del procesador.

En arquitecturas tradicionales, el procesador por lo general es sub-utilizado debido a su habilidad limitada para organizar instrucciones. Ramificaciones (instrucciones que cambian el flujo de ejecución interno de un programa) y retrieve de memoria (el tiempo que la data se demora en llegar de la memoria) componen la ya limitada habilidad de los procesadores de hoy en día para lograr la ejecución en paralelo.

Para superar estas limitaciones, una nueva arquitectura es requerida. Las arquitecturas tradicionales demuestran su paralelismo mediante código de máquina secuencial que implica paralelismo solo del procesador.

Dentro de este contexto una de las configuraciones más utilizadas es la "computación paralela", que se refiere a una máquina con dos o más procesadores que pueden trabajar simultánea y/o coordinadamente. Hay de dos tipos: MIMD (Multiple Instruction Multiple Data), y SIMD, que se refiere a que los procesadores ejecutan las mismas instrucciones pero con diferentes datos.

Actualmente las computadoras paralelas se han dividido en diversos tipos, destacando aquellas del tipo NUMA (Non Uniform Memory Access), con memoria distribuida. Esta tecnología permite armar módulos de procesador y memoria que están integrados conjuntamente, de tal manera que es más rápido acceder a la memoria local (del mismo módulo) que a alguna otra memoria remota (en otro módulo).

Por otro lado, Intel y HP se basaron en la tecnología EPIC para definir el set de arquitectura del set de instrucciones (ISA) que comenzó a ser incorporada en la arquitectura final del microprocesador de 64 bits de Intel.

Con el tiempo, esta tecnología ISA de 64 bits trajo consigo un modus operandi innovador, que está superando a todas las limitaciones de las arquitecturas tradicionales. Con esto, la industria está migrando a los 64 bits, como una forma de implementar un sistema de alta "performance".

Técnicas de procesamiento

Existen básicamente tres tipos de técnicas para el mejoramiento de desempeño. La primera es el paralelismo explícito (que ya vimos algo en el subtítulo anterior) y las otras dos son la predicación y especulación. A continuación el detalle:

1.- Paralelismo Explícito:

Para ilustrar las limitaciones de la arquitectura y de los beneficios de los 64-bits, hay que pensar como si un procesador fuera una sala de espera de un consultorio médico. Imaginemos que hay una "recepcionista" la cual dirige a la gente a las diversas líneas de los diferentes servicios, como urgencias, exámenes, registro, recaudación, etc.

Esto es similar a lo que un sistema de alto rendimiento hace con el código de las órdenes que recibe, las que organiza para su procesamiento. Sin embargo, en arquitecturas tradicionales, el recepcionista es lento y podría organizar en forma desordenada a los pacientes del consultorio.

En el paralelismo explícito, nuestro recepcionista realmente entiende las operaciones. Así que envía a los pacientes a los lugares correctos y es tan eficiente que él puede llamar a las personas a sus casas para programar sus necesidades y visitas al consultorio por adelantado.

Esto hará que los pacientes sepan exactamente a donde deben ir, quitándole carga a nuestro recibidor, que ahora tendrá más libertad para programar a los visitantes, maximizando el número de atenciones. Este es el concepto detrás de paralelismo explícito, el compilador organiza eficientemente el código y hace explícito el pedido para que de esta manera el procesador pueda enfocarse en la ejecución de las instrucciones de manera más efectiva.

2.- Predicación:

Normalmente, un compilador cambia una expresión de ramificación del código fuente (como lo es el IF-THEN-ELSE), en bloques alternados de código de máquina, arreglados como un flujo secuencial. Dependiendo del resultado de la ramificación, el CPU ejecutará uno de los bloques básico saltándose los otros.

Predicación es un método que maneja ramificaciones condicionales. La idea principal del método es que el compilador planifique ambos caminos posibles de la ramificación para que sea ejecutada en el procesador simultáneamente.

Las ramificaciones representan una decisión entre dos sets de instrucciones. Cuando las ramificaciones son mal procesadas, la cola completa (en el ejemplo del consultorio) sufre una demora. Como las arquitecturas de hoy solo predicen mal el 5-10% de las veces, las penalidades pueden disminuir el procesamiento 30-40%. Las ramificaciones inhiben la eficiencia del compilador y sub-utilizan las habilidades del microprocesador.

Técnicamente hablando, cuando un compilador encuentre una expresión de ramificación en el código fuente, marcará todas las instrucciones que representan cada camino de la ramificación con un identificador único llamado predicado. Cada instrucción tiene un campo de predicado para eso. Cuando el CPU encuentre en tiempo de ejecución una ramificación predicada, comenzará a ejecutar el código de los dos destinos de la ramificación. Pero no guardará el resultado mientras que los valores de los registros del predicado no estén definidos.

Una vez que la condición sea evaluada, el procesador guardará un 1 en el registro del predicado el cual corresponde a "destino verdadero" y 0 en los otros. Antes de guardar los resultados, el CPU chequea cada registro del predicado de cada instrucción. Si el registro contiene un 1, la instrucción es valida, así que el CPU retirará la instrucción y almacenará el resultado. Si el registro contiene un 0, la instrucción es inválida, así que el CPU descartará el resultado.

3.- Especulación:

El retrieve de memoria, es decir, el tiempo de retorno de la data desde la memoria, es otra de las limitaciones de las arquitecturas tradicionales. Si el tiempo de traer la data desde la memoria fuese una operación bancaria, seria análoga a abrir una cuenta, la cual toma un poco de tiempo.

Cuando un nuevo cliente abre una cuenta, espera en la fila, para que después se llenen los documentos en la ventanilla. De igual forma, el retrieve de memoria aguanta al procesador, dejándolo inactivo hasta que llegue la data desde la memoria. Debido al retrieve de memoria, no se está conservando la velocidad del procesador, las cargas (la obtención de los datos desde la memoria) necesitan ser iniciados mas temprano para asegurar que la data llegue a tiempo para su uso.

Con la tecnología de 64 bits usa la especulación, un método que permite al procesador iniciar la carga anticipadamente, incluso antes de que se sepa que va a ser utilizada.

Pongamos ahora otro ejemplo: ¿Qué pasaría si el recibidor del banco pudiera identificar a los nuevos clientes de ese banco?. Si el recibidor provee los documentos para abrir una nueva cuenta por adelantado a todos los clientes que entren al banco, éstos tendrían la oportunidad de terminar de rellenar los documentos para el momento que lleguen a la ventanilla.

Si ellos no necesitan la solicitud, entonces pueden devolver el documento mientras llegan al primer lugar de la fila, devolviéndola sin uso. Esto se compara con la forma en que funciona la especulación. Las cargas de memoria son inicializadas por adelantado para asegurar que la data esta disponible para su uso. Como resultado, el compilador planifica la carga de memoria sin aguantar al procesador o bajar el rendimiento de éste.

HPC Challenge

Es tanta la importancia que se le está dando a nivel mundial al tema de la informática de alto rendimiento, que no sólo la industria informática se ha preparado para abordarla, sino que han nacido varios estudios y mediciones independientes al respecto.

Uno de los más famosos y que conviene siempre revisar es el conjunto de pruebas de desempeño HPC Challenge, diseñado por Jack Dongarra y Piotr Luszczek de la Universidad de Tennessee junto a colaboradores de Estados Unidos y Europa

Esta medición evalúa diversas capacidades que pueden dar lugar a importantes diferencias en el desempeño de los sistemas HPC en el mundo real. El conjunto de pruebas incluye la High Performance Linpack, una prueba única centrada principalmente en el desempeño del procesador, en la cual está basada la lista semestral de supercomputadoras TOP500, y agrega a ésta seis pruebas adicionales, las cuales profundizan sustancialmente la evaluación. Es posible que con el tiempo se agreguen nuevas pruebas.

El conjunto de pruebas de desempeño HPC Challenge no sólo se centra en los procesadores, sino también en el sistema de memoria y en las interconexiones. Brinda un mejor indicador de cómo se desempeñará un sistema HPC en toda la gama de aplicaciones del mundo real.

El nuevo grupo de pruebas, patrocinado de manera conjunta por la National Science Foundation, el Departamento de Energía de Estados Unidos y el programa DARPA HPCS (sistemas de computación de alta productividad), es otra de estas iniciativas. Fue presentado en el congreso anual de supercomputadoras SC2003 en noviembre de 2003 y actualmente es uno de los referentes más importantes en el mundo para chequear quién es quién en el mundo del alto rendimiento.