# AMD FireStream

AMD FireStream fue la marca de AMD para su línea de productos basada en Radeon que se enfoca en el procesamiento de flujo y / o GPGPU en supercomputadores. Desarrollado originalmente por ATI Technologies en torno a Radeon X1900 XTX en 2006, la línea de productos fue previamente marcada como ATI FireSTREAM y AMD Stream Processor. AMD FireStream también se puede utilizar como un coprocesador de punto flotante para descargar cálculos de la CPU, que es parte de la iniciativa de Torrenza. La línea FireStream se ha suspendido desde 2012, cuando las cargas de trabajo GPGPU se plegaron por completo en la línea AMD FirePro.

## Visión general

La línea FireStream es una serie de tarjetas de expansión complementarias lanzadas de 2006 a 2010, basadas en GPU Radeon estándar pero diseñadas para funcionar como un coprocesador de propósito general, en lugar de renderizar y generar gráficos en 3D. Al igual que la línea FireGL/FirePro, se les dio más memoria y ancho de banda de memoria, pero las tarjetas FireStream no necesariamente tienen puertos de salida de video. Todos son compatibles con coma flotante de precisión simple de 32 bits, y todos, excepto la primera versión, admiten doble precisión de 64 bits. La línea se asoció con nuevas API para proporcionar un rendimiento superior al que las API existentes de OpenGL y Direct3D podrían proporcionar, comenzando con Close to Metal, seguido de OpenCL y Stream Computing SDK, y finalmente integrado en el APP SDK.
Para cargas de trabajo de matemática de punto flotante altamente paralelas, las tarjetas pueden acelerar cómputos grandes en más de 10 veces; Folding@Home, el usuario más antiguo y uno de los más visibles de la GPGPU, obtuvo entre 20 y 40 veces el rendimiento de la CPU. Cada píxel y sombreado de vértice, o sombreador unificado en modelos posteriores, puede realizar cálculos arbitrarios de coma flotante.

## Historia

Tras el lanzamiento de los núcleos de la GPU Radeon R520 y GeForce G70 con sombreadores programables, el gran rendimiento de coma flotante llamó la atención de grupos académicos y comerciales, experimentando con el uso del trabajo no gráfico. El interés llevó a ATI (y Nvidia) a crear productos GPGPU, capaces de calcular fórmulas matemáticas de propósito general de forma masivamente paralela, para procesar cálculos pesados tradicionalmente realizados en CPU y coprocesadores matemáticos de coma flotante especializados. Se proyectó que las GPGPU tienen ganancias de rendimiento inmediatas de un factor de 10 o más, en comparación con el cálculo de CPU de socket múltiple contemporáneo.
Con el desarrollo del X1900 XFX de alto rendimiento casi terminado, ATI basó su primer diseño de procesador de flujo en él, anunciándolo como el próximo ATI FireSTREAM junto con la nueva API Close to Metal en SIGGRAPH 2006. El núcleo en sí no se modificó, a excepción de duplicar la memoria incorporada y el ancho de banda, similar al FireGL V7350; nuevo controlador y soporte de software constituyeron la mayor parte de la diferencia. Folding@home comenzó a utilizar el X1900 para el cálculo general, utilizando un prelanzamiento de la versión 6.5 del controlador ATI Catalyst e informó una mejora de 20-40x en la GPU sobre la CPU. El primer producto fue lanzado a finales de 2006, renombrado como AMD Stream Processor después de la fusión con AMD.
La marca se convirtió en AMD FireStream con la segunda generación de procesadores de flujo en 2007, basada en el chip RV650 con nuevos sombreadores unificados y soporte de precisión doble. El DMA asíncrono también mejoró el rendimiento al permitir un mayor grupo de memoria sin la ayuda de la CPU. Se lanzó un modelo, el 9170, por el precio inicial de US$1999. Los planes incluían el desarrollo de un procesador de flujo en un módulo MXM para 2008, para computación portátil, pero nunca fue lanzado.
La tercera generación siguió rápidamente en 2008 con mejoras dramáticas en el rendimiento del núcleo RV770; el 9250 casi duplicó el rendimiento del 9170, y se convirtió en el primer procesador de teraflop de un solo chip, a pesar de bajar el precio a menos de $1.000. Un hermano más rápido, el 9270, fue lanzado poco después, por $1999.
En 2010, apareció la generación final de FireStreams, las tarjetas 9350 y 9370, basadas en el chip Cypress presentado en el HD 5800. Esta generación volvió a duplicar el rendimiento en relación con el anterior, a 2 teraflops en el 9350 y 2.6 teraflops en el 9370, y fue el primero construido desde cero para OpenCL. Esta generación también fue la única que presentó refrigeración totalmente pasiva y el enfriamiento activo no estuvo disponible.
Las generaciones Northern and Southern Islands se saltaron, y en 2012, AMD anunció que las nuevas series FirePro W (estación de trabajo) y S (servidor) basadas en la nueva arquitectura Graphics Core Next tomarían el lugar de las tarjetas FireStream.

