Linux Adictos Isaac  

Supercomputadoras: todo sobre estas desconocidas máquinas

Creo que en la actualidad no se puede hablar de supercomputación sin relacionarlo con Linux, y es que, a pesar de que Linux fue concebido en un inicio para ser el sector de las computadoras personales, se puede decir que ha dominado todos los sectores excepto ese como veremos más adelante con algunas interesantes estadísticas. Además, es un sector en el que tampoco existe mucha información publicada en español que sea accesible para todos.

En cambio, he podido comprobar que el mundo de las supercomputadoras o la supercomputación interesa, pero en general es bastante desconocido para muchos de los usuarios. Es por eso que he reunido tiempo para crear y publicar este mega post sobre supercomputadoras que espero que os enseñe todos los secretos de este “misterioso” mucho, y que cuando terminéis de leer todo este texto ya no tenga secretos para vosotros…

Más que un artículo o mega post, será una especie de Wiki teorico-práctica sobre supercomputación que podrás consultar en cualquier momento. Ese es el objetivo, que este artículo de LxA sea un punto de inflexión, un antes y un después. ¿Lo conseguiré? Vamos a comprobarlo…

Introducción a la supercomputación

Para dejarlo claro desde el principio, los ordenadores que tenemos en nuestras casas son de los más potentes que existen. Lo que quiero decir con esto es que no existe un microprocesador mucho más potentes que los que usamos a diario. La clave de las supercomputadoras no está en microprocesadores ultrapotentes o componentes muy exóticos y diferentes a los que usamos a diario en nuestros hogares, la clave de la supercomputación es el paralelismo.

Me explico, los bancos de memoria RAM, los discos duros, los microprocesadores, placas base, etc. de un supecomputador probablemente se parezcan más de lo que te imaginas a los que tú estás usando en estos momentos o tienes en tu casa. Solo que en el caso de las supercomputadoras se agrupan en cientos o miles para sumar la potencia de todas y cada una de esas “computadoras” independientes y así componer una gran máquina que funciona como un solo sistema.

Hablo de la computación paralela, sí. Un paradigma que permite crear supecomputadoras o lo que conocemos como HPC (High-Performance Computing) o computación de alto rendimiento. Lo que quiero decir es que si tú en casa tienes un AMD Ryzen 7, con 16 GB de RAM, una tarjeta de red, y un disco duro de 8 TB,… imagina qué pasaría si multiplicas esto por 1000 y lo hicieses funcionar como si solo fuesen un PC. Serían 1000 Ryzen funcionando en paralelo, 16 TB de RAM, y 8 PB de almacenamiento. Wow!! Esto ya empieza a parecerse más a una supercomputadora, ¿Verdad?

Disculpa si te parece una introducción muy simple y una definición algo chabacana, pero ha sido intencionadamente. Porque quiero que hasta el usuario con menos conocimientos y experiencia capte la idea de este paradigma, ya que de lo contrario no entenderá el resto de esta guía. Quiero que te quedes con esa idea, puesto que si captas eso, ya verás como esas grandes y extrañas máquinas que ocupan grandes superficies no te parecerán tan extrañas…

¿Qué son las supercomputadoras?

En el apartado anterior hemos introducido los términos paralelismo y HPC, bien. Para conseguir crear una supercomputadora, es decir, un ordenador con esas capacidades HPC se necesita el paralelismo como hemos dejado claro. Por definición, las supercomputadoras son aquellas máquinas cuyas capacidades de algún tipo son muy superiores a la de una computadora común que podamos tener en casa.

Por lo general, casi todas las capacidades de una supercomputadora son muy superiores a un PC, pero especialmente pueden llamarlos la atención la potencia de cálculo que se debe a los núcleos o unidades de procesamiento, la memoria RAM de la que disponen dichas unidades de procesamiento, y en menor medida la capacidad de almacenamiento, ya que por lo general son más importantes las dos primeras para las aplicaciones normales que se dan a este tipo de máquinas. Aunque bien es cierto que puede haber algunas grandes máquinas en las que se necesite mucho más almacenamiento y ancho de banda que potencia de cálculo o RAM, es el caso de los servidores de almacenamiento…

Historia de las supercomputadoras:

Quizás una de las primeras supercomputadoras, o que los historiadores la catalogan así fue la máquina construida en la década de los 60 por Sperry Rand para la Marina de Estados Unidos. Luego vendría una época en la que IBM era el gran rey con máquinas como las IBM 7030, y otras muchas. También la Atlas de la Universidad de Manchester y Ferranti a principios de los 60 como competencia europea a las máquinas americanas. Máquinas que ya comenzaban a usar transistores de germanio como sustituto de las antiguas válvulas de vacío (no circuitos integrados) y memorias magnéticas para su composición, pero que aún eran muy primitivas.

Luego vendría otra era en la que entró otro grande, CDC, con la CDC 6600 diseñada por un viejo conocido que daría nombre tiempo después a una importante empresa que es a día de hoy líder en este sector. Hablo de Seymour Cary. La máquina que diseñó se terminó en 1964 y fue una de las primeras en usar transistores de silicio. La rapidez aportada por la nueva tecnología de silicio y la arquitectura diseñada por Cary hizo que la máquina fuera hasta 10 veces más rápida que la de la competencia, vendiendo 100  de ellas por 8.000.000 $ cada una.

Cray dejaría CDC (Control Data Corporation) en 1972 para formar la compañía líder que os he comentado, se trata de la Cary Research, creando el Cary-1 de 80 Mhz y uno de los primeros CPUs de 64-bit en 1976, convirtiendose en la supercomputadora más exitosa de la época y que podéis ver en la imagen principal de este apartado en la fotografía en blanco y negro. La Cary-2 (1985) seguiría el exitoso camino de la primera, con 8 CPUs, refrigeración líquida y marcando el camino de las modernas supercomputadoras en muchos sentidos. Aunque el rendimiento era de 1,9 GFLOPS.

Una cantidad que te puede parecer ahora casi irrisória, teniendo en cuenta que el smartphone que ahora tienes en tu bolsillo supera por estos supercomputadores de esta época. Por ejemplo, un SoC Snapdragon 835 o Exynox 8895 de Qualcomm o Samsung respectivamente, tiene una potencia de unos 13,4 GFLOPS, es decir, casi 10 veces más que el Cray-2 y unas 100 veces superior al Cary-1. Aquellas gigantescas máquinas no le llegan a la suela de los zapatos a un objeto tan pequeño y ligero como el que ahora tines en tus manos. Lo cual me gustaría pensar que dentro de unas décadas, podamos tener dispositivos tan potentes o más como las supercomputadoras actuales pero reducidos a tamaños caso minúsculos.

Siguiendo con la historia, tras ésta época vino la era de los diseños masivamente paralelos, es decir, ese abaratamiento de los cosches en la producción de chips y mejoras en las interconexiones hicieron posible que en vez de sofisticadas máquinas se pudiesen construir supercomputadoras uniendo cientos o miles de chips bastante similares a los que tenemos en el equipo de nuestra casa como he comentado anteriormente. De echo, en los 1970 hubo una máquina que usaba este nuevo diseño masivo y que superaba por mucho a los Cray-1 (250 MFLOPS), esa fue la ILLIAC IV, con 256 microprocesadores llegando al 1 GFLOPS, aunque tuvo algunos problemas de diseño y no se llegó a completar, solo se implementó un diseño con 64 microprocesadores.

Un supercomputador para gráficos LINKS-1 de la Universidad de Osaka sería otra de estas máquinas masivamente paralelas, con 257 microprocesadores Zilog Z8001 y 257 FPUs Intel iAPX 86/20, consiguiendo un buen rendimiento para la época y poder renderizar gráficos 3D realistas, con 1.7 GFLOPS. Y poco a poco vendrían máquinas más y más potentes, pasando de los centenares de microprocesadores a miles como las actuales…

En España tenemos una de las más potentes supercomputadoras de Europa y también una de las más potentes del mundo, creada por IBM y llamada Mareostrum, situada en Bacelona y que pertenece a la red de supercomputación española compuesta por varias de ella, como la Picasso de la Universidad de Málaga, que se nutre del material desechado en las actualizaciones que recibe de forma periódica la MareNostrum. De hecho, MareNostrum es una máquina que fascina al autor Dan Brown y que ha sido elegida como el centro de datos más bello (mezclando una arquitectura de un antiguo monasterio con la más alta tecnología), como podéis ver en la imagen principal de este artículo.

Rendimiento máximo 11.15 PFLOPS
Microprocesadores 165.888 Intel Xeon Platinum
Memoria RAM 390 TB
Red Omnipath
Diseñador IBM
Sistema Operativo SUSE Linux

Características de las supercomputadoras:

Aunque muchos autores separan (a mi parecer erróneamente) los servidores de los supercomputadores e incluso de los mainframes, según la definición que te hice de supercomputadora, se podrían englobar perfectamente los servidores como supercomputadoras, ya que no son más que computadoras con unas capacidades muy superiores a las computadoras normales, solo que están dedicadas a ofrecer algún tipo de servicio dentro de una red… Lo único que sí hay que diferenciar es que según para qué esté destinada la máquina, sí que tendremos unas capacidades que queremos por encima del resto u otra.

