Procesador vectorial

Un procesador vectorial  es un procesador en el que los operandos de algunas instrucciones pueden ordenarse como matrices de vectores de datos . Se diferencia de los procesadores escalares , que solo pueden operar en un operando a la vez. La gran mayoría de los procesadores son escalares o similares. Los procesadores vectoriales eran comunes en la computación científica, donde fueron la base de la mayoría de las supercomputadoras desde la década de 1980 hasta la de 1990. Pero el espectacular aumento del rendimiento y el desarrollo activo de nuevos procesadores llevaron al desplazamiento de los procesadores vectoriales del ámbito de los procesadores cotidianos .

La mayoría de los microprocesadores modernos tienen extensiones vectoriales (ver SSE ). Además, las tarjetas de video modernas y los aceleradores físicos pueden considerarse como coprocesadores vectoriales .

Ilustración de la obra

Para ilustrar la diferencia entre un procesador vectorial y uno escalar, considere un ejemplo simple de suma por pares de dos conjuntos de 10 números. En la programación "normal", se usa un bucle , que toma pares de números en secuencia y los suma:

repite el ciclo 10 veces lea las siguientes instrucciones y decodifique obtener el primer término obtener el segundo termino doblar guardar resultado fin de ciclo

Para un procesador vectorial, el algoritmo será significativamente diferente:

lea las siguientes instrucciones y decodifique obtener los primeros 10 términos obtener términos de 10 segundos doblar guardar resultado

La implementación de Cray amplió las capacidades computacionales al permitir que se realizaran varias operaciones diferentes a la vez. Por ejemplo, considera el código que suma 2 conjuntos de números y los multiplica por un tercero, en Cray estas operaciones se realizarían así:

lea las siguientes instrucciones y decodifique obtener 10 números obtener 10 números obtener 10 números súmalos y multiplícalos guardar resultado

Por lo tanto, las operaciones matemáticas se realizan mucho más rápido, el principal factor limitante es el tiempo requerido para recuperar datos de la memoria.

Programación para arquitecturas informáticas heterogéneas

Se han diseñado varias máquinas utilizando procesadores tanto tradicionales como vectoriales, como Fujitsu AP1000 y AP3000. La programación para máquinas tan heterogéneas puede ser difícil, ya que desarrollar programas que aprovechen al máximo las características de diferentes procesadores aumenta la carga del programador. Esto aumenta la complejidad del código y reduce su portabilidad , ya que las secciones de código requeridas para cada uno de los procesadores estarán intercaladas a lo largo del programa [1] . Equilibrar las cargas de trabajo de las aplicaciones entre los procesadores puede ser problemático, especialmente dado que suelen tener diferentes características de rendimiento. Existen varios modelos conceptuales para tratar este problema, como el uso de un lenguaje de coordinación y bloques de construcción de programación ( bibliotecas y/o funciones de orden superior ). Cada bloque puede tener diferentes implementaciones nativas para cada tipo de procesador. El programador simplemente usa esta abstracción y el compilador inteligente elige la mejor implementación según el contexto [2] .

Véase también

Notas

  1. Kunzman, DM; Kale, LV (2011), Programación de sistemas heterogéneos , Simposio internacional IEEE de 2011 sobre talleres de procesamiento paralelo y distribuido y foro de doctorado , p. 2061, ISBN 978-1-61284-425-1 
  2. John Darlinton, Moustafa Ghanem, Yike Guo, Hing Wing To (1996), Organización de recursos guiados en computación paralela heterogénea , Journal of High Performance Computing Vol . 4 (1): 13–23 , < http://citeseerx.ist. psu.edu/viewdoc/summary?doi=10.1.1.37.4309 > Archivado el 8 de junio de 2013 en Wayback Machine . 

Enlaces