supercomputadores javier pérez mato microprocesadores para

Anuncio
SUPERCOMPUTADORES
JAVIER PÉREZ MATO
MICROPROCESADORES PARA COMUNICACIONES
CURSO 2008/09
1
Contenido
INTRODUCCIÓN ........................................................................................................................ 3
EVOLUCIÓN HISTÓRICA (1940 – 1970) .............................................................................. 3
COMPUTACIÓN ESCALAR Y VECTORIAL .......................................................................... 7
LA ERA VECTORIAL (1970 – 2000) ..................................................................................... 11
SUPERCOMPUTADORES BASADOS EN SMPs .............................................................. 14
CLUSTERS ............................................................................................................................... 15
LA ACTUALIDAD ..................................................................................................................... 16
CONCLUSIONES ..................................................................................................................... 19
BIBLIOGRAFÍA ......................................................................................................................... 20
2
INTRODUCCIÓN
A principios de los años setenta, la aplicación predominante de los
computadores era el procesamiento de datos administrativos. Los funcionarios
que empleaban dichos computadores se sorprendían ante la sensación de
velocidad con la que los grandes computadores de millones de dólares
procesaban los datos. Sin embargo, la comunidad científica, mostrándose
agradecida por este tremendo logro tecnológico, distaba de estar satisfecha.
Cuando en un principio se hablaba acerca de la capacidad de procesamiento
ilimitada, los ingenieros y científicos sabían que deberían esperar avances
futuros antes de que realmente pudieran usar los computadores de forma
eficiente para manejar problemas complicados. En respuesta a esa necesidad,
los diseñadores de computadores empezaron a trabajar en lo que ahora se
conoce como supercomputadores.
Fundamentalmente, los supercomputadores manejan aplicaciones que
requieren un elevado uso del procesador y una escasa necesidad de
operaciones de entrada/salida. En este tipo de aplicaciones, la cantidad de
trabajo que el sistema de computación puede realizar se encuentra limitada
principalmente por la velocidad de la máquina.
En general, los supercomputadores son máquinas de alto rendimiento que se
usan sobre todo para cálculos científicos. Para acelerar las operaciones, los
componentes se sitúan muy próximos entre sí, con el fin de minimizar la
distancia que tienen que recorrer las señales eléctricas.
La velocidad de un supercomputador se mide en base a la cantidad de
operaciones matemáticas que hace por segundo. El término técnico para esta
velocidad es el FLOP, lo cual indica el número de cálculos de punto flotante
que se realizan por segundo.
Sin la rapidez y la capacidad de cálculo de los ordenadores, algunas disciplinas
se habrían ahogado en sus planteamientos teóricos. Tal es el caso de la física
de alta energía.
EVOLUCIÓN HISTÓRICA (1940 – 1970)
La historia de los supercomputadores se remonta a los años 1940.
Particularmente en el año 1943 se presenta lo que podría considerarse como el
primer supercomputador de la historia, el Colossus. Algunos llegarían incluso a
considerar al Colossus como el primer ordenador de la historia de la
computación. El principal campo de aplicación para el que fue diseñado el
3
Colossus fue para descifrar comunicaciones Alemanas durante la Segunda
Guerra Mundial, las cuales se cifraban empleando la Máquina de Lorenz.
La máquina Colossus Mark I, primera versión del Colossus, tenía 1.500
válvulas de electrónicas, mientras que su segunda versión Colossus Mark II
disponía de 2.400 válvulas electrónicas, siendo esta segunda versión cinco
veces más rápida que la primera y se tardaba bastante menos en ser
programada.
Ilustración 1: Colossus Mark I
El mecanismo de entrada del Colossus se basaba en una cinta de papel
perforada, la cual incluía la propia señal de reloj, implementada mediante una
serie de perforaciones al margen de la cinta. La capacidad de procesado era de
unos 5.000 caracteres por segundo, aunque esta capacidad dependía de la
velocidad con la que se alimentase la tira de papel continuo, llegando a
realizarse una lectura de 9.700 caracteres por segundo durante unas pruebas.
Hablando en términos digitales, podríamos decir que el Colossus era capaz de
realizar aproximadamente unas 100 operaciones booleanas por segundo. El
Colossus se caracteriza también por ser la primera máquina en la que se
usaron los registros de desplazamiento.
El Colossus no tardó en ser desbancado por su sucesor, el ENIAC, el cual fue
presentado en 1945. Las siglas del ENIAC vienen del inglés Electronic
Numerical Integrator And Computer.
4
ENIAC fue construido en la Universidad de Pennsylvania, ocupando una
superficie de 167 metros cuadrados y operaba con un total de 17.468 válvulas
electrónicas. El consumo del mismo era de unos 160kW, lo cual elevaba la
temperatura del local en el que estaba instalado hasta rozar los 50 grados
centígrados.
Ilustración 2: ENIAC
La capacidad de cálculo del ENIAC se elevaba hasta las 5.000 operaciones de
suma/resta por segundo o las 385 operaciones de multiplicación por segundo.
El último supercomputador que podríamos incluir dentro de esta reseña
histórica de los comienzos de la supercomputación sería el BINAC (Binary
Automatic Computer), presentado en 1949 y empleado en un principio para el
desarrollo de reactores militares. Podría decirse que fue el primer ordenador en
emplear dos procesadores de forma simultánea. El sistema se apoyaba sobre
una memoria de mercurio de 512 palabras, proporcionando una velocidad de
reloj de unos 4.25 MHz.
Los retardos por operación del BINAC eran de 800 µs para las sumas/restas y
de 1200 µs para las multiplicaciones.
5
Ilustración 3: BINAC
Hacia finales de la década de 1970 los supercomputadores comienzan a crear
mercado. Las instituciones científicas y gubernamentales empiezan a tomarse
en serio la capacidad de computación que ofrecen estas nuevas máquinas y
comienzan a buscar nuevas aplicaciones, en las que podrían aprovecharse sus
enormes capacidades de cálculo.
Se observa como en esta década esas aplicaciones empiezan a alejarse
tímidamente de lo puramente militar y empiezan a ubicarse en nuevas
disciplinas, como bien podrían ser las ciencias naturales, la física y las
matemáticas.
Es en esta época cuando aparecen dos grandes fabricantes que dominan el
mercado y marcarán un hito en la historia de los supercomputadores durante
los próximos 40 años, concretamente se trata de IBM y de Sperry Rand,
saliendo ambas al mercado en los años 70.
Algunos ejemplos de los primeros supercomputadores que fabricaron estas
marcas podrían ser el UNIVAC I de Sperry Rand y el IBM 7080 Stretch. El
primero salió al mercado en 1951 y el segundo lo haría 10 años después, en
1961. Estos dos supercomputadores podrían calificarse como los primeros
supercomputadores comerciales de la historia, pues estaban preparados para
ser empleados en diversas aplicaciones y ya no únicamente en desempeñar
tareas específicas, como ocurría con sus predecesores.
6
Ilustración 4: UNIVAC I
Ilustración 5: IBM 7080 Stretch
COMPUTACIÓN ESCALAR Y VECTORIAL
Antes de empezar a comentar las diferencias principales entre un procesador
escalar y uno vectorial, vendría bien realizar un repaso a lo que se conoce
como Arquitectura de Von Neumann.
7
La Arquitectura de Von Neumann es una familia de arquitecturas de
computadores que utilizan el mismo dispositivo de almacenamiento tanto para
las instrucciones como para los datos. La mayoría de los computadores
modernos están basados en esta arquitectura, aunque pueden incluir otros
dispositivos adicionales.
Los computadores basados en esta arquitectura constan de cinco partes :
La
unidad aritmético-lógica o ALU, la unidad de control, la memoria, un dispositivo
de entrada/salida y el bus de datos que proporciona un medio de transporte de
los datos entre las distintas partes.
Una vez realizado este repaso, comenzaremos introduciendo el procesador
escalar, el cual se basa en la Arquitectura de Von Neumann que acabamos de
describir.
Los procesadores escalares son el tipo más sencillo de procesadores. Cada
instrucción de un procesador escalar opera sobre un solo dato a la vez,
empleándose para los diseños basados en el mismo un esquema de aritmética
modular.
A diferencia de procesador escalar, un procesador vectorial es capaz de
ejecutar una instrucción que opere de forma simultánea sobre un conjunto de
datos, al cual se denomina vector. Es evidente que las prestaciones de este
tipo de procesador se verán notablemente incrementadas con respecto a las
presentadas por un procesador escalar, pues va a ser capaz de manejar de
forma simultánea una mayor cantidad de información. Por contrapartida, será
necesario modificar su repertorio de instrucciones para dar cabida a
instrucciones de tipo vectorial que operen con este tipo de datos múltiples. El
esquema de diseño empleado en este caso será el de la aritmética vectorial.
Ilustración 6: Placa de Procesadores Vectoriales (Cray Y-MP)
8
A modo de ejemplo, vamos a efectuar una breve comparación entre las
prestaciones que nos ofrece un procesador escalar y uno vectorial sobre un
mismo programa. Para ello recurriremos a algo tan simple y a la vez tan
importante en la computación como podría ser la multiplicación de dos
matrices.
Si tenemos dos matrices A y B definidas de la forma:
𝐴𝐴 = (𝑎𝑎𝑖𝑖𝑖𝑖 )𝑚𝑚 ×𝑛𝑛
𝐵𝐵 = (𝑏𝑏𝑖𝑖𝑖𝑖 )𝑛𝑛×𝑝𝑝
Sabemos que podemos definir su producto por medio de la siguiente ecuación:
𝑛𝑛
𝐶𝐶𝑖𝑖𝑖𝑖 = � 𝑎𝑎𝑖𝑖𝑖𝑖 ∙ 𝑏𝑏𝑟𝑟𝑟𝑟
𝑟𝑟=1
Por tanto, implementando la ecuación anterior en forma de pseudocódigo en un
procesador escalar, tendríamos algo como lo siguiente:
DO I=1,N
DO R=1,N
DO J=1,N
C(I,J)=C(I,J)+A(I,R)*B(R,J)
ENDDO
ENDDO
ENDDO
Una vez compilado, tendríamos un código en ensamblador escalar como el que
podemos ver a continuación:
...
loadf f2,(r2)
%Hacemos un Load de A(I,R)
addi R1,R1,#N
%Inicializamos un bucle de N iteraciones
loop:
loadf f3,(r3)
%Hacemos un Load de B(R,J)
mypf f3,f2,f3
%A(I,R)*B(R,J)
loadf f1,(r4)
%Hacemos un Load de C(I,J)
addf f1,f1,f3
%Actualizamos C(I,J)
storef f1,(r4) %Hacemos un Store de C(I,J)
addi r4,r4,#4
%Inc. para C(I,J+1)
9
addi r3,r4,#4
%Inc. para B(R,J+1)
addi r1,r1,#1
%Decrementamos el contador del bucle
bnz r1,loop
%Comprobamos si el contador es cero
...
Se puede apreciar como para cada iteración del bucle es necesario ejecutar 9
instrucciones, por tanto en total sería necesario ejecutar 9*N instrucciones para
completar la multiplicación de dos matrices.
A continuación vamos a plantear este mismo problema en un procesador
vectorial, para ello generaremos un nuevo código fuente y un nuevo código en
ensamblador teniendo en cuenta el repertorio de instrucciones vectoriales:
DO I=1,N
DO R=1,N
C(I,1:N)=C(I,1:N)+A(I,R)*B(R,1:N)
ENDDO
ENDDO
El código compilado en ensamblador vectorial quedará de la siguiente forma:
setvl r1,#N
loadf f2,(r2)
%Load A(I,R)
loadv v3,(r3)
%Load B(R,1:N)
mpyvs v3,f2,v3
%A(I,R)*B(R,1:N)
loadv v4,(r4)
%Load C(I,1:N)
addvv v4,v4,v3
%Actualizar C(I,1:N)
storev v4,(r4)
%Store C(I,1:N)
En este caso la cantidad de instrucciones necesarias para realizar la
multiplicación de dos matrices se ve reducida a únicamente 7 instrucciones,
con lo cual el aumento de prestaciones que proporciona un procesador
vectorial para este tipo de operaciones es más que evidente.
En la próxima sección comprobaremos como el descubrimiento de este tipo de
procesadores contribuyó enormemente al desarrollo de la supercomputación
entre los años 1970 y 2000, marcando el comienzo de una nueva era que
abriría finalmente el mercado de la supercomputación a todo el mundo.
10
LA ERA VECTORIAL (1970 – 2000)
Es en este periodo cuando podríamos decir que comienza la supercomputación
moderna, aumentando las prestaciones de manera considerable y en la
mayoría de los casos en más de un orden de magnitud, entre un modelo y su
sucesor.
En estos primeros años de la supercomputación moderna se forjan dos
fabricantes que dominarán el mercado en los años venideros, CDC y Cray
Research.
En un primer instante CDC realizó su primer movimiento apostando por su
equipo presentado en 1966, el CDC 6600. Muchos consideran este equipo un
tipo de supercomputador pre-vectorial, pues muchas de las funciones de este
tipo de procesadores no se habían implementado todavía en este modelo.
Ilustración 7: CDC 6600
Podría decirse que este fue el primer computador en emplear lo que hoy en día
conocemos como sistema RISC, pues el CDC 6600 utilizaba un repertorio
relativamente reducido de instrucciones con respecto a lo que se usaba en
aquella época. Para ello apoyaba su funcionamiento en 10 procesadores
periféricos que asistían al procesador principal en ciertas tareas que no
requerían de un elevado nivel computacional.
11
En 1976 Cray Research presentó lo que ya sería la revolución de la
supercomputación moderna, el Cray 1. Este supercomputador está
considerado como uno de los mejor diseñados y más eficientes de la historia.
El éxito cosechado por Cray Research gracias al Cray 1 le garantizaría su
permanencia en la cresta de la ola de la supercomputación hasta nuestros
tiempos, más adelante comprobaremos como efectivamente Cray Research
sigue fabricando algunos de los ordenadores más potentes a día de hoy
(2009).
Ilustración 8: Cray 1
La compañía Cray Research se creó a partir de una serie de ingenieros que
anteriormente formaban parte de la plantilla de CDC, entre ellos se encontraba
Seymour Cray, fundador de Cray Research.
CDC se encontraba por aquel entones inmersa en el diseño de su nuevo
supercomputador, el CDC 8600. Sin embargo, este había llegado a unos
niveles de complejidad tan elevados que cualquier aportación adicional a su
diseño se hacía prácticamente inabordable, llegando a dejar completamente
inoperativo el sistema con el fallo de un único componente. Seymour Cray
12
propuso a la compañía CDC el volver a rediseñar desde un principio el CDC
8600 con el fin de simplificar su diseño y dotarle de una mayor robustez y
tolerancia a fallos, sin embargo, CDC atravesaba uno de sus momentos más
difíciles en su economía, con lo cual el mero hecho de volver a diseñar
prácticamente de cero el CDC 8600 era algo económicamente imposible de
realizar. Seymour Cray abandonó CDC después de lo ocurrido y comenzó a
diseñar el Cray 1 con un grupo de ingenieros, algunos de ellos compañeros
suyos de CDC, creando para ello la compañía Cray Research en la parcela
justo al lado de la sede de CDC.
El Cray 1 fue algo verdaderamente revolucionario para su época, pues
presentaba una frecuencia de reloj, hasta aquel entonces inimaginable, de
80MHz. Este supercomputador fue el primero de su época en utilizar placas
lógicas compuestas íntegramente por circuitos integrados y también uno de los
primeros en implementar de forma completa el concepto de procesamiento
vectorial. El primer Cray – 1 se vendió por casi 9 millones de dólares al National
Center for Atmospheric Research (NCAR).
Hacia el final de los años 80, se empieza a plantear la posibilidad de aumentar
la capacidad de procesado de los supercomputadores vectoriales aumentando
la cantidad de procesadores por supercomputador, dando por tanto lugar a una
nueva categoría de los mismos, la cual pasaría a llamarse PVP (Parallel Vector
Processor). Nuevamente Cray fue una de las grandes impulsoras de esta
tecnología, la cual implementaría en toda una nueva generación de
supercomputadores fabricados entre los años 1982 y 1987, algunos ejemplos
de los mismos podrían ser el Cray X-MP (4 procesadores), Cray Y-MP (8
procesadores), Cray C90 (16 procesadores) y el Cray T94 (32 procesadores).
Ilustración 9: Cray X-MP
13
Ilustración 10: Cray T94
En esa misma época comienzan a aparecer los competidores japoneses en el
campo de la supercomputación, algunas de las compañías que entran en este
mercado cada vez más fructífero son Fujitsu, Hitachi y NEC.
A pesar del éxito rotundo que tuvieron los supercomputadores vectoriales en
estos años, estaba a punto de ocurrir un nuevo acontecimiento que daría un
nuevo y rotundo giro a la trayectoria de la supercomputación, en la siguiente
sección estudiaremos el origen y las consecuencias del mismo.
SUPERCOMPUTADORES BASADOS EN SMPs
En 1971 Intel introduce el primer microprocesador integrado dentro de un único
chip, el i4004. Este procesador basado en una CPU de 4 bits fue el primero
disponible comercialmente, marcando por tanto de forma profunda el futuro de
los computadores en todos sus aspectos.
A principios de los años 80 la aparición de la tecnología CMOS permitía el uso
de microprocesadores construidos en masa, de muy bajo coste, aunque de
relativamente bajas prestaciones. Este acontecimiento popularizó su presencia
en el mercado de los computadores, siendo económicamente inviable el hecho
de diseñar nuevos procesadores para propósitos específicos. La revolución
generada por este tipo de procesadores se conoció popularmente como The
Attack of the Killer Micros.
Debido al bajo coste de este tipo de procesadores se empezó a forjar una
nueva arquitectura para los nuevos supercomputadores, la cual se basaba en
14
el uso de multitud de estos procesadores escalares trabajando de forma
paralela, esta arquitectura pasaría a conocerse como SMP (Symmetric
MultiProcessor).
En un principio se usaban unos pocos microprocesadores idénticos que
compartían una misma memoria central, con lo cual la principal complejidad del
diseño se basaba en los algoritmos de gestión y planificación del acceso a esa
memoria compartida por todos los procesadores. Los procesadores CISC
fueron los primeros en ser utilizados para este tipo de arquitectura, sin embargo
serían desbancados en los años 90 por los procesadores RISC, los cuales eran
proporcionados por fabricantes que hoy en día siguen siendo punteros en el
desarrollo de nuevas tecnologías aplicadas a este campo, algunos de esos
fabricantes son Sun, SGI, HP e IBM.
A medida que aumentaba el número de microprocesadores que se usaba en un
diseño de estas características comenzaba a aparecer un nuevo desafío a
tener en cuenta, la mejora de las redes de interconexión entre los
microprocesadores, conocidas como buses. Esta mejora debería ser prioritaria,
pues el intercambio de datos entre los diferentes microprocesadores deberá
llevarse a cabo en los tiempos requeridos, evitando para ello retardos
innecesarios a lo largo de la topología del sistema.
Dos técnicas que contribuyeron sin duda alguna a la mejora de los sistemas
SMP fueron el acceso a memoria no uniforme (NUMA), el cual se encargaba de
distribuir los módulos de memoria entre los procesadores y posteriormente el
MPP (Massively Parallel Processor) que elimina finalmente la compartición
física de memoria.
CLUSTERS
Un nuevo paso en la supercomputación fue el comienzo del uso de
componentes estándar como piezas de diseño de un supercomputador. Esto
conlleva una importante reducción en los costes de fabricación, pues
anteriormente los supercomputadores basaban la mayor parte de sus
componentes en ASICs diseñados específicamente para determinados
propósitos.
Debido a esta nueva tendencia, los MPPs acaban derivando en lo que
comenzaría a conocerse como Clusters, que básicamente viene a significar
una serie de procesadores o computadores estándar interconectados entre sí
de forma que conjuntamente puedan proporcionar un rendimiento
computacional bastante elevado.
15
A partir del año 2000 Intel comienza nuevamente a despuntar con sus
procesadores, dominando el mercado en estos años con algunos de sus
modelos más populares como podrían ser el Itanium 2 o el Xeon.
Sin embargo, algunos de los supercomputadores más potentes seguirán
requiriendo que ciertos componentes sean ASICs, con el fin de satisfacer sus
necesidades específicas. Este requerimiento no obstante se verá
complementado con numerosos componentes estándar, los cuales ayudarán a
reducir la relación rendimiento/coste, que estaba llegando a alcanzar unos
niveles prohibitivos en la anterior generación de supercomputadores.
LA ACTUALIDAD
A continuación realizaremos una pequeña comparación entre los
supercomputadores más potentes a día de hoy, entre ellos incluiremos también
el supercomputador español MareNostrum, que en 2005 llegó a ser el
supercomputador más potente de Europa.
MareNostrum
El MareNostrum se puso en marcha el 12 de abril de 2005 presentado por la
empresa IBM. Desde entonces se utiliza en la investigación del genoma
humano, la estructura de proteínas y en el diseño de nuevos medicamentos,
entre otros. Su uso está disponible para la comunidad científica nacional e
internacional, controlada por un comité de asignación que asigna tiempo de
cómputo en función de la valía de los proyectos a realizar.
Ilustración 11: IBM MareNostrum
16
MareNostrum utiliza nodos BladeCenter JS21 con procesadores duales IBM
PowerPC 970Fx de 64 bits a una velocidad de reloj de 2.2GHz. El
supercomputador cuenta con una capacidad de cálculo de 62,63 teraflops con
picos de 94,208 teraflops. El sistema cuenta además con 20 terabytes de
memoria central y 280 terabytes de disco. Los nodos del ordenador se
comunican entre sí a través de una red Myrinet de baja latencia.
El ordenador está físicamente instalado en el interior de una antigua capilla. Se
encuentra en el interior de un cubo de cristal construido con más de 19
toneladas de cristal y 26 de hierro. El supercomputador ocupa una instalación
de 180 metros cuadrados y pesa 40 toneladas.
En el año 2005 fue catalogado como el supercomputador más potente de
Europa según el TOP500. Actualmente ocupa la posición 32 en la lista de
supercomputadores más potentes.
Pleiades
Se trata de un supercomputador fabricado por SGI y que actualmente se
encuentra situadio en el Ames Research Center de la NASA. Todavía sigue en
fase de construcción, pero las pruebas que ya se le han realizado lo catalogan
como el tercer ordenador más potente del mundo hoy en día.
Ilustración 12: SGI Pleiades
17
El Pleiades presenta picos de 600 teraflops, sin embargo, después de ciertas
modificaciones se han llegado a alcanzar picos de hasta 1.000 teraflops, o lo
que es lo mismo de 1 petaflop. Se estima que hacia el año 2012 el Pleiades
sea capaz de llegar a los 10 petaflops.
Jaguar
Este supercomputador está construido por la legendaria empresa Cray, que ya
introdujimos en los anteriores apartados. Se encuentra actualmente instalado
en el Oak Ridge National Laborary en Estados Unidos y está basado en el
modelo XT5 de Cray.
Ilustración 13: Cray Jaguar (XT5)
El Jaguar cuenta hoy en día con aproximadamente 180.000 núcleos de
procesado basados en el procesador de propósito general AMD x86_64
Opeteron Quad a 2.3 Ghz. Alcanzando unos niveles computacionales de 1.4
petaflops. Actualmente el Jaguar ocupa el segundo puesto en la lista de
supercomputadores más potentes del mundo.
Roadrunner
Este supercomputador ha sido diseñado conjuntamente por IBM y el personal
del laboratorio Nacional Los Álamos, en Nuevo Méjico. Y es actualmente el
supercomputador más rápido del mundo, alcanzando los 1.7 petaflops.
Está equipado con más de 12.000 procesadores tipo PowerXCell 81
mejorados, diseñados originalmente para la videoconsola Sony PlayStation3,
18
colocados en paralelo y 6.912 procesadores Opteron de AMD. En total ocupa
aproximadamente unos 1.100 metros cuadrados.
Ilustración 14: IBM Roadrunner
El coste aproximado del IBM Roadrunner es de unos 133 millones de dólares y
se trata de un diseño de supercomputador completamente revolucionario,
construido a partir de componentes comunes que podrían encontrarse en
muchos computadores domésticos de hoy en día, pero integrando a la vez
unos diseños de interconexión y de gestión altamente innovadores, dotándole
por tanto de su hasta ahora insuperable capacidad computacional.
Finalmente cabría comentar que los tres supercomputadores expuestos
anteriormente utilizan el mismo sistema operativo, el Linux Enterprise Server en
sus variantes Red Hat y Open SuSE.
CONCLUSIONES
Después de haber realizado este pequeño paseo por la historia de los
supercomputadores desde sus inicios hasta la actualidad, queda patente la
importantísima labor que desarrollan para la humanidad, pues gracias a ellos el
ser humano es capaz hoy en día de contar con unas capacidades de cálculo
verdaderamente inimaginables hace varias décadas. Son muchas las ramas de
la ciencia que han perdurado y podido avanzar gracias a ellos, aunque muchas
veces el uso que se las ha dado no haya sido tan humanamente enriquecedor.
19
BIBLIOGRAFÍA
http://www.wikipedia.com
http://www.intel.com
http://www.cray.com
http://www.amd.com
http://www.ibm.com
http://www.top500.org
20
Descargar