Por ejemplo, para un servidor destinado a datos, como un servicio Storage de la nube, lo que nos interesa es que tenga una capacidad de almacenamiento brutal. Mientras que para un mainframe destinado a procesar transacciones y operaciones bancarias, lo importante va a ser su potencia de cálculo. Pero insisto, tanto uno como otro son supercomputadoras. Dicho esto, vamos a ver algunas de las principales características que nos interesan de una supercomputadora / mainframe / servidor:

  • Seguridad: si es una supercomputadora que está aislada, es decir, desconectada de Internet, quizás se tengan que implementar medidas de seguridad perimetral, pero la seguridad como tal dentro del propio sistema no sea tan importante como un servidor que está conectado y al que se conectan muchos clientes o puede ser objetivo de ataques al estar conectado a Internet. Pero sea en un caso o en otro, siempre habrá medidas de seguridad.
  • Alta disponibilidad: un servidor o supercomputador debe funcionar correctamente y reducir al máximo los posibles problemas de hardware o software, ya que tenerlo parado puede resultar fatal para los propósitos para los que se ha construído y en el 100% de los casos, un equipo caído significará perdida de grandes cantidades de dinero. Por eso se toman medidas en los sistemas operativos para reducir los reinicios necesarios y robustos (UNIX/Linux), fuentes de suministro eléctrico alternativas (SAI) en caso de apagón, redundancia de sistemas por si falla uno que haya una réplica que no afecte demasiado al rendimiento general, técnicas de fencing para aislamiendo de un nodo para que no afecte a otros y pueda ser sustituido en caliente sin afectar al funcionamiento del resto, tolerancia a fallos con sistemas como RAID en los discos duros, memoria ECC, evitar escenarios Split-brain, tener un DRP (Disaster Recovery Plan) para actuar en caso de problemas, etc. Y además, queremos que la confiabilidad sea máxima, a l igual que la vida útil, y los siguientes parámetros sean siempre los menores o mayores dependiendo del que sea:
    • MTTF (Mean Time To Failure): es el tiempo medio para fallos, es decir, mide el tiempo medio que un sistema es capaz de trabajar sin interrupción hasta tener un fallo. Por tanto, mientras más elevado sea mejor.
    • MTBF (Mean Time Between Failure): es el tiempo medio entre fallos, es decir, también interesa que sea más elevado, ya que no queremos que los fallos sean muy consecutivos, o de lo contrario la confiabilidad del equipo será mala.
    • MTTR (Mean Time To Repair): tiempo medio para reparar, es decir, es la mantenibilidad. Queremos que sea más bajo, para que no esté el sistema inoperativo durante mucho tiempo.
  • Alto rendimiento y balanceo de carga: esto cobra especial importancia cuando se trata de un servicio en la nube que necesita ejecutar apps para sus clientes, en las supercomputadoras o mainframes destinados a cálculos matemáticos o simulaciones científicas, etc. Se consigue aumentando las cantidades de RAM y la cantidad y/o rendimiento de los microprocesadores. Además, hay que tener un buen balanceo de carga, que esto depende de la gestión de los procesos que hagamos, así no sobrecargaremos unos nodos más que otros, sino que equilibraremos la carga de trabajo sobre todo el supercomputador por igual o de la forma más homogénea posible.
  • Escalaridad: capacidad que tiene el software y hardware para adaptarse sin limitaciones a cambiar de configuración o tamaño. Este tipo de máquinas deben ser flexibles a la hora de ampliar la capacidad de cómpuo o capacidad de memoria, etc., si hiciese fálta sin necesidad de adquirir un nuevo supercomputador.
  • Coste: esto no solo depende del coste de la máquina en sí y del mantenimiento, que suele subir a varios millones con facilidad, sino que también depende del consumo de la máquina que por lo general se mide en MW (Megavatios) y del coste de los sistemas de refrigeración, que también es elevado por la cantidad de calor que generan. Por ejemplo, si ponemos como ejemplo el centro de datos de Facebook donde tiene el servidor donde se aloja su servicio, tenemos miles de millones de gasto, unas 1600 ingenieros trabajando en ello, eso sin contar técnicos y administradores dedicados, unas facturas de la luz que son estratosféricas (ten en cuenta que los centros de datos en la actualidad consumen el 2% de la energía eléctrica que se genera en todo el mundo, es decir, miles de millones de vatios y miles de millones de euros. De hecho, solo Google consume el 0,01% de la energía mundial, por eso suele instalar sus centros de datos en las zonas del mundo donde más barata está la energía eléctrica, porque eso le ahorra muchos millones), etc. Te puedes imaginar que no es barato mantener un equipo como este… y no es para menos, ya que el servidor monstruoso que Facebook tiene en Oregón está en una nave de unos 28.000 m2 por valor de cientos de millones de euros, una descomunal granja de servidores con miles de procesadores, discos duros como para sumar varios PB de almacenamiento, muchos bancos de memoria RAM, tarjetas de red a mansalva (calcula que hay 6 km de cableado de fibra óptica para entrelazarlas), y todo consumiendo 30 MW de electricidad y generadores diésel a modo de SAI para apagones, generando todo un calor que necesita un complejo sistema de disipación con el aire acondicionado a gran escala.

Y esto es todo en cuanto a las más importantes características, aunque puede haber aplicaciones concretas que necesiten cosas más específicas.

Tendencias actuales:

Desde los sistemas hechos casi a medida como los primeros de IBM, CDC o Cary, todo ha cambiado muy rápido con la llegada de los chips o circuitos integrados y su bajo coste, permitiendo el inicio de la nueva supercomputación masivamente paralela, con miles de elementos. No obstante, no te pienses que las actuales supercomputadoras son sistemas simples que solo necesitan juntar miles de dispositivos y ya está, son máquinas complejas que necesitan un diseño cuidadoso y una fabricación que mima cada detalle para poder sacar el máximo partido y que todo funcione de forma adecuada conforme a las capacidades o características que queremos conseguir.

Tras esas primeras máquinas compuestas por circuitos custom o chips custom diseñados casi de forma específica para la máquina, hemos pasado a usar sistemas mucho más estándar como los microprocesadores, como veremos en el siguiente apartado.

Microprocesadores específicos:

En un principio se usaban casi los mismos chips de procesamiento que tenían los equipos domésticos, pero en la actualidad, las grandes empresas como IBM, AMD e Intel, diseñan modelos específicos de sus microprocesadores para escritorio o para otros fines. Por ejemplo, todos conocemos los microprocesadores PowerPC de IBM, que han estado instalados en los Apple hasta hace unos años cuando adoptaron los chips de Intel. Estos mismos chips que se usaban en los Apple también han potenciado supercomputadoras. No obstante, IBM tiene varios diseños específicos para grandes máquinas que consiguen mejor rendimiento trabajando juntos, como es el caso de los POWER, aunque compartan ISA con los PowerPC.

Ocurre lo mismo con los SPARC, que aunque no tienen actualmente modelos específicos para el escritorio porque es un sector que no dominan ni les interesa demasiado, sí que en el pasado había estaciones de trabajo con estos mismos microprocesadores, aunque los actuales sean especialmetne diseñados para trabajar en estas grandes máquinas. Lo mismo podría decir de los chips de Intel y AMD, que microprocesadores específicos como los Intel Xeon que comparten la microarquitectura con los Core i3/i5/i7/i9 actuales y muchas de sus características (no es así con los Intel Itanium), solo que están optimizados para trabajar en modo MP. Lo mismo ocurre con AMD, que diseñó una implementación especial para supercomputadoras de sus K8 o Athlon64 llamada Opteron, y actualmente los EPYC (basados en Zen).

Aquí nuevamente me detengo y me gustaría definir los tipos de microprocesadores según ciertos parámetros:

  • Según su arquitectura: en función de la arquitectura de la propia CPU o microprocesador podemos encontrar:
    • Microprocesador: es una CPU o microprocesador normal, sea cual sea la microarquitectura o tecnologías que implemente.
    • Microcontrolador: se trata de una CPU normal (normalmente de bajo rendimiento) impelementada en el mismo chip junto con una RAM, un sitema E/S y un bus, es decir, una microcomputadora en un chip. Por lo general estos no se usan en supercomputadoras, pero sí están muy presentes en multitud de aparatos domésticos, industriales, placas como Arduino, etc. Pero para el tema de las supercomputadoras olvidalos…
    • DSP (Digital Signal Processor): también puedes pensar que estos procesadores de señal digital no cuadran con el tema de la supercomputación, pero verás como cobran sentido cuando veamos más adelaten la computación heterogénea. Pero ahora solo debes saber que son unos procesadores específicos para ser capaces de tener un buen rendimiento a la hora de procesar señales digitales, lo que lo hacen buenos para tarjetas de sonido, vídeo, etc. Pero esto podría tener algunas ventajas en ciertos cálculos como veremos…
    • SoC (System-on-a-Chip): es un sistema en un chip como su nombre indica, es decir, un chip en el que se ha incluido algo más que lo incluido en el microcontrolador. Además de una CPU (por lo general ARM), también se incluye una flash, memoria RAM, E/S, y algunos controladores. Pero en el caso de los SoCs, la CPU integrada suele ser de alto rendimiento y destinada a smartphones, tablets, etc., aunque ahora hay microservidores que están usando este tipo de chips como unidades de procesamiento como veremos.
    • Procesador vectorial: es un tipo de microporcesador SIMD, es decir, que ejecuta una instrucción con múltiples datos. Se puede decir que muchos microprocesadores modernos tienen características SIMD gracias a esas extensiones multimedia como MMX, SSE, etc., de las que hemos hablado. Pero cuando digo procesador vectorial me refiero a los puros, que han sido diseñados en base a procesar un vector o array de datos para cada instrucción. Ejemplos de este tipo de procesador son el Fujitsu FR-V, usado en algunas supercomputadoras japonesas, y también las GPUs podrían considerarse como tal.
    • ASICs: son circuitos integrados de aplicación específica por sus siglas en inglés, es decir, chips personalizados en función de su uso. Algo que puede dar un gran rendimiento para ciertas aplicaciones específicas, aunque su diseño supone un mayor coste que el uso de unidades de procesamiento genéricas. Además, si se usan FPGAs para implementarlos, no será lo más eficiente electrónicamente hablando. Por ejemplo, en la actualidad se usan mucho para construir máquinas de minería de criptomonedas.
    • Otros: existen otros que ahora mismo para este tema no nos interesan demasiado, como las APUs (CPU+GPU), los NPU, clockless microprocessor, C-RAM, barrel processor, etc.
  • Según sus núcleos o cores: hemos pasado de los monocore o CPUs de un solo núcleo a tener varios, pero dentro de los microprocesadores que tienen varios podemos diferenciar entre:
    • Multicore: son los tradicionales multinúcleo que usamos frecuentemente, como los dualcore, quadcore, octacore, etc. Suelen tener 2, 4, 8, 12, 16, 32,… cores o núcleos, en un mismo chip o en el mismo empaquetamiento pero diferentes chips.
    • Manycore: similar a lo anterior, pero suelen ser centenares o miles de nucleos, y para que eso sea posible, los cores integrados deben ser más simples y pequeños que los diseños de Intel y AMD, por poner un ejemplo, además de más eficientes energéticamente. Por eso se suelen basar en núcleos ARM, colocados en forma de tiles. Juntando muchos de estos se pueden alcanzar capacidades de cálculo muy elevadas. También Intel ha coqueteado con este tipo, con sus Xeon Phi, que son manycore x86 usando núcleos mucho más simples pero agrupados en grandes cantidades (57 a 72) para potenciar algunas supercomputadoras actuales.
  • Según su uso: en este caso, solo nos interesa un tipo, que es el MP o los sistemas multiprocesador. En tu equipo de sobremesa o portátil verás que tu placa base solo tiene un socket donde insertar un microprocesador, en cambio, las placas base de los servidores tienen 2, 4,… sockets en cada una de ellas, a esto me refiero con MP.