## Modelos

* FireStream 9170 include Direct3D 10.1, OpenGL 3.3 and APP Stream
* FireStream 92x0 include Direct3D 10.1, OpenGL 3.3 and OpenCL 1.0
* FireStream 93x0 include Direct3D 11, OpenGL 4.3 and OpenCL 1.2 with Last Driver updates

## Software

AMD FireStream se lanzó con una amplia gama de soporte de plataforma de software. Una de las firmas de respaldo fue PeakStream (adquirida por Google en junio de 2007), que fue la primera en proporcionar una versión beta abierta de software para admitir CTM y AMD FireStream, así como procesadores x86 y Cell (Cell Broadband Engine). Se afirmó que el FireStream era 20 veces más rápido en aplicaciones típicas que las CPU normales después de ejecutar el software de PeakStream. RapidMind también proporcionó un software de procesamiento de flujo que funcionaba con ATI y NVIDIA, así como procesadores Cell.

### Software Development Kit

Después de abandonar su breve API Close to Metal, AMD se centró en OpenCL. AMD lanzó por primera vez su Stream Computing SDK (v1.0), en diciembre de 2007 bajo AMD EULA, para ser ejecutado en Windows XP. El SDK incluye "Brook+", una versión optimizada de hardware de AMD del lenguaje Brook desarrollada por la Universidad de Stanford, una variante del ANSI C (lenguaje C), de código abierto y optimizada para la informática de flujo continuo. También se incluirán AMD Core Math Library (ACML) y AMD Performance Library (APL) con optimizaciones para AMD FireStream y la biblioteca de videos COBRA (más renombrada como "Transcodificación de vídeo acelerada" o AVT) para la aceleración de transcodificación de video. Otra parte importante del SDK, la capa de abstracción computarizada (CAL), es una capa de desarrollo de software para acceso de bajo nivel, a través de la interfaz de hardware CTM, a la arquitectura de GPU para software de ajuste de rendimiento escrito en varios lenguajes de programación de alto nivel.
En agosto de 2011, AMD lanzó la versión 2.5 del Kit de desarrollo de software de la aplicación ATI, que incluye soporte para OpenCL 1.1, un lenguaje de cómputo paralelo desarrollado por el Grupo Khronos. El concepto de sombreadores de cómputo, oficialmente llamado DirectCompute, en la API de próxima generación de Microsoft llamada DirectX 11 ya está incluido en los controladores de gráficos con compatibilidad con DirectX 11.

## Benchmarks

De acuerdo con AMD-demonstrated system con dos procesadores AMD Opteron de doble núcleo y dos núcleos Radeon R600 GPU que se ejecutan en Microsoft Windows XP Professional, se puede lograr 1 teraflop (TFLOP) mediante un cálculo universal de suma múltiple (MADD). En comparación, un procesador Intel Core 2 Quad Q9650 a 3.0 GHz en ese momento podría alcanzar 48 GFLOPS.
En una demostración del escaneo antivirus Kaspersky SafeStream que se había optimizado para procesadores de flujo AMD, fue capaz de escanear 21 veces más rápido con la aceleración basada en R670 que con la búsqueda ejecutada completamente en un Opteron, en 2007.

## Limitaciones

* Las funciones recursivas no son compatibles con Brook+, porque todas las llamadas a funciones están en línea en el momento de la compilación. Usando CAL, las funciones (recursivas o no) son compatibles con 32 niveles.
* Solo se admite el filtrado de textura bilineal; Las texturas mipmapped y el filtrado anisotrópico no son compatibles.
* Las funciones no pueden tener una cantidad variable de argumentos. El mismo problema ocurre para las funciones recursivas.
* La conversión de números de coma flotante a enteros en GPU se realiza de forma diferente que en las CPU x86; no es totalmente compatible con IEEE-754.
* Hacer una "sincronización global" en la GPU no es muy eficiente, lo que obliga a la GPU a dividir el kernel y hacer la sincronización en la CPU. Dada la cantidad variable de multiprocesadores y otros factores, puede que no haya una solución perfecta para este problema.
* El ancho de banda del bus y la latencia entre la CPU y la GPU pueden convertirse en un cuello de botella.