title: Array sistólico
text: # Array sistólico
  
  En arquitectura de computadoras paralelas, una matriz sistólica es una red homogénea de unidades de procesamiento de datos (DPU) fuertemente acopladas llamadas células o nodos. Cada nodo o DPU calcula independientemente un resultado parcial como una función de los datos recibidos de sus vecinos ascendentes, almacena el resultado dentro de sí mismo y lo pasa hacia abajo. Los arreglos sistólicos fueron inventados por Richard P. Brent, H. T. Kung y Charles E. Leiserson quienes los desarrollaron para calcular muchas operaciones de álgebra lineal densas (producto de matrices, resolución de ecuaciones lineales,factorización LU, etc). Las aplicaciones tempranas incluyen el Máximo común divisor de enteros y polinomios A veces se clasifican como arquitecturas de "múltiples instrucciones, un dato" (MISD) bajo la taxonomía de Flynn pero esta clasificación es cuestionable porque se puede distinguir las series sistólicas de cualquiera de las cuatro categorías de Flynn: SISD, SIMD, MISD, MIMD, como se verá más tarde en este artículo.
  Los datos de entrada paralelos fluyen a través de una red de nodos de procesador cableados que combinan, procesan y clasifican los datos de entrada en un resultado derivado. Debido a que la propagación ondulatoria de datos a través de una matriz sistólica se asemeja al pulso del sistema circulatorio humano, el nombre "sistólico" se acuñó a partir de la terminología médica. El nombre se deriva de la sístole como una analogía al bombeo regular de sangre por el corazón.
  
  # Array sistólico
  ## Aplicaciones
  
  Las matrices sistólicas suelen estar cableadas para operaciones específicas, como "multiplicar y acumular", para realizar de manera masivamente paralela tareas como integración, convolución, correlación, multiplicación matricial o ordenamiento de datos. También se utilizan para algoritmos de programación dinámica, utilizados en análisis de secuencias de ADN y proteínas.
  
  # Array sistólico
  ## Arquitectura
  
  Una matriz sistólica consiste típicamente en una gran red monolítica de nodos primitivos de computación que puede ser cableada o software configurado para una aplicación específica. Los nodos suelen ser fijos e idénticos, mientras que la interconexión es programable. Los procesadores de frente de onda más generales, por el contrario, emplean nodos sofisticados e individualmente programables que pueden o no ser monolíticos, dependiendo del tamaño del arreglo y los parámetros de diseño. La otra distinción es que los arrays sistólicos se basan en transferencias de datos síncronas, mientras que los de frente de onda tienden a trabajar asincrónicamente.
  A diferencia de la arquitectura de Von Neumann donde la ejecución del programa sigue un guion de instrucciones almacenadas en memoria común, dirigidas y secuenciadas bajo el control del contador de programa (PC) de la CPU, los nodos individuales dentro de una matriz sistólica son activados por la llegada de nuevos Datos y procesan siempre los datos exactamente de la misma manera. El procesamiento real dentro de cada nodo puede ser cableado o por bloques de Microcódigo, en cuyo caso la personalidad del nodo común puede ser programable en bloque.
  El paradigma de matriz sistólica con flujos de datos impulsados por contadores de datos es la contrapartida de la arquitectura de Von Neumann con el flujo de instrucciones impulsado por un contador de programas. Debido a que una matriz sistólica normalmente envía y recibe múltiples flujos de datos, y se necesitan varios contadores de datos para generar estos flujos de datos, soporta el paralelismo de datos.
  Los nodos reales pueden ser sencillos y cableados o consistir en unidades más sofisticadas usando microcódigo, que puede ser programable en bloque.
  
  # Array sistólico
  ## Metas y beneficios
  
  Un gran beneficio de los arreglos sistólicos es que todos los datos de operandos y los resultados parciales son almacenados dentro del procesador. No hay necesidad de buses de acceso externo, memoria central o cáches internos durante cada operación, como en el caso de las máquinas secuencias de Von Neumann o Harvard. Los límites secuenciales en el desempeño paralelo dictados por la Ley de Amdahl tampoco aplican en la misma manera, porque las dependencias entre datos se manejan implícitamente por el nodo de interconexión programable y no hay pasos secuenciales en el manejo del flujo de datos altamente paralelizado.