Pero los microprocesadores poco a poco están siendo desplazados a favor de otras unidades de procesamiento más específicas con las que se consiguen mejores capacidades de cómputo, es decir, una mejor eficiencia entre los FLOPS por W conseguido como vamos a ver en el siguiente apartado.

Otros métodos de procesamiento:

Como he dicho, los microprocesadores se han ido desplazando poco a poco, aunque aún tienen una gran cuota de mercado, pero hay otras unidades de procesamiento que están entrando con fueza últimamente, como las GPGPU o GPUs de propósito general. Y es que los chips de las tarjetas gráficas suelen ser de tipo SIMD o vectoriales, lo que puede aplicar una misma instrucción a multitud de datos de forma simultánea, con el incremento de rendimiento que eso conlleva.

Y lo mejor de todo es que, modificando el controlador y mediante programación, sin modificar el hardware, se puede conseguir usar estas GPUs para el procesamiento de datos como si de una CPU se tratase, es decir, para el procesamiento general y no solo para gráficos como hacen las GPUs dedicadas, permitiendo aprovechar su enorme potencial de cálculo, ya que la cantidad de FLOPS conseguida por una tarjeta gráfica es muy superior a la de una CPU.

El motivo por el cual alcanzan ese tremendo rendimiento de cálculo es porque están hechas para trabajar con gráficos, y eso necesita de gran cantidad de cálculo matemático para moverlos. Ademñas de ser SIMD como he dicho, suelen seguir un paradigma de programación paralela tipo SIMT (Single-Instruction – Multiple-Threads), consiguiendo buenas tasas de rendimiento incluso cuando la latencia de la memoria es alta.

Ten en cuenta que para generar un gráfico 3D, se necesita un modelado que comienza por combinar una serie de triángulos con coordenadas W, X, Y y Z sobre el plano, para luego aplicar color (R, G, B, A) y crear las superficies, dar iluminación, texturizar las superficies, mezclado etc. Esas coordenadas de datos y de colores significa que contienen procesadores configurables para procesarlos, y se entiende que estas coordenadas las que precisamente forman los vectores con los que trabajan las unidades de procesamiento de la GPU y son las que se aprovechan para hacer los cálculos de propósito general. Ejemplo, mientras que una CPU debe ejecutar 4 instrucciones de suma para sumar X1X2X3X4 + Y1Y2Y3Y4, es decir, X1+Y1, luego X2+Y2, y así sucesivamente, una GPU podría hacerlo en una sola vez.

Gracias a eso, tenemos GPUs que trabajan a muy bajas frecuencias de reloj, hasta 5 o 6 veces menor que las CPUs y consiguen una tasa de FLOPS muy superior, lo que significa un ratio FLOPS/W mayor. Por poner un ejemplo, un Intel Core i7 3960X alcanza los 141 GFLOPS de rendimiento de cálculo, mientras que una AMD Radeon R9 290X puede conseguir 5.632 GFLOPS, lo que tiene un coste aproximado de cada GFLOP de unos 0,08€, mientras que en 2004 se lanzó una supercomputadora nipona llamada Earth Simulator de NEC con procesadores vectoriales y un rendimiento total de 41.000 TFLOPS cuyo coste por cada GFLOPS supuso unos 10.000€, ya que estaba constituída por miles de procesadores con 8 GFLOPS cada uno.

Como ves aquí es donde radica el interés por crear supercomputadoras actuales basadas en GPUs de NVIDIA o AMD en vez de usar CPUs. Y también comienza a tener importancia la computación heterogénea, es decir, combinar varios tipos de unidades de procesamiento y encargar cada operación a la unidad que la procese en menor tiempo o de forma más eficiente. Esto choca con el paradigma de la computación homogénea, donde la CPU se encarga de la lógica, la GPU de los gráficos, DSP de señales digitales, etc.

En cambio, por qué no usarlos todos como propone la computación heterogénea para optimizar el rendimiento. Cada uno de esos chips son buenos en algo, tienen sus ventajas e inconvenientes, por tanto dejemos que cada uno haga lo que mejor se le da…

Paralelismo:

Y aunque no me gustaría ser rendundante, al menos no tanto como las unidades de las supercomputadoras, sí que me gustaría volver al término del paralelismo y explicar un poco más. Y es que, casi desde los los inicios de la computación, se ha venido potenciando el paralelismo en uno u otro sentido:

  • Paralelismo a nivel de bits: todos hemos visto cómo los microprocesadores han ido evolucionando desde los 4-bit, 8-bit, 16-bit, 32-bit y los actuales de 64-bit (aunque con algunas extensiones multimedia que llegan a los 128, 256, 512, etc). Eso significa que una sola instrucción puede operar más datos o datos mucho más largos.
  • Paralelismo a nivel de datos: cuando en vez de dtos escalares usamos vectores o matrices de datos sobre las que operan las instrucciones. Por ejemplo, una escalar sería X+Y, mientras que un DLP corresponde a X3X3X1X0 + Y3Y2Y1Y0. Esto es concretamente lo que hacen esas extensiones en los set de instrucciones que he citado en el paralelismo a nivel de bits.
  • Paralelismo a nivel de instrucciones: técnicas que pretenden procesar más de una instrucción por ciclo de reloj. Es decir, conseguir un CPI < 1. Y aquí podemos citar la pipeline, arquitecturas superescalares, y otras tecnologías como los principales métodos para conseguirlo.
  • Paralelismo a nivel de tareas: me refiero al multithreading o multi hilo, es decir, conseguir que varias hebras o tareas propuestas por el planificador del kernel del sistema operativo se puedan llevar a cabo de forma simultánea. Por tanto, el software en este caso permitirá que cada proceso se pueda dividir en tareas más sencillas que puedan llevarse a cabo en paralelo. Si en Linux haces uso del comando ps con la opción -L, te aparecerá una columna con el ID del LWP (Lightweight Proccess), es decir, un proceso ligero o hebra (thread). Aunque las formas de llegar a este paralelismo son varias:
    • CMP (Chip MultiProcessor): es decir, usar varios núcleos y que cada uno procese una hebra.
    • Multithreading: que cada CPU o núcleo pueda procesar más de una hebra a la vez.  Y dentro del multihilo, también podemos distinguir entre varias metodologías:
      • Multihilo temporal o superthreading: es lo que usan algunos microprocesadores como los UltraSPARC T2, que lo que se hace es que se alterna entre el procesamiento de uno y otro hilo, pero realmente no están ambos a la vez procesándose de forma paralela.
      • Multihilo simultáneo o SMT (Simultaneous MultiThreading): en este caso sí que se procesan en paralelo, permitiendo a los recursos de la CPU planificar de forma dinámica y tener una emisión múltiple para que sea posible. Esto es lo que usa AMD o Intel, aunque Intel ha registrado una marca que es HyperThreading no es más que un SMT. No obstante, antes de adoptar SMT en los AMD Zen, AMD usaba CMT (Clustered MultiThreading) en sus Fusion, es decir, un multithreading basado en núcleos físicos y no en núcleos lógicos. Dicho de otro modo, en el SMT cada core o CPU actúa como si fuesen varios núcleos lógicos para poder llevar estas tareas en paralelo, en cambio en el CMT se usan varios núcleos físicos para poer realizar este multithreading…
  • Paralelismo a nivel de memoria: no hace referencia a la cantidad de memoria instalada en el sistema, por tanto es un termino confuso. Se refiere a la cantidad de accesos pendientes que se pueden hacer de forma simultáneamente. La mayoría de los superescalares tienen este tipo de paralelismo, conseguido gracias a la implementación de varias unidades prefetch que satisfacen varias peticiónes de fallas de cache, TLB, etc.

Independientemente de estos niveles de paralelismo, se pueden combinar con otros tipos de arquitecturas para conseguir un mayor paralelismo, como:

  • Superescalar y VLIW: dicho de un modo sencillo, son aquellas unidades de procesamiento (CPUs o GPUs) que tiene varias unidades funcionales replicadas, como por ejemplo, varias FPUs, varias ALUs, varias Branch Units, etc. Eso quiere decir, que las operaciones que realicen este tipo de unidades se pueden hacer de dos en dos o de tres en tres, etc., dependiendo de la cantidad de unidades disponibles. Por ejempo, si para ejecutar un proceso o programa se necesita procesar las instrucciones Y = X +1, Z = 3 + 2 y W = T + Q, en un escalar deberías esperar a que termine la primera operación para introducir la segunda, en cambio si dispones de 3 ALUs, se pueden hacer simultáneamente… *VLIW: en el caso de VLIW, lo que suele haber es réplica de algunas unidades, y el compilador ajusta las instrucciones para adecuarlas a todo el ancho de la CPU y que en cada ciclo todas o casi todas las unidades estén ocupadas. Es decir, VLIW es una instrucción larga que se compone de varias instrucciones más simples empaquetadas de una forma concreta para amoldarse a la arquitectura de hardware. Como comprenderás esto tiene sus ventajas y desventajas que no voy a explicar aquí…
  • Pipeline: la canalización o segmentación se consigue mediante la introducción de registros que partan la circuitería, separando en etapas cada unidad funcional. Por ejempo, imagina que tienes una pipeline de profundidad 3, en ese caso las unidades funcionales se dividen en tres partes independientes, como si fuese un proceso de fabricación en cadena. Por tanto, una vez la primera instrucción introducida ha desocupado la primera etapa, ya puede estar entrando otra en esta primera etapa, acelerando la ejecución. En cambio, en un sistema sin pipeline, no se podría instroducir la siguiente instrucción hasta que la primera haya terminado por completo.
  • Ejecición fuera de orden: en una arquitectura en orden, las instrucciones son ejecutadas de forma secuencial con forme el compilador las ha generado para constituir el programa en ejecución. En cambio, esto no es lo más eficiente, ya que puede que algunas puedan demorarse más o se tengan que introducir burbujas o tiempos muertos en la CPU mientras se espera que ese evento que está bloqueando el resultado de la instrucción suceda. En cambio, en la fuera de orden se va a estar alimentando de forma constante a la CPU con instrucciones, sin importar el orden, aumentando el tiempo productivo. Esto se consigue mediante unos algoritmos en los que no voy a entrar.

