supercomputadores javier pÉrez mato …nunez/clases-micros-para-com/mpc0809-trabajos… · los...

20
1 SUPERCOMPUTADORES JAVIER PÉREZ MATO MICROPROCESADORES PARA COMUNICACIONES CURSO 2008/09

Upload: hoangthuan

Post on 18-Sep-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

1

SUPERCOMPUTADORES

JAVIER PÉREZ MATO

MICROPROCESADORES PARA COMUNICACIONES

CURSO 2008/09

2

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

3

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.

INTRODUCCIÓN

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

4

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.

5

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.

6

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.

7

Ilustración 4: UNIVAC I

Ilustración 5: IBM 7080 Stretch

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.

COMPUTACIÓN ESCALAR Y VECTORIAL

8

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)

9

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)

10

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.

11

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.

LA ERA VECTORIAL (1970 – 2000)

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.

12

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

13

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

14

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.

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.

SUPERCOMPUTADORES BASADOS EN SMPs

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

15

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.

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.

CLUSTERS

16

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.

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.

LA ACTUALIDAD

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

17

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.

Ilustración 12: SGI Pleiades

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.

18

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.

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.

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.

Está equipado con más de 12.000 procesadores tipo PowerXCell 81 mejorados, diseñados originalmente para la videoconsola Sony PlayStation3,

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.

19

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.

20

http://www.wikipedia.com

http://www.intel.com

http://www.cray.com

http://www.amd.com

http://www.ibm.com

http://www.top500.org

BIBLIOGRAFÍA