Skip to content Skip to navigation Skip to collection information

OpenStax-CNX

You are here: Home » Content » Cómputo de Alto Rendimiento » Qué Hace un Compilador - Cuál Lenguaje Optimizar

Navigation

Table of Contents

Recently Viewed

This feature requires Javascript to be enabled.
 

Se ha dicho, "No sé qué lenguaje se usará para programar computadoras de alto rendimiento dentro de 10 años, pero sí que se llamará FORTRAN". A riesgo de iniciar una guerra de exterminio, necesitamos discutir las fortalezas y debilidades de los lenguajes que se usan para cómputo de alto rendimiento. Muchos científicos de computadoras (no científicos de la computación) se han entrenado en una dieta continua de C, C++1 o algún otro lenguaje enfocado en estructuras de datos u objetos. Cuando los estudiantes se topan por vez primera con el cómputo de alto rendimiento, tienen el deseo instintivo de continuar programando en su lenguaje favorito. Sin embargo, si se quiere obtener el rendimiento máximo en un extenso rango de arquitecturas, FORTRAN es el único lenguaje práctico.

Cuando los estudiantes preguntan el porqué, usualmente la primera respuesta es "porque siempre ha sido así". Y en cierta forma es cierto. Físicos, ingenieros mecánicos, químicos, ingenieros estructurales y meteorólogos realizan mucha programación en computadoras de alto rendimiento, y FORTRAN es el lenguaje en esos campos. (¿Cuándo fue la última vez que un estudiante de ciencias de la computación escribió un programa que funcione apropiadamente, y que calcule durante una semana completa?) Así que de forma natural los vendedores de computadoras de alto rendimiento ponen un gran esfuerzo en hacer que FORTRAN trabaje muy bien en la arquitectura que comercializan.

Pero, claro está, ésta no es la única razón por la cual FORTRAN es el mejor lenguaje. Hay algunos elementos fundamentales que hacen que C, C++ o cualesquiera otro lenguaje orientado a las estructuras de datos no resulte adecuado para la programación de alto rendimiento. En una palabra, el problema son los apuntadores. Los apuntadores (o direcciones) son la forma mediante la cual los buenos científicos de la computación construyen listas ligadas, árboles binarios, colas dobles y toda clase de elegantes estructuras de datos. El problema estriba en que el efecto de una operación con apuntadores sólo se conoce a tiempo de ejecución, cuando el valor de dicho apuntador se carga en memoria. Una vez que el optimizador del compilador ve un apuntador, se vienen abajo todas las apuestas. No puede hacerse ninguna suposición sobre el efecto de una operación de apuntadores a tiempo de compilación. Debe generarse código conservador (menos optimizado) que simplemente hace exactamente la misma operación en lenguaje máquina, que la que describe el lenguaje de alto nivel.

Aunque la carencia de apuntadores en FORTRAN es una ventaja para la optimización, limita seriamente la habilidad del programador para crear estructuras de datos. En ciertas aplicaciones, especialmente en aquellas altamente escalables y basadas en redes, el uso de las estructuras de datos adecuadas puede mejorar significativamente el rendimiento global de la aplicación. Para resolverlo, en la especificación de FORTRAN 90 se han agregado apuntadores al lenguaje. En cierto modo, se trata de un intento de la comunidad FORTRAN para evitar que los programadores usen C en sus aplicaciones en aquellas áreas donde requieren del uso de estructuras de datos. Si los programadores comienzan a usar apuntadores en sus códigos, sus programas en FORTRAN sufrirán los mismos problemas que inhiben la optimización de los programas en C. En cierto modo FORTRAN ha renunciado a su principal ventaja respecto a C, por tratar de parecerse a C. El debate acerca de los apuntadores es una de las razones que ha frenado la tasa de adopción de FORTRAN 90. Muchos programadores prefieren crear sus estructuras de datos, comunicaciones y otro trabajo de contabilidad en C, y hacer sus cálculos en FORTRAN 77.

FORTRAN 90 también tiene fortalezas y debilidades cuando se le compara con FORTRAN 77 en plataformas de cómputo de alto rendimiento. FORTRAN 90 tiene una fuerte ventaja sobre FORTRAN 77 en su semántica mejorada, que da mayores oportunidades para optimizaciones avanzadas. Esta ventaja es especialmente cierta sobre sistemas de memoria distribuida, en los que la descomposición de datos es un factor significativo. (Véase (Reference).) Sin embargo, hasta que FORTRAN 90 se vuelva popular, los vendedores no tendrán motivación para exprimir hasta el último bit de rendimiento de FORTRAN 90.

Así que mientras FORTRAN 77 continúe siendo el lenguaje principal para el cómputo de alto rendimiento en el futuro cercano, otros lenguajes como C y FORTRAN 90 tendrán que jugar papeles limitados y potencialmente incrementales. En cierto modo el retador potencial más fuerte a FORTRAN a largo plazo puede venir en la forma de un conjunto de herramientas numéricas como Matlab. Sin embargo, los paquetes como Matlab tienen su propio conjunto de retos de optimización que deben superarse antes de que puedan derrocar a FORTRAN 77.

Footnotes

  1. Que conste que ambos autores de este libro son consumados expertos en C, C++ y FORTRAN, y no tienen nociones preconcebidas.

Collection Navigation

Content actions

Download:

Collection as:

PDF | EPUB (?)

What is an EPUB file?

EPUB is an electronic book format that can be read on a variety of mobile devices.

Downloading to a reading device

For detailed instructions on how to download this content's EPUB to your specific device, click the "(?)" link.

| More downloads ...

Module as:

PDF | More downloads ...

Add:

Collection 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

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