Por lo general, la mayoría de CPUs actuales, Intel, AMD, IBM POWER, SPARC, ARM, etc., usan una mezcla de todos los niveles de paralelismo, pipeline, superescalar, ejecución fuera de orden, renombre de registros, etc., para conseguir mucho más rendimiento. Si quieres saber más, puedes consultar la taxonomía de Flynn, que diferencia a los sistemas:

  • SISD: unidad de procesamiento que solo puede procesar una sola instrucción con un solo dato. Es decir, ejecuta las instrucciones y datos de forma secuencial, uno a uno.
  • SIMD: una sola instrucción y múltiples datos, en este caso el paralelismo solo está en el data-path y no en el control-path. Las unidades de procesamiento presentes podrán ejecutar una misma instrucción sobre varios datos a la vez. Es el caso de los procesadores vectoriales, GPUs y algunas extensiones multimedia que han logrado esto dentro de los microprocesadores (p.e.: SSE, XOP, AVX, MMX,…).
  • MISD: en este caso el paralelismo es a nivel de instrucción, permitiendo que multiples instrucciones se ejecuten sobre un solo flujo de datos. Imagina que tienes X e Y y puedas operar X+Y, X-Y, X · Y y X / Y de forma simultánea.
  • MIMD: es el más paralelo de todos, ya que puede ejecutar varias instrucciones sobre varios datos a la vez…

Y creo que con esto los principios de paralelismo quedan bastante claros. Si quieres profundizar más, puedes acceder a las fuentes que dejé en la zona final de este artículo y en las que he trabajado durante los últimos 17 años de mi vida.

Sistemas de memoria:

Sea cual sea el método de procesamiento o unidad de procesamiento usada, se necesita una memoria. Pero aquí nos metemos en temas algo más escabrosos, ya que con el paralelismo, los sistemas de memoria deben ser coherentes y tener una serie de características para no generar datos erróneos. Tranquilo, te lo explico de una forma muy sencilla con un ejemplo.

Imagina que tienes una sola CPU realizando una instrucción de suma, imagina que ésta sea Z = Y + X, en ese caso no habría problema, puesto que la CPU traería la instrución de suma e indicaría a su unidad aritmeticológica que sume la posición de memoria Y y X donde se encuentran esos datos y finalmente guardará el resultado en la posición Z de la memoria. ¡No problem! Pero y ¿si hay varias CPUs? Imagina el mismo ejemplo de esa CPU A que deba hacer Z = Y + X, pero junto con otra CPU B que hace X = Y – 2.

Bien, démosle valores a cada una de las letras: Y=5, X=7. Si eso es así, si CPU A actúa primero, tendríamos que Z = 5 + 7, es decir Z = 12. Pero si CPU B actúa primero, X = 5 – 2 = 3, por tanto, accedería a la memoria y almacenaría 3 en la dirección donde se almacena X, por lo que si la CPU A acede a dicha posición, haría después la misma instrucción pero el resultado sería Z = 3 + 7, por lo que Z = 10. ¡Ooops! Ya tenemos un fallo grave que no nos podríamos permitir, o nada funcionaría adecuadamente…

Por eso, los sistemas de memoria han desarrollado una serie de métodos para mantener esta coherencia y saber qué operación debería ir antes o después para que el resultado sea el correcto. Incluso en tu equipo doméstico ocurre esto, ya que ahora cuentas con varios núcleos que están accediendo a la misma memoria, y no solo eso, también se están usando microarquitecturas que aprovechan el multithreading, sistemas superescalares y ejecución fuera de orden, algo que compromete mucho dicha coherencia si no se toman medidas correctoras. Pues imagina en un supercomputador con miles de estas…

Pero claro, los costes reducidos de fabricación de chips en masa y la maduración de la tecnología de redes han propiciado que se cambie rápido hacia máquinas con muchos procesadores interconectados entre sí y eso también ha obligado al sistema de memoria a cambiar (Véase coupling), puesto que esos problemas que hay en un equipo doméstico se multiplicarían por miles al tener tantos procesadores actuando simultáneamente.

Ese coupling que he citado ha ido evolucionando a lo largo del tiempo, empezando por sistemas fuertemente acoplados con una memoria principal compartida por todas las unidades de procesamiento; y los débilmente acoplados, con sistemas en los que cada procesador tiene su propia memoria independiente (distribuidos). En cambio, en los últimos tiempos los dos sistemas que he citado se han ido diluyendo poco a poco y se ha caminado hacia la hibridación, con los esquemas UMA (Uniform Memory Access) y NUMA (Non-Uniform Memory Access), aunque esto es otro tema del que podría hablar largo y tendido y nos daría para otro mega post.

Si quieres un poco de información, solo decirte brevemente que en una arquitectura UMA de memoria los tiempos de acceso a cualquiera de las posiciones de la memoria principal uniforme es igual, idependientemente del procesador que esté realizando el acceso (entiendo por acceso una operación de lectura o de escritura). Eso es debido a que está centralizada.

En cambio, en NUMA, no es uniforme y el tiempo de acceso dependerá del procesador que la solicite. Es decir, existe una memoria local y otra no local, dicho de otro modo, una memoria compartida y físicamente distribuida. Como comprenderás, para que esto sea eficiente se debe reducir la latencia media al máximo, y siempre que sea posible almacenar los datos e instrucciones que va a ejecutar un procesador de forma local.

Futuro: computación cuántica

La era post-silicio y todas las tecnologías de sustitución de la actual microelectrónica está aún bastante inmadura y en fases de desarrollo. Supongo que no habrá una transición radical, sino que se comenzaran a agotar las posibilidades del actual silicio hasta que llegue a su techo físico, y luego vendrá una era de tecnologías híbridas cuya base seguirá siendo el silicio para, en un futuro algo más lejano dar el salto a la computacion cuantica…

En esa trancisión creo que van a jugar un papel crucial los ARM y los manycores por su eficiencia energética (rendimiento/consumo) y, esto ya es una opinión muy personal, quizás en la década de 2020 se alcanzará ese límite del silicio y en la década de 2030 se sigua fabricando sobre tecnologías de silicio aprovechando las inversiones de las foundries y haciendo un poco más amplios los dices, ya que un die más grande ahora significa más coste de fabricación, pero cuando no haya que hacer esas enormes inversiones para actualizar una foundry supongo que esa estabilidad jugará a favor del precio. No obstante, del lado del diseñador supondrá un mayor esfuerzo de desarrollo, ya que para que ese incremento de superficie sin reducir el tamaño de fabricación suponga un incremento de rendimiento que valga la pena, quizás tengan que mimar mucho las microarquitecturas venideras e ir hacia micorarquitecturas más eficientes como esos ARM que he nombrado…

Volviendo al tema de la computación cuántica, realmente ya se han construído algunos computadores cuánticos, pero sinceramente visto lo que he visto aún están bastante limitados y necesitan mucho más desarrollo para transformarse en algo práctico para corporaciones, y mucho más trecho falta para que lleguen a madurar tanto como para hacerse algo asequible para los hogares. Como podéis ver en las imágenes que abren este apartado, aún parecen objetos de ciencia ficción bastante complejos y que necesitan una refrigeración que las mantenga cerca del cero absoluto ºK (-273ºC).

Esa temperatura limita su aplicación práctica y masiva al igual que ocurre con los superconductores. En el ámbito de los superconductores se han realizado pasos importantes, pero aún la temperatura de funcionamiento está bastante por debajo de 0ºC, aunque sería muy interesante que consiguiesen que trabajasen a temperatura ambiente o en unos márgenes algo más normales. Además de la barrera de la temperatura hay que lidiar con otros factores problemáticos, como que las bases y fundamentos de la actual computación binaria no sirven para la cuántica…

He querido citar a los superconductores, porque es una de las tecnologías en las que se basan algunos ordenadores cuánticos para poder cuantizar o aislar esos qubits de los que hablaremos. No obstante no es la única tecnología basal, también tenemos ordenadores cuánticos basados en iones (átomos con uno o varios electrones menos) basados en el recuento de dichos electrones de los qubits atrapados en trampas láser. Otra alternativa es la computación cuántica basada en los espines nucleares, usando los estados del espín de las moléculas como quibits…

Dejando los escollos de lado, voy a intentar explicar de un modo muy simple en lo que consiste la computación cuántica, para que lo entiendan todos. Dicho de un modo rápido, se trata de un paso más en el paralelismo, permitiendo a los futuros ordenadores cuánticos procesar tal cantidad de datos o información a la vez que nos permitirá hacer nuevos descubrimientos y resolver problemas que ahora no se pueden solucionar con las supercomputadoras convencionales. Por tanto, no solo supondrán una revolución tecnológica, sino que serán un gran impulso para la ciencia y tecnología en otros campos y el bienestar de la humanidad.

Vamos con la explicación fácil de lo que es una computadora cuántica. Sabes que las actuales computadoras se basan en el sistema binario, es decir, procesan bits que pueden tomar el valor cero o uno (encendido o apagado, voltajes altos o bajos si lo vemos desde el punto de vista de los circuitos), y esos códigos binarios son información que se puede procesar para poder ejecutar programas y hacer todo lo que hoy podemos hacer en nuestros ordenadores.

