stringtranslate.com

GPU de Brook

En informática , el lenguaje de programación Brook y su implementación BrookGPU fueron intentos tempranos e influyentes de permitir la computación de propósito general en unidades de procesamiento gráfico (GPGPU). [1] [2] Brook, desarrollado en el grupo de gráficos de la Universidad de Stanford , fue un compilador y una implementación en tiempo de ejecución de un lenguaje de programación de flujo dirigido a GPU modernas y altamente paralelas como las que se encuentran en las tarjetas gráficas ATI o Nvidia .

BrookGPU compilaba programas escritos con el lenguaje de programación Brook Stream, que es una variante de ANSI C. Podía ejecutarse en OpenGL v1.3+, DirectX v9+ o Close to Metal de AMD para el backend computacional y se ejecutaba tanto en Microsoft Windows como en Linux . Para la depuración, BrookGPU también podía simular una tarjeta gráfica virtual en la CPU.

Estado

La última versión beta importante (v0.4) fue en octubre de 2004, pero el desarrollo se reanudó y se detuvo nuevamente en noviembre de 2007 con el lanzamiento de la versión beta 1 de la v0.5.

Las nuevas características de la versión 0.5 incluyen un backend OpenGL mucho más actualizado y más rápido que utiliza objetos framebuffer en lugar de PBuffers y un código armonizado en torno a interfaces OpenGL estándar en lugar de utilizar extensiones de proveedores propietarios. Se agregó compatibilidad con GLSL , lo que lleva toda la funcionalidad (ramificaciones y bucles complejos) que anteriormente solo admitía DirectX 9 a OpenGL. En particular, esto significa que Brook ahora es tan capaz en Linux como en Windows .

Otras mejoras en la serie v0.5 incluyen el uso de múltiples back-end mediante el cual diferentes subprocesos pueden ejecutar diferentes programas Brook simultáneamente (maximizando así el uso de una configuración de múltiples GPU) y soporte para SSE y OpenMP para el back-end de la CPU (esto permite un uso casi máximo de las CPU modernas).

Comparación de rendimiento

Una comparación entre CPU de escritorio y GPGPU es problemática debido a diferencias algorítmicas y estructurales.

Por ejemplo, un Intel Core 2 Duo de 2,66 GHz puede realizar un máximo de 25 GFLOP (25 mil millones de operaciones de punto flotante de precisión simple por segundo) si se usa de manera óptima SSE y el acceso a la memoria en streaming para que el prefetcher funcione perfectamente. Sin embargo, tradicionalmente (debido a los límites de longitud del programa shader) la mayoría de los núcleos GPGPU tienden a realizar cantidades relativamente pequeñas de trabajo en grandes cantidades de datos en paralelo, por lo que el gran problema con la ejecución directa de algoritmos GPGPU en CPU de escritorio es un ancho de banda de memoria mucho menor, ya que en general la CPU pasa la mayor parte de su tiempo esperando a la RAM . Como ejemplo, la RAM DDR2 PC2-6400 de doble canal puede procesar aproximadamente 11 Gbit/s, lo que equivale a alrededor de 1,5 GFLOP como máximo, dado que hay un total de 3 GFLOP de ancho de banda total y uno debe leer y escribir. Como resultado, si el ancho de banda de la memoria está restringido, el backend de la CPU de Brook no superará los 2 GFLOP. En la práctica, es incluso más bajo que eso, especialmente para cualquier cosa que no sea float4, que es el único tipo de datos que se puede acelerar con SSE.

En una ATI HD 2900 XT (núcleo de 740 MHz, memoria de 1000 MHz), Brook puede realizar un máximo de 410 GFLOP a través de su backend DirectX 9. OpenGL es actualmente (debido a las limitaciones del controlador y del compilador Cg ) mucho menos eficiente como backend GPGPU en esa GPU, por lo que Brook solo puede gestionar 210 GFLOP cuando usa OpenGL en esa GPU. En el papel, esto parece unas veinte veces más rápido que la CPU, pero como se acaba de explicar, no es tan fácil. Las GPU actualmente tienen importantes penalizaciones de acceso de lectura/escritura y de ramificación, por lo que se espera un máximo razonable de un tercio del máximo pico en el código del mundo real; esto todavía deja a la tarjeta ATI con alrededor de 125 GFLOP, unas cinco veces más rápidas que el Intel Core 2 Duo.

Sin embargo, esto no tiene en cuenta la parte importante de la transferencia de los datos que se van a procesar hacia y desde la GPU. Con una interfaz PCI Express 1.0 x8, la memoria de una ATI HD 2900 XT se puede escribir a unos 730 Mbit/s y leer a unos 311 Mbit/s, lo que es significativamente más lento que la memoria de una PC normal. Para conjuntos de datos grandes, esto puede reducir en gran medida el aumento de velocidad que supone utilizar una GPU en lugar de una implementación de CPU bien ajustada. Por supuesto, a medida que las GPU se vuelvan más rápidas que las CPU y mejore la interfaz PCI Express, tendrá más sentido delegar el procesamiento de gran tamaño en las GPU.

Aplicaciones y juegos que utilizan BrookGPU

Véase también

Referencias

  1. ^ Tarditi, David; Puri, Sidd; Oglesby, Jose (2006). "Acelerador: uso del paralelismo de datos para programar GPU para usos de propósito general" (PDF) . ACM SIGARCH Computer Architecture News . 34 (5). doi :10.1145/1168919.1168898.
  2. ^ Che, Shuai; Boyer, Michael; Meng, Jiayuan; Tarjan, D.; Sheaffer, Jeremy W.; Skadron, Kevin (2008). "Un estudio de rendimiento de aplicaciones de propósito general en procesadores gráficos utilizando CUDA". J. Parallel and Distributed Computing . 68 (10): 1370–1380. doi :10.1016/j.jpdc.2008.05.014.

Enlaces externos