En cambio, en una computadora cuántica los bits cuánticos (llamados qubits, de quantum bits) no solo trabajan en los estados encendido o apagado (1 o 0), sino que también pueden trabajar en ambos estado, es decir, en una superposición de estados (encendido y apagado). Eso es así porque no se basa en la mecánica tradicional, sino en las leyes de la física cuántica. Por eso decía que la lógica digital o binaria no sirve y hay que desarrollar otra lógica cuántica para basar el nuevo mundo informático que nos espera.

Practica con la plataforma IBM Q: un lab online que ha puesto IBM para que cualquiera pueda usar el computador cuántico de 16 qubits. Es un editor con una interfaz gráfica basada en web que podrás usar para crear tus programas…

Por tanto, esta nueva unidad de información qubits, que sustituirá al bit, tiene un potencial latente por ese paralelismo o dualidad que permite manejar muchas más posibilidades o datos de una vez. Te pongo un ejemplo para que lo entiendas mejor, imagina que tienes un programa que suma dos bits (a, b) si un bit adicional es 0 y los resta si ese bit adicional tiene el valor 1. Entonces, las instrucciones cargadas en memoria serían (add a, b) en caso de que ese bit sea 0 y (sub a, b) en caso de que sea 1. Para obtener ambos resultados, la suma y la resta, debemos ejecutarlo dos veces, ¿verdad? ¿Y si el estado de ese bit adicional pudiese estar en ambos estados a la vez? Ya no haría falta ejecutarlo dos veces, ¿verdad?

Otro ejemplo, imagina que tienes una insturicción NOT lanzada sobre 3 bits en una computadora no cuántica. Si en el momento de lanzar dicha instrucción esos tres bits tienen el valor 010, el resultado será 101. En cambio, esa misma instrucción con qubits, donde cada valor puede estar en ambos estado a la vez, el resultado daría todos los valores posibles de una misma vez: 111, 110, 101, 100, 011, 010, 001 y 000. Esto para simulaciones científicas, criptografía, resolución de problemas matemáticos, etc., es simplemente INCREÍBLE.

¿Quién lleva la delantera en esta tecnología? Pues por el momento parece que IBM es el líder, aunque también Google, Intel y otras compañías o universidades están compitiendo y lanzando sus prototipos de computadoras cuánticas cada vez capaces de manejar más qubits, aunque tienen un problema agregado a los ya dichos, y es que en ocasiones necesitan algunos de esos qubits como qubits de “paridad”, es decir, para asegurarse de que los resultados no son erróneos.

Problemas: consumo eléctrico y calor generado

El consumo y la disipación de calor de estas grandes máquinas es un gran reto para los ingenieros. Se busca reducir drásticamente ese consumo y lidiar con el calor de una forma barata, ya que los sistemas de refrigeración suponen también un consumo eléctrico que hay que sumar al propio consumo de la computadora. Por eso se está pensando en algunas ideas exóticas como sumergir los centros de datos bajo el mar para que usen la propia agua como líquido refrigerante (p.e.: la marca comercial Fluorinert de 3M, que son líquidos refrigerantes basados en fluoruro) y ahorrar en complejos sistemas de aire acondicionado o de bombebo de líquido refrigerante…

Como ya dije, Google busca las zonas con las tarifas energéticas más baratas para instalar sus centros de servidores, ya que aunque sea poca la diferencia, al cabo de los años supone muchos millones de ahorro en la factura de la luz, supongo que en España lo tienen complicado con las tarifas que nos tiene nuestra querida Endesa…

En cuanto a la densidad de calor, también genera otro problema subyacente, y es la reducción de la vida de los componentes del servidor o supercomputadora, lo que atenta con las características de durabilidad y vida útil que describimos en el apartado de las características que debía tener un supercomputador. Y ese calor se debe al rendimiento electrico de los componentes de los circuitos, que desperdícian la mayor parte de la energía consumida en forma de calor, igual que les ocurre a los motores de combistión interna, cuyo rendimiento no es demasiado elevado y puede ir desde el 25-30% para la gasolina o los 30% o más para los diesel, con 40-50% para algunos turbo. Eso quiere decir, por ejemplo en el caso de la gasolina, que solo el 25 o 30% de la gasolina que consume se usa realmente para transferir potencia a las ruedas, el 75-70% restante se desperdícia en forma de calor por el rozamiento de los elementos. Como detalle decir que los motores eléctricos pueden llegar al 90% o más de eficiencia…

Aunque no viene mucho al caso ese ejemplo de los motores, con esto te quiero hacer saber que siempre que veas calor en un dispositivo significa que se está desperdiciando energía en forma de calor.

Una vez presentados estos dos problemas y teniendo claro la relación calor/energía, te puedo poner el ejemplo del supercomputador chino Tianhe-1A que consume 4,04 MW de electricidad, si estuviese instalado en un país donde se cobre el kWh a 0,12€ como en el caso de España, eso significaría un consumo de 480€/hora (4000 kW x 0,12€), teniendo en cuenta que está conectado todo el año, el consumo anual que hay que pagar asciende a 4.204.800€ (480x24x365). Cuatro millones de euros es una cantidad nada despreciable de factura de la luz, ¿verdad?

Y aún da más rabia pagarla si sabemos que por esa ineficiencia de nuestros circuitos de esos 4.204.800€ solo un porcentaje realmente nos ha sido útil, y el otro buen porcentaje se ha derrochado en forma de calor. Y no solo eso, sino que hemos tenido que invertir dinero para paliar ese calor que no sirve para nada pero que afecta a nuestros equipos. Además, pensando en el medio ambiente, este consumo desproporcionado también supone un gran problema si la energía se obtiene de fuentes que generen algún tipo de contaminación (no renovables).

Otro caso ejemplar sería el supercomputador chino que ahora ocupa la primera plaza del Top500, es decir, que en 2018 tiene la potencia de cálculo más elevada. Se llama Sunway TaihuLight y está destinado a estudios petrolíferos, y otros aspectos científicos, investigación farmacéutica y diseño industrial. Corre RaiseOS (Linux), usa un total de 40.960 microprocesadores SW26010 que son manycore (cada chip tiene 256 cores, con un total de 10.649.600 núcleos), discos duros para competar 20 PB de almacenamiento, y 1,31 PB de memoria RAM si sumamos todos los módulos. Eso le da una potencia de cálculo de 93 PFLOPS (luego explicaré qué son los FLOPS si no lo sabes).  Su precio ronda los 241 millones de euros y el consumo asciende a 15 MW, por lo que ocupa la posición 16 en el ranking de los más eficientes energéticamente (6,051 GFLOPS/W). Esos 15MW significa que hay que multiplicar la factura de la luz para el Tianhe-1A por 3,75…

Incluso se mide la relación potencia de cálculo con respecto a la cantidad de vatios necesarios para generar dicha cantidad de cálculo, hablo de la unidad FLOPS/W. Mientras más FLOPS por vatio pueda generar una máquina, más eficiente será y menor será esa factura de la luz, y esa temperatura generada, por tanto también el coste para refrigerarla. Incluso esa relación podría ser un factor limitante, ya que la infrastructura para la refrigeración instalada no permitiría una posible ampliación de futuro si no se puede refrigerar adecuadamente con las instalaciones que tenemos. Recuerda que esto atenta también con una de las características que deben tener: la escalaridad.

Taxonomía de las supercomputadoras:

Bien, hay muchas formas de clasificar a las supercomputadoras, pero a mi me interesa explicar la forma de clasificarlas según ciertos factores. Como he dicho, muchos no consideran a los servidores como supercomputadoras y considero que es un gran error, puesto que son supercomputadoras, o mejor dicho, las supercomputadoras son un tipo de servidor particular en el que se busca potenciar las capacidades de cálculo.

Entonces yo diría que los tipos de supercomputadoras según su uso son:

  • Servidor: es un tipo de supercomputadora muy común que puede ir desde algunos cuantos microprocesadores y unos cuantos módulos RAM y discos duros configurados con algún nivel RAID, hasta grandes máquinas con miles de microprocesadores, mucha cantidad de RAM disponible y gran capacidad de almacenamiento. Y se denominan servidores precisamente porque están destinados a ofrecer algún tipo de servicio: almacenamiento, hosting, VPS, correo, web, etc.
  • Supercomputador: la diferencia entre una granja de servidores y un supercomputador a nivel visual es cero, no podrías distinguir entre ambos. Lo único que los diferencia es que los supercomputadores están destinados a realizar cálculos complejos matemáticos o científicos, simulaciones, etc. Por eso, la cualidad que más interesa aquí es la de cálculo. No obstante, no confundas el término supercomputador que le hemos dado a este grupo y pienses que servidores y mainframes no son supecomputadoras (vuelvo a insistir).
  • Mainframe: son supercomputadoras especiales, aunque por definición son grandes y costosas máquinas con capacidades muy elevadas para manejar gran cantidad de datos, como llevar el control civil de algún tipo, transacciones bancarias, etc. En cambio existe una diferencia clara entre un mainframe y una supercomputadora, y es que el mainframe debe potenciar sus capacidades de E/S y debe ser más fiable, ya que deben acceder a grandes cantidades de datos como bbdd (bases de datos) externas. Por lo general los mainframes son más usados por los ministerios de gobiernos o por ciertos bancos o empresas, mientras que los supercomputadores son más codiciados por científicos y militares. IBM es la empresa líder en mainframes, como por ejemplo sus z/Architecture basados en unas bestias de cálculo como son sus chips y con distros como SUSE Linux en ellos…

En cuanto a los tipos según la infrastructura:

  • Clustering: es una técnica para unir computadoras conectadas entre sí por una red para conseguir crear una gran supercomputadora, mainframe o servidor. Es decir, es la base de la que hablamos en apartados anteriores.
    • Centralizados: todos los nodos están situados en un mismo lugar, como los mainframes y la mayoría de servidores o supercomputadoras.
    • Distribuidos: todos los nodos no están situados en la misma ubicación, a veces pueden estar separados a grandes distancias o distribuídos por la geografía, pero interconectados y operando como si solo fuesen uno. Un ejemplo lo tenemos en la Red Española de Supercomputación, que se compone de 13 supercomputadoras distribuídas por la penísula. Esas 13 están interconectadas con el fin de ofrecer una computación de muy alto rendimiento a la comunidad científica. Algunos nombres de supercomputadoras que la componen son: MareNostrum (Barcelona), Picasso (Málaga), Finisterrae2 (Galicia), Magerit y Cibeles (Madrid), etc.
  • Grid Computing: es otra forma de explotar y usar recursos heterogéneos no centralizados, por lo general se pueden usar las capacidades de cálculo, almacenamiento, etc., de diversos dispositivos repartidos por todo el mundo para alguna aplicación. Por ejempo, podemos coger parte de la prencia de cálculo de miles o millones de equipos sobremesa o portátiles de muchos usuarios, smartphones, etc. Todos ellos forman una malla interconectados a través de Internet para resolver algún problema. Por ejemplo, SETI@home es un proyecto de computación distribuida o en malla que funciona en la plataforma BOINC (Berkeley Open Infrastructure for Network Computing) con el que puedes colaborar instalando un simple software en tu equipo para que cojan parte de tus recursos y agregarlos a esa gran red para la búsqueda de vida extraterrestre. Otro ejemplo que se me ocurre, aunque no lícito, es un malware que secuestre parte de los recursos de tu equipo para minar criptomonedas, que los hay…

Aunque existen otras formas de catalogarlos, yo creo que estas son las más intersantes.

¿Para qué sirven las supercomputadoras?

Bien, esas capacidades de almacenamiento, memoria o cálculo tan elevadas que tienen las supercomputadoras nos permiten realizar muchas cosas que no podríamos realizar con un PC normal, como ciertas simulaciones científicas, resolución de problemas matemáticos, investigaciones, hospedaje, ofrecer servicios a miles o millones de clientes conectados, etc. En definitiva, son la mejor forma que conocemos para acelerar el progreso humano, aunque algunas de las cosas que se investigan sean destructivas (usadas para fines militares) o para el robo de nuestra privacidad, como ciertos servidores de redes sociales y demás casos que seguro conocéis.

Servidores, big data, cloud…

Las supercomputadoras que ofrecen servicios son conocidas como servidores, como ya sabes. Estos servicios pueden ser de lo más diverso:

  • Servidores de archivos: pueden ser desde servicios de hosting u hospedaje para las páginas webs, Storage, servidores FTP, redes heterogéneas, NFS, etc.
  • Servidores LDAP y DHCP: otros servidores peculiares que almacenan unos datos como los anteriores, aunque su función sea otra como la del login centralizado como en el caso de los LDAP o de proveer IPs dinámicas como en el caso de los DHCP…
  • Servidores web: se pueden incluir en el grupo anterior, porque almacenan datos también pero son servidores puramente enfocados a almacenar páginas webs para que se puedan acceder mediante el protocolo HTTP o HTTPS desde una red. Los clientes podrán tener así acceso a esta página desde sus navegadores.
  • Servidores de correo: puede suministrar servicios de correo electrónico para que los clientes puedan mandar y recibir emails.
  • Servidores NTP: aportan un servicio para la sincronización de la hora, muy importantes para Internet. Son las siglas de Network Time Protocol, y están distribuidos en estratos, siendo los estratos más bajos los más precisos. Esos estratos principales se rigen por relojes atómicos que tienen variaciones muy bajas a lo largo del año, por lo que dan una hora superprecisa.
  • Otros: otros servidores pueden almacenar grandes bases de datos, big data, hasta multitud de servicios cloud (IaaS, PaaS, CaaS, SaaS). Un ejemplo son los VPS (Virtual Private Server), es decir, dentro de un gran servidor se generan decenas o centenares de servidores virtuales aislados dentro de máquinas virtuales y se les ofrece a los clientes la capacidad de poseer uno de estos servidores para las tareas que él quiera sin tener que pagar un servidor real y costear la infrastructura y mantenimiento, solo pagar una cuota por adquirir este servicio al proveedor…

Y con esto terminamos los más destacados de esta categoría.

IA:

Algunas supercomputadoras están destinadas a implementar sistemas de IA (Inteligencia Artificial), es decir, estructuras que son capaces de aprender mediante el uso de redes neuronales artificiales, ya sea implementadas por algoritmos de software o por chips neuronales. Uno de los ejemplos que ahora tengo en mente es el supercomputador IBM Blue Gene y el algoritmo BlueMatter desarrollado por IBM y la Universidad de Stanford para poder implementar un cerebro humano artificial en un supercomputador y analizar así lo que ocurre en él en algunas efermedades psíquicas o neurodegenerativas como el Alzheimer, comprendiendo así mejor lo que ocurre dentro del cerebro y poder avanzar en nuevos tratamientos o tener una mayor conocimiento sobre nuestro órgano más misterioso.

También muchos servicios de IA que usamos tienen un supercomputador como base, como Siri, o Amazon (véase Alexa para Echo), etc. Pero quizás el ejemplo que más interés me despierta es IBM Watson, un supercomputador que implementa un sistema informático de AI denominado también Watson que es capaz de responder a preguntas formuladas en lenguaje natural y otras peripecias para las que lo han programado, como “cocinar” o saber ciertas mezclas de ingredientes que pueden ser agradables al paladar.

Se basa en una gran base de datos con multitud de información de libros, enciclopedias (incluída la Wikipedia en inglés), y otras muchas fuentes en las que puede buscar información para ofrecer respuestas. Está basado en microprocesadores IBM POWER7 y cuenta con unos 16 TB de RAM, y unos cuantos PB de almacenamiento para guardar esa gran cantidad de información, un hardware que costó sobre los 3 millones de dólares. Además, sus desarrolladores dicen que puede procesar 500 GB de información por segundo. Y para nuestra alegría se basa en algunos proyectos libres y un sistema operativo SUSE Linux Enterprise Server.

Aplicaciones científicas:

Pero los supercomputadores mayormente son utilizados para apliaciones científicas, ya sean para investigación en general o para un uso específico militar. Por ejemplo, sirven para realizar multitud de cálculos sobre física cuántica, nuclear, estudios sobre la materia como hace el supercomputador del CERN, simulaciones para comprender cómo se comportan las moléculas o partículas elementales, simulaciones de fluídos, como el CFD que se usa para estudiar la erodinámica de coches de competición, aeronaves, etc.

También para otros estudios de química, biología y mediciona. Por ejemplo, para tratar de entender mejor el comportamiento de ciertas enfermedades o recrear cómo se reproducen los tumores y así tratar de encontrar una mejor solución para el cáncer. Decía Dan Brown sobre el MareNostrum, que quizás de él salga la cura para el cáncer, ojalá así sea y que sea cuanto antes mejor. En la UMA (Universidad de Málaga) trabaja Miguel Ujaldon que pudimos entrevistar en LxA en exclusiva por sus desarrollos con NVIDIA CUDA en supercomputación, y él puede hablar sobre estos desarrollos que mejorarán nuestra salud… También se me ocurren otras aplicaciones prácticas, como el estudio y predicción de fenómenos naturales como el clima, estudios de cadenas de ADN y mutaciones, plegamiento de proteínas y análisis de explosiones nucleares.

Ten en cuenta, que para todos estos estudios e investigaciones se necesitan ingentes cantidades de cálculos matemáticos muy precisos y mover muchos datos de forma muy rápida, algo que si lo tuviesen que hacer los humanos con la única ayuda de su intelecto quizás tardarían siglos en encontrar la solución, mientras que con estas máquinas en pocos segundos ha podido desarrollar una cantidad brutal de procesos matemáticos.

¿Cuáles son las más potentes del mundo?

Ya lo he venido insinuando en algunos casos, existe una lista de los 500 supercomputadores más potentes del mundo que se van actualizando periódicamente. Se trata del Top500, donde además encontrarás multitud de estadísticas sobre estas máquinas, información, etc., así como otra lista particular llamada Green500 que se centra en esa eficiencia energética, es decir, no solo en medir los FLOPS brutos que puede desarrollar la máquina, sino posicionar en la lista a las 500 máquinas con una mejor relación FLOPS/W.

No obstante, puede que haya supercomputadoras mucho más potentes que estas y que no aparezcan en la lista, ya sea porque estén destinadas a proyectos secretos de gobiernos o porque por sus características no cumplan ciertos requisitos para ser analizados mediante las pruebas de benchmarks que describiremos en el apartado siguiente y por ello no se hayan publicado los resultados en este Top500. Además, se sospecha que algunas de las máquinas bien posicionadas en esta lista pueden estar alterando estos resultados porque estén específicamente optimizadas para sacar buenas puntuaciones en estos análisis de rendimiento, aunque en la práctica no sea tanto.

Benchmarks

Las pruebas para posiconar a estas supercomputadoras de la lista Top500 o para medir el rendimiento de todas aquellas que están fuera de esa lista es bien conocida por todos, de hecho son similares o iguales a las que realizamos a nuestros equipos domésticos o dispositivos móviles para ver su rendimiento. Hablo del software de benchmarks. Este tipo de programas son fragmentos de código muy específicas que realizan ciertas operaciones matemáticas o bucles que sirven para medir el tiempo que lleva a la máquina para realizarlos.

Según la calificación obtenida, se posicionará en dicha lista o se determinará el rendimiento que pueda tener esta máquina en el mundo práctico, para esas investigaciones que hemos detallado anteriormente. Por lo general, las pruebas de rendimiento también hacen pruebas sobre otros componentes, no solo sobre la unidad de procesamiento, también sobre la RAM, tarjeta gráfica, disco duro, E/S, etc. Además, resultan de lo más práctico no solo para saber el rendimiento al que puede llegar una máquina, sino para saber qué se necesita potenciar o ampliar…

Los tipos de pruebas se pueden clasificar en sintéticos, bajo/alto nivel, y otros. Los primeros son aquellas pruebas o programas que están específicamente diseñadas para medir rendimiento (e.j.: Dhrystone, Whetstone,…), mientras que las de bajo nivel son aquellas que miden el rendimiento de un componente de forma directa, como por ejemplo la latencia de una memoria, tiempos de acceso a memoria, IPC, etc. En cambio, las de alto nivel tratan de medir el rendimiento de conjuntos de componentes, por ejemplo, la velocidad de codificación, de compresión, etc., lo que significa medir el rendimiento en conjunto del componente de hardware que interfiere en ello, el controlador y el manejo que hace de ello el SO.  El resto de pruebas pueden estar destinadas a medir consumo energético, temperatura, redes, ruido, cargas de trabajo, etc.

El programa quizás más conocido para realizar benchmarks en supercomputadoras es LINPACK, ya que fue concebido para medir rendimiento en sistemas científicos y de ingeniería. El programa hace uso intensivo de operaciones de coma flotante, por tanto los resultados dependen mucho del potencial de FPU que tenga el sistema y es precisamente esto lo que más interesa medir en la mayoría de supercomputadoras. Y es aquí donde podemos medir esa unidad de la que tanto hemos hablado a lo largo del artículo: FLOPS.

Los FLOPS (Floating Point  Operations per Second) miede la cantidad de cálculos u operaciones en coma flotante que la computadora puede realizar en un segundo. Ya sabes que los computadores pueden realizar dos tipos de operaciones, con enteros y con coma flotante, es decir, con números del conjunto de números naturales (…-3,-2,-1,0,1,2,3,…) y con los conjuntos de números racionales (fracciones). Precisamente cuando trabajamos con simulaciones, gráficos 3D, o cálculos matemáticos complejos, física o ingeniería, son estas operaciones de coma flotante las que más abundan y nos interesa una máquina que pueda manejarlos de forma más rápida…

Nombre del múltiplo Abreviatura Equivalencia
- FLOPS 1
Kilo KFLOPS 1000
Mega MFLOPS 1.000.000
Giga GFLOPS 1.000.000.000
Tera TFLOPS 1.000.000.000.000
Peta PFLOPS 1.000.000.000.000.000
Exa EFLOPS 1.000.000.000.000.000.000
Zeta ZFLOPS 1.000.000.000.000.000.000.000
Yota YFLOPS 1.000.000.000.000.000.000.000.000

Es decir, estamos hablando de que la máquina Sunway TaihuLight puede realizar en cárga máxima unas 93.014.600.000.000.000 de operaciones de coma flotante en cada segundo. ¡Impresionante!

Partes de un supercomputador: ¿cómo están construidos?

Ya has visto a lo largo del artículo muchas fotografías de esas granjas de servidores, esas típicas salas grandes que tienen multitud de cableado por el techo o bajo el suelo que interconecta esos grandes armarios que se alinéan como en pasillos. Pues ahora toca ver qué son esos armarios y qué contienen en su interior, aunque llegados a este punto, creo que ya sabes bastante bien de lo que hablamos.

Partes de una supercomputadora:

Si te fijas en la imagen anterior de la arquitectura de un supercomputador de IBM muestra basante bien cómo están constituídas. Se pueden apreciar bien las partes desde la más simple al conjunto montado. Como ves, el componente elemental es el chip, es decir, la CPU o microprocesador que se usa como base. Por ejemplo, imagina que es un AMD EPYC. Luego, dicho AMD EPYC irá insertado en una placa base que por lo general tiene dos o cuatro sockets, por tanto cada una de ellas tendrá 1 o 2 EPYCs en contratste con las placas base que tenemos en nuestros equipos que no son MP.

Bien, ya tenemos una placa con varios chips, y por supuesto la placa base tendrá también agregados los componentes normales que tiene una placa base en un ordenador doméstico, es decir, los bancos de memoria, y demás. Una de estas placas se suele denominar compute car como ves en la imagen. Y se suelen disponer en unos cajones metálicos solas o agrupadas en varias. Dichos cajones son los que ves en la foto demoniados node card. Esos nodes o cajones se insertan en unos raíles que suelen tener unas medidas estándar por grupos (midplane), aunque no siempre todos corresponden a nodos con compute cars, sino que se dejan ciertas bahías libres abajo y arriba para alojar otros “cajones” o nodos con las tarjetas de red y los sistemas de enlace que interconectará todos estos elementos con otros armarios, la PSU o fuente de alimentación, otras bandejas que serán las que contengan los discos duros configurados en RADI, etc.

Esos raíles donde se insertan esos “cajones” o nodos de los que hemos hablado se llaman rack (bastidores), como el que vemos en las diferentes fotos. Como ya he dicho, suelen tener unas medidas estándar para que los elementos que irán dentro encajen bien como sucede con una torre de ordenador de sobremesa, con unas medidas en pulgadas para que no haya problema al insertar cualquier componente en las bahías. Además, los raks no suelen ir solos, ya que se pueden agrupar también en grupos que parecen grandes armários con otros elementos auxiliares si es necesario.

Según el tamaño del mainframe, servidor o supercomputador, la cantidad de armarios será mayor o menor, pero siempre estarán interconectados por sus tarjetas de rede los unos con los otros, normalmente usando potentes sistemas de interconexión de alto rendimiento y fibra óptica, para que así trabajen como un solo computador. Recuerda que hablamos de los distrubuidos, por tanto, estos armarios pueden estar en el mismo edificio o repartidos en otras ubicaciones, en tal caso estarán conectados a una red WAN o Internet para que trabajen en conjunto. Por cierto, redes que dejarían en ridículo a nuestras conexiones de fibra más rápidas de casa…

Tipos de refrigeración:

Ya hablamos de la preocupación por la refrigeración, de hecho, una cosa que llama la atención cuando entras en una granja de servidores o data center es el gran ruído que suele haber en algunos y las corrientes de aire. Eso se debe a estos sistemas de refrigeración que necesitan mantener a los sistemas a una temperatura adecuada. Y lo que ves en la imagen superior no es ni más ni menos que una sala donde está todo el sistema auxiliar de refrigeración de uno de estos centros, como ves bastante grande, complejo y que no parece “barato” de mantener.

Los que están refrigerados por aire necesitan enormes salas de aire acondicionado, que si te quejas de la factura en verano por poner tu aparatito, imaginate éstos. Y eso genera ese gran ruido y corrientes de aire que he dicho antes. Y en el caso de estar refrigerado por líquido, la cosa no es mucho mejor como se aprecia, con sofisticados entramados de tuberías, la consiguiente inspección para evitar fugas, y la necesidad de emplear miles o millones de litros de agua.

Se discute sobre emplear el agua reciclada en depuradoras o capturar agua de lluvia para no desperdiciar estas ingentes cantidades de agua, y también lo que os comenté antes, situar los centros de datos bajo el mar o en plataformas sobre el océano para usar el agua marina como refrigerante. Actualmente se hace pasar el agua por las fuentes de calor para que extráigan esos grados extra y luego se bombea el agua caliente hasta unas torretas de enfriamiento para que se vuelva a enfriar y comience de nuevo el ciclo. También se han propuesto otros métodos experimentales que usan otros líquidos refrigerantes en los sistemas de intercambio para bajar la temperatura del agua, sin costosos compresores de fluídos.

Redes de interconexión:

Las redes por las que se interconectan los diferentes nodos y raks de los servidores o supercomputadores son redes de fibra óptica ultrarápidas, ya que se deben evitar los cuellos de botella que restarían efectividad a este paradigma de agrupar elementos de forma masivamente paralela. Si la máquina tiene conexión con el exterior, me refiero a si está conectada a Internet, el ancho de banda que manejan es tremendamente grande como puedes imaginar.

Por ejemplo, son típtias las tecnologías de interconexión de clusters tipo Myrinet e Infiniand. Por ejemplo, en el caso de Myrinet se compone de tarjetas de red desarrolladas específicamente para este tipo de conexión que habrá diespuestas en algún cajón o nodo de los que describimos en el apartado de partes. De ellas saldrán/entrarán cables de fibra óptica (upstream/downstream) conectados a un único conector. Las interconexiones se realizan mediante switchs o routers, que habrá en los armarios. Además suelen tener una buena tolerancia a fallos, y se ha ido evolucionando hasta conseguir velocidades de 10 Gbit/.

En cambio, Infiniband es más avanzado y es el método que más se está empleando. Es un sistema de alta velocidad, baja latencia y baja sobrecarga de la CPU, lo cual es una ventaja respecto a Myrnet, dejando que la potencia de la CPU se destine a los fines para los que se pretende emplear restando lo minimo para manejar el sistema de interconexión. Además, es un estándar mantenido y desarrollado no por una empresa como el anterior, sino por una asociación llamada IBTA.

Al igual que Myrnet, Infiniband usa tarjetas de red (conectadas a ranuras PCI Express) para las conexiones, con cableado de fibra óptica, con un bus serie bidireccional que evita los problemas de los buses paralelos asociados a largas distancias. A pesar de ser serie puede llegar a los 2,5 Gbit/s de velocidad en cada dirección de cada uno de los enlaces, llegando a un caudal máximo en algunas de sus versiones de unos 96 Gbps.

Mantenimiento y administración:

Las supercomputadoras o servidores tendrán a un batallón de personal, todos ellos son agenos realmente a las funciones o servicios que tiene realmente la máquina. Normalmente estamos acostumbrados en equipos domésticos a que nosotros solemos ser los propios sysadmins de nuestros sistemas y además los usuarios que lo usamos. Pero eso no ocurre en estos casos, donde si se trata de un servidor, los usuarios serán los clientes y si es un supercomputador los usuarios serán los científicos o quien quiera que lo esté usando…

  • Ingenieros y desarrolladores: pueden cuidar de que la máquina o el funcionamiento sea el adecuado.
  • Administradores de sistemas: los sysadmins se encargarán de gestionar el sistema operativo instalado en el supercomputador para que el funcionamiento sea el adecuado. Por lo general, estos servidores o supercomputadoras no suelen tener entornos de escritorio o interfáces gráficas, por lo que se suele hacer todo esde el terminal. Por eso, los sysadmins se pueden conectar a la máquina mediante una terminal tonta de forma física o, si es posible la administración remota, se conectarán de forma remota por ssh y otros protocolos similares para ejecutar los comandos necesarios.

  • Otros administradores: si hay bases de datos, webs, y otros sistemas presentes en la máquina.
  • Expertos en seguridad: pueden ser de varios tipos, unos que se encarguen de la seguridad física o perimetral, es decir, con cámaras de vigilancia, seguridad en los accesos al centro de datos, también que eviten posibles accidentes (p.e.: incendios), etc., pero también expertos en seguridad que aseguren el sistema para evitar posibles ataques.
  • Técnicos: que también los habrá de lo más variado, con técnicos que se encarguen del mantenimiento de la infrastructura, ténicos de redes, técnicos que se encarguen de sustituir componentes dañados o repararlos, etc. Normalmente lelvan terminales tontas y en ellas un software les dice o marca el componente que está estropeado, y como si en un juego de cuadrícula se tratase dará una serie de coordenadas para que el técnico sepa a qué pasillo y rack dirigirse para sustituir el elemento concreto que está fallando. Por tanto, los pasillos y racks estarán señalizados como si de un parking se tratase. Además, dentro de la propia sala suele haber unas estanterías con cajas de elementos de respuesto para poder sustituir a los que fallan. Por supuesto eso se hace en caliente, es decir, sin apagar el sistema. Extraen el nodo, sustituyen el componente, introducen el nodo y conectan mientras el resto sigue funcionando…

Cuando he dicho el término terminal tonta, me refiero a un tipo de mesa con ruedas que suele haber en este tipo de centros y que tienen una pantalla y un teclado. Esta centralita se puede conectar al servidor o supercomputadora para que el técnico o sysadmin pueda realizar sus comprobaciones.

Sistemas operativos:

Como ya sabes, Linux se creó con el objetivo de conquistar el sector del escritorio, pero paradógicamente es el único sector que no domina en la actualidad. El escritorio está monopolizado casi por Microsoft y su Windows, seguido muy de lejos por Apple MacOS con una cuota de entorno al 6-10% y uno 2-4% para GNU/Linux…

Las cifras no son muy de fiar, puesto que las fuentes que se dedican a realizar estos estudios a veces no hacen las pruebas de una forma adecuada, o sesgada en ciertas zonas del planeta… Además, algunas incluyen a ChromeOS y otras solo a las distros GNU/Linux en esa cuota. Por ejemplo, NetMarketShare publicó un estudio que situaba a Linux en el 4,83% y al de MacOS en el 6,29%, es decir, bastante cerca. Supongo que en ese estudio también han incluido a ChromeOS. No obstante es poco comparado con el 88,88% que dan a Windows, aunque mucho mejor que FreeBSD (0,01%) y otros sistemas operativos que ni llegan a igualar a FreeBSD sumados todos juntos.

En cambio, esas tímidas cifras no se da en sectores como las grandes máquinas, embebidos, dispositivos móviles, etc. Por ejemplo, en el sector de las supercomputadoras, que es el que nos concierne ahora, el dominio es casi insultante y absoluto. Si nos fijamos en la lista de las supercomputadoras más poderosas del mundo, las estadísticas de junio de 2018 dicen que el 100% de las 500 más potentes usan Linux.

Si nos remontamos a 1998, solo había 1 supercomputadora con Linux de entre esas 500 más potentes. En 1999 subió la cifra hasta 17, una más al año siguiente, 28 en 2000, y a partir de ahí han crecido de forma exponencial llegando a las 198 en 2003, 376 en 2006, 2007 llegó a 427 y a partir de ahí han ido creciendo poco a poco hasta llegar a cifras de aproximadamente 490 de 500 que han ido oscilando hasta llegar a las 500 de 500 actuales.

Por tano, en estos servidores, mainframes o supercomputadoras con total seguridad veras las distros de Red Hat y SUSE, RHEL o SLES instalado en ellas, u otras distros diferentes como Debian, CentOS, Kylin Linux, etc. En caso de no tener Linux tendría algún otro UNIX como Solaris, AIX, UX, o algún BSD, pero los que brillan por su ausencia son MacOS y Windows. Y como he comentado en el apartado anterior, por lo general sin entorno de escritorio, ya que se desea destinar toda la potencia de estos equipos al objetivo para el que fueron diseñados y no desperdiciar parte de ella en entornos gráficos que, además, poco interesan a los que los manejan. Otra cosa diferente es los equipos clientes desde donde los usuarios o científicos trabajan, que si tendrán entornos gráficos para un análisis de la información de forma más intuitiva y gráfica.

¿Cómo crear una supercomputadora casera?

Se puede crear un supercomputador casero, sí. De hecho en la red encontrarás algunso proyectos como supercomputadoras constituídas por muchas placas Raspberry Pi unidas. Evidentemente las capacidades de estas máquinas no serán de otro mundo, pero sí que permiten sumar las capacidades de muchas de estas placas y hacerlas funcionar como si de una sola máquina se tratase. Más que para un uso práctico, este tipo de proyectos DIY se hace para enseñar cómo se puede hacer un supercomputador pero de una forma más barata y a menor escala para que cualquier apueda hacerlo en casa.

Otro tipo de cluster o supercomputadora que se puede hacer de forma casera o más barato que las grandes máquinas es el llamado Beowulf. Se puede implementar con cualquier Unix-like, como BSD, Linux o Solaris y usando proyectos de código abierto para aprovechar esta unión paralela de máquinas. Consigue básicamente en unir vaios PCs conectados por tarjetas Ethernet y switches para unirlos y hacer que funcionen como un solo sistema.

Con varios PCs viejos o que no estés usando y una distro Linux cualquiera como Ubuntu, podrías constuirte tu Beowulf. Te aconsejo que revises los proyectos MOSIX/OpenMOSIX o PelicanHPC. Con ellos podrás realizar dicha implementación. No obstante, si os llama la atención, intentaré en un futuro hacer un tutorial en LxA sobre cómo implementarlo de forma práctica y paso a paso.

Instalar un sistema operativo en la computadora

Este apartado es bastante sencillo de describir, ya que la instalación es prácticamente igual que en un ordenador cualquiera. Solo que deberemos tener en cuenta que deberíamos configurar ciertos aspectos como la configuración LVM o RAID que se use. Pero por lo general, no dista demasiado de una instalación cotidiana. Lo único impactante es que en vez de un solo procesador y unos módulos RAM y uno o dos discos duros, pues son cientos o miles de ellos, aunque desde el punto de vista del administrador nohaya diferencia. El sistema verá a la máquina como un todo, solo que los recursos de los que disponemos son extraordinarios.

Lo que también notarás de diferencia será la ausencia de BIOS/UEFI, ya que estos sistemas suelen usar sistemas EFI diferentes o otras implementaciones de firmware muy específicas para ciertas plataformas basadas en SPARC, POWER, etc. Por ejemplo, Intel EFI está soportado para los Intel Itanium,  De hecho, si nos lees asíduamente también conocerás el magnífico poryecto de Linuxboot. Pero esto no presenta demasiado problema, solo familiarizarte con esta interfaz y nada más, además, la cantidad de veces que se apaga/enciende o se reinicia este tipo de equipos se prácticamente nula.

Papá/mamá! ¿Puedo tener un supercomputador en casa?

Independientemente de los prototipos que podamos montar usando el formato Beowulf o el cluster de placas Raspberry Pi u otro tipo de SBCs, tengo buenas noticias para ti. Puedes usar la potencia de un supercomputador desde tu casa, sin comprar ni montar ninguna infrastructura. Solo pagando una cuota mensual para adquirir este servicio podrás contar con toda esa potencia disponible para cualquier fin que la quieras usar. Y eso es gracias a los diferentes servicios de la nube, como AWS (Amazon Web Services), Google Cloud Computing, Microsoft Azure, IBM, etc.

Además, contratar este tipo de servicios no solo supone un ahorro frente a tener un servidor propio dedicado, sino que también permite otras ventajas. Por ejemplo, nos permite aumentar rápidamente el potencial o tamaño de nuestro servicio contratando una tarifa algo superior, algo que si lo tuviésemos físicamente supondría comprar nuevo equipamiento. Tampoco tenemos que pagar gastos adicionales como el consumo eléctrico o el personal de mantenimiento, ya que de eso se ocuparan los técnicos del proveedor, que permitirá ofrecerte unas garantías de fiabilidad a un buen precio.

Existen muchos servicios que ofrecen VPSs a buen precio, es decir, un servidor virtual implementado sobre una máquina virtual en un servidor real o supercomputadora. Este servidor accederá una proporción de las capacidades de la máquina real para ofrecerte a ti. Puedes encontrar buenas plataformas de VPS con 1&1, TMDHosting, HostGator, Dreamhost, y otros tantos… Además, podrás ver las características del VPS en las respectivas webs, junto con los precios. Entre las características verás la memoria RAM, procesadores, almacenamiento disponible, ancho de banda o tráfico de red permitido, etc. Además, estos VPSs pueden ser Linux o Windows principalmente, según tus necesidades.

Por otro lado, tenemos otros servicios algo más avanzados como los de la nube, que nos permiten contratar IaaS (Infrastructure as a Service) o infrastructura como un servicio. Es decir, nos permite disponer de una supercomputadora o servidor como un servicio sin necesidad de tenerla físicamente. En este caso tenemos Microsoft Azure, Google Cloud Platform, IBM SoftLayer, CloudSigma, Rackspace, VMWare vCloud Air, Amazon Web Services, Citrix Workspace Cloud, Oracle Cloud Infrastructure, etc.

Fuentes:

Arquitectura de computadoras y microprocesadores – El mundo de Bitman

Sistemas operativos y administración – C2GL

No olvides dejar tus comentarios con dudas, aportaciones, o lo que te ha parecido mi humilde aportación… Espero que te haya servido de ayuda para conocer más de cerca este mundo.

El artículo Supercomputadoras: todo sobre estas desconocidas máquinas ha sido originalmente publicado en Linux Adictos.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.