Sie sind auf Seite 1von 19

NVIDIA TESLA: UNA ARQUITECTURA DE GRÁFICOS Y

COMPUTACIÓN UNIFICADA
La moderna unidad de procesamiento de gráficos 3D (GPU) ha evolucionado desde una tubería
de gráficos de función fija a un procesador paralelo programable con una potencia de cálculo
superior a la de las CPU multinúcleo. Las tuberías de gráficos tradicionales constan de etapas
programables separadas de procesadores de vértices que ejecutan programas de sombreado de
vértices y procesadores de fragmentos de píxeles que ejecutan programas de sombreado de
píxeles. (Montrym y Moreton proporcionan antecedentes adicionales sobre la arquitectura
tradicional del procesador de gráficos).

La arquitectura Tesla de NVIDIA, presentada en noviembre de 2006 en la GPU GeForce 8800,


unifica los procesadores de vértices y píxeles y los amplía, permitiendo aplicaciones informáticas
paralelas de alto rendimiento escritas en lenguaje C utilizando el modelo de programación
paralela Compute Unified Device Architecture (CUDA2-4) y herramientas de desarrollo.

La arquitectura de gráficos e informática unificada de Tesla está disponible en una familia


escalable de GPU GeForce serie 8 y GPU Quadro para computadoras portátiles, computadoras
de escritorio, estaciones de trabajo y servidores. También proporciona la arquitectura de
procesamiento para las plataformas informáticas Tesla GPU introducidas en 2007 para la
informática de alto rendimiento.

En este artículo, discutimos los requisitos que impulsaron la arquitectura del procesador de
cómputo en paralelo y gráficos unificados, describen la arquitectura de Tesla y cómo se permite
la implementación generalizada de aplicaciones informáticas y gráficas paralelas.

El camino hacia la unificación


La primera GPU fue la GeForce 256, presentada en 1999. Contenía una transformada de vértice
de coma flotante de 32 bits de función fija y un procesador de iluminación y una tubería de
fragmento de píxel entero de función fija, que se programaron con OpenGL y la API de Microsoft
DX7. En 2001, GeForce 3 introdujo el primer procesador de vértice programable que ejecuta
sombreadores de vértices, junto con un conducto configurable de fragmento de punto flotante
de 32 bits, programado con DX8 y OpenGL. El Radeon 9700, presentado en 2002, presentaba un
procesador programable de ángulo flotante pixelfragment de 24 bits programado con DX9 y
OpenGL. GeForce FX agregó procesadores de fragmentos de píxeles de coma flotante de 32 bits.
El Xbox 360 introdujo una GPU unificada temprana en 2005, permitiendo que los vértices y los
píxeles se ejecuten en el mismo procesador.

Los procesadores vértices operan en los vértices de primitivos como puntos, líneas y triángulos.
Las operaciones típicas incluyen la transformación de coordenadas en espacio de pantalla, que
luego se alimentan a la unidad de configuración y el rasterizador, y la configuración de los
parámetros de iluminación y textura para ser utilizados por los procesadores pixelfragment. Los
procesadores de fragmentos de píxel funcionan en la salida de rasterizador, que llena el interior
de las primitivas, junto con los parámetros interpolados. Los procesadores Vertex y fragmentos
de píxeles han evolucionado a diferentes velocidades: los procesadores Vertex se diseñaron para
operaciones matemáticas de baja latencia y alta precisión, mientras que los procesadores de
fragmentos de píxeles se optimizaron para filtrado de texturas de baja latencia y alta latencia.
Los procesadores Vertex tradicionalmente han admitido un procesamiento más complejo, por
lo que primero se pueden programar. Durante los últimos seis años, los dos tipos de
procesadores han convergido funcionalmente como resultado de la necesidad de una mayor
generalización de programación. Sin embargo, la mayor generalidad también aumentó la
complejidad del diseño, el área y el costo del desarrollo de dos procesadores por separado.
Debido a que las GPU generalmente deben procesar más píxeles que vértices, los procesadores
de fragmentos de píxeles superan tradicionalmente a los procesadores de vértices en
aproximadamente tres a uno. Sin embargo, las cargas de trabajo típicas no están bien
equilibradas, lo que conduce a la ineficiencia. Por ejemplo, con triángulos grandes, los
procesadores de vértices están en su mayoría inactivos, mientras que los procesadores de
píxeles están completamente ocupados. Con triángulos pequeños, lo opuesto es verdad. La
adición de procesamiento primitivo más complejo en DX10 hace que sea mucho más difícil
seleccionar una relación de procesador fijo. Todos estos factores influyeron en la decisión de
diseñar una arquitectura unificada.

Un objetivo de diseño primario para Tesla era ejecutar programas de sombreado de vértice y
fragmento de píxel en la misma arquitectura de procesador unificado. La unificación permitiría
el equilibrio de carga dinámico de cargas de trabajo de procesamiento de vértices y píxeles
variables y permitiría la introducción de nuevas etapas de sombreado de gráficos, como
sombreadores de geometría en DX10. También permitió que un solo equipo se centrara en
diseñar un procesador rápido y eficiente, y permitió compartir hardware costoso, como las
unidades de textura. La generalidad requerida de un procesador unificado abrió la puerta a una
capacidad de computación paralela de GPU completamente nueva. La desventaja de esta
generalidad fue la dificultad del equilibrio de carga eficiente entre diferentes tipos de
sombreadores. Otros requisitos críticos de diseño de hardware fueron la escalabilidad
arquitectónica, el rendimiento, la potencia y la eficiencia del área. Los arquitectos de Tesla
desarrollaron las características gráficas establecidas en coordinación con el desarrollo de la API
de gráficos Microsoft Direct3D DirectX 10. Desarrollaron las funciones de computación de la GPU
en coordinación con el desarrollo del lenguaje de programación paralelo CUDA C, el compilador
y las herramientas de desarrollo.

Arquitectura Tesla
La arquitectura de Tesla se basa en una matriz de procesadores escalable. La Figura 1 muestra
un diagrama de bloques de una GPU GeForce 8800 con 128 núcleos de procesador de
transmisión (SP) organizados como 16 multiprocesadores de transmisión (SM) en ocho unidades
de procesamiento independientes denominadas clústeres de textura / procesador (TPC). El
trabajo fluye de arriba hacia abajo, comenzando en la interfaz del host con el bus PCIExpress del
sistema. Debido a su diseño de procesador unificado, la arquitectura física de Tesla no se
asemeja al orden lógico de las etapas de las tuberías de gráficos. Sin embargo, usaremos el flujo
de la tubería de gráficos lógicos para explicar la arquitectura. En el nivel más alto, la matriz de
procesadores de flujo escalable de la GPU (SPA) realiza todos los cálculos programables de la
GPU. El sistema de memoria escalable consiste en control de DRAM externo y procesadores de
operación de ráster de función fija (ROP) que realizan operaciones de búfer de cuadros de color
y profundidad directamente en la memoria. Una red de interconexión conlleva valores
calculados de fragmentos de píxeles y valores de profundidad desde el SPA hasta los ROP. La red
también enruta solicitudes de lectura de memoria de textura del SPA a DRAM y lee datos de
DRAM a través de un caché de nivel 2 de vuelta al SPA.
Los bloques restantes en la Figura 1 entregan trabajo de entrada al SPA. El ensamblador de
entrada recoge el trabajo de vértice como lo indica el flujo de comandos de entrada. El bloque
de distribución de trabajo de vértice distribuye los paquetes de trabajo de vértice a los diversos
TPC en el SPA. Los TPC ejecutan programas de sombreado de vértices y (si están habilitados)
programas de sombreado de geometría. Los datos de salida resultantes se escriben en búferes
en chip. Estos búferes pasan luego sus resultados al bloque viewport / clip / setup / raster / zcull
para rasterizarlos en fragmentos de píxeles. La unidad de distribución de trabajo de píxeles
distribuye fragmentos de píxeles a los TPC apropiados para el procesamiento de fragmentos de
píxeles. Los pixelfragments sombreados se envían a través de la red de interconexión para su
procesamiento por unidades de profundidad y color ROP. El bloque de distribución de trabajo
de cálculo distribuye conjuntos de subprocesos de cálculo a los TPC. El SPA acepta y procesa el
trabajo para múltiples flujos lógicos simultáneamente. Múltiples dominios de reloj para
unidades de GPU, procesadores, DRAM y otras unidades permiten optimizaciones de potencia
y rendimiento independientes.

Figura 1. Arquitectura unificada de GPU de gráficos e informática de Tesla. TPC: grupo textura / procesador; SM:
multiprocesador de transmisión; SP: procesador de transmisión; Tex: textura, ROP: procesador de operación raster.

Procesamiento de comandos
La unidad de interfaz de host GPU se comunica con la CPU del host, responde a los comandos
de la CPU, obtiene datos de la memoria del sistema, verifica la consistencia del comando y realiza
el cambio de contexto. El ensamblador de entrada recoge primitivas geométricas (puntos, líneas,
triángulos, franjas de línea y tiras de triángulos) y recupera datos de atributos de entrada de
vértices asociados. Tiene tasas pico de una primitiva por reloj y ocho atributos escalares por reloj
en el reloj central de la GPU, que normalmente es de 600 MHz. Las unidades de distribución de
trabajo envían la secuencia de salida del ensamblador de entrada a la matriz de procesadores,
que ejecutan los programas de vértice, geometría y sombreado de píxeles, así como programas
informáticos. Las unidades de distribución de trabajo de vértices y cómputo entregan trabajo a
los procesadores en un esquema round-robin. La distribución del trabajo de píxeles se basa en
la ubicación del píxel.

Matriz de procesador de transmisión


El SPA ejecuta programas de subprocesos de sombreado de gráficos y programas de
computación de GPU y proporciona administración y control de subprocesos. Cada TPC en el
SPA corresponde aproximadamente a una unidad de cuatro píxeles en arquitecturas previas. El
número de TPC determina el rendimiento de procesamiento programable de una GPU y escala
de un TPC en una GPU pequeña a ocho o más TPC en GPU de alto rendimiento.

Grupo de textura / procesador


Como muestra la Figura 2, cada TPC contiene un controlador de geometría, un controlador SM
(SMC), dos multiprocesadores de transmisión (SM) y una unidad de textura. La Figura 3 amplía
cada SM para mostrar sus ocho núcleos SP. Para equilibrar la proporción esperada de
operaciones matemáticas con operaciones de textura, una unidad de textura sirve dos SM. Esta
relación arquitectónica puede variar según sea necesario.

Figura 2. Grupo de textura / procesador (TPC).

Controlador de geometría
El controlador de geometría mapea la tubería de vértices de gráficos lógicos en la recirculación
en los SM físicos al dirigir todos los atributos de primitiva y de vértice y el flujo de topología en
el TPC. Gestiona el almacenamiento de atributos de vértice de entrada y salida de onchip
dedicado y reenvía los contenidos según sea necesario.
DX10 tiene dos etapas relacionadas con el procesamiento de vértices y primitivos: el
sombreador de vértices y el sombreador de geometría. El sombreador de vértices procesa los
atributos de un vértice independientemente de otros vértices. Las operaciones típicas son las
transformaciones del espacio de posición y la generación de coordenadas de color y textura. El
sombreador de geometría sigue el sombreador de vértices y trata con una primitiva completa y
sus vértices.

Las operaciones típicas son la extrusión de bordes para la generación de sombra de stencil y la
generación de texturas de mapas en cubo. Las primitivas de salida de shader de geometría van
a etapas posteriores para clipping, transformación de ventana gráfica y rasterización en
fragmentos de píxeles.

Streaming multiprocesador
El SM es un multiprocesador unificado de gráficos y computación que ejecuta programas de
sombreado de vértice, geometría y fragmento de píxel y programas informáticos paralelos.
Como se muestra en la Figura 3, el SM consta de ocho núcleos de procesador de transmisión
(SP), dos unidades de función especial (SFU), unidad de búsqueda y emisión de instrucción
multiproceso (MT Issue), un caché de instrucción, un caché constante de solo lectura y un 16 -
Kbyte leer / escribir memoria compartida.

La memoria compartida contiene búferes de entrada de gráficos o datos compartidos para


computación paralela. Para canalizar las cargas de trabajo de gráficos a través de SM, los
vértices, la geometría y los subprocesos de píxeles tienen búferes de entrada y salida
independientes. Las cargas de trabajo pueden llegar y salir independientemente de la ejecución
del subproceso. Los subprocesos de geometría, que generan cantidades variables de salida por
subproceso, usan almacenamientos intermedios de salida separados.

Cada núcleo SP contiene una unidad escalar de multiplicidad (MAD), lo que le da al SM ocho
unidades MAD. El SM utiliza sus dos unidades SFU para funciones trascendentales e
interpolación de atributos: la interpolación de atributos de píxeles a partir de atributos de
vértices que definen una primitiva. Cada SFU también contiene cuatro multiplicadores de coma
flotante. El SM utiliza la unidad de textura TPC como una tercera unidad de ejecución y utiliza
las unidades SMC y ROP para implementar la carga de memoria externa, la tienda y los accesos
atómicos. Una red de interconexión de baja latencia entre los SP y los bancos de memoria
compartida proporciona acceso a memoria compartida.

La GeForce 8800 Ultra sincroniza los SP y unidades SFU a 1.5 GHz, para un pico de 36 Gflops por
SM. Para optimizar la potencia y la eficiencia del área, algunas unidades de SM que no son de
datos operan a la mitad de la velocidad del reloj SP.

SM multihilo. Un vértice de gráficos o un sombreador de píxeles es un programa para un único


hilo que describe cómo procesar un vértice o un píxel. De manera similar, un núcleo CUDA es un
programa C para un solo hilo que describe cómo un hilo calcula un resultado. Las aplicaciones
de gráficos e informática crean instancias de muchos subprocesos paralelos para procesar
imágenes complejas y calcular grandes matrices de resultados. Para equilibrar dinámicamente
las cargas de trabajo cambiantes del vértice y del sombreador de píxeles, el SM unificado ejecuta
al mismo tiempo diferentes programas de subprocesos y diferentes tipos de programas de
sombreado.
Para ejecutar de manera eficiente cientos de subprocesos en paralelo mientras se ejecutan
varios programas diferentes, el SM es multiproceso de hardware. Gestiona y ejecuta hasta 768
subprocesos concurrentes en hardware con cero gastos generales de planificación.

Para soportar el modelo de programación independiente de vértices, primitivos, píxels y


subprocesos de lenguajes de sombreado de gráficos y el lenguaje C / C ++ de CUDA, cada
subproceso SM tiene su propio estado de ejecución de subprocesos y puede ejecutar una ruta
de código independiente. Los hilos simultáneos de los programas informáticos se pueden
sincronizar en una barrera con una sola instrucción SM. La creación de hilos livianos, la
programación de hilos sin sobrecarga y la sincronización de barrera rápida respaldan el
paralelismo de grano muy fino de manera eficiente.

Instrucción única, múltiples hilos. Para administrar y ejecutar cientos de subprocesos que
ejecutan varios programas diferentes de manera eficiente, el Tesla SM utiliza una nueva
arquitectura de procesador que llamamos instrucción única, múltiples hilos (SIMT). La unidad de
instrucción SMT multiproceso de SM crea, gestiona, programa y ejecuta hilos en grupos de 32
hilos paralelos llamados warps. El término urdimbre se origina en el tejido, la primera tecnología
de hilo en paralelo. La Figura 4 ilustra la programación SIMT. El tamaño de warp SIMT de 32
subprocesos paralelos proporciona eficiencia en abundantes subprocesos de píxel de grano fino
y subprocesos informáticos.

Cada SM maneja un grupo de 24 warps, con un total de 768 hilos. Los subprocesos individuales
que componen un warpe SIMT son del mismo tipo y comienzan juntos en la misma dirección de
programa, pero son libres de ramificarse y ejecutarse de forma independiente. En cada tiempo
de emisión de instrucción, la unidad de instrucción multiproceso de SIMT selecciona una
deformación que está lista para ejecutarse y emite la siguiente instrucción a los hilos activos de
dicha urdimbre. Una instrucción SIMT se transmite sincrónicamente a los hilos paralelos activos
de una urdimbre; hilos individuales pueden estar inactivos debido a una ramificación o
predicación independiente.

El SM asigna los hilos de urdimbre a los núcleos SP, y cada subproceso se ejecuta de forma
independiente con su propia dirección de instrucción y estado de registro. Un procesador SIMT
obtiene una eficacia y un rendimiento completos cuando los 32 hilos de un warp toman la misma
ruta de ejecución. Si los hilos de una urdimbre divergen a través de una rama condicional
dependiente de datos, la urdimbre ejecuta en serie cada ruta de ramificación tomada,
deshabilita los hilos que no están en esa ruta y cuando todas las rutas se completan, los hilos
vuelven a la ruta de ejecución original. El SM usa una pila de sincronización de sucursales para
administrar hilos independientes que divergen y convergen. La divergencia de ramas solo ocurre
dentro de una disformidad; diferentes warps se ejecutan independientemente
independientemente de si están ejecutando rutas de código comunes o disjuntas. Como
resultado, las GPU de arquitectura de Tesla son mucho más eficientes y flexibles en el código de
bifurcación que las GPU de generación anterior, ya que sus deformaciones de 32 hilos son
mucho más estrechas que el ancho SIMD de las GPU anteriores.

Figura 4. Programación de warp de una sola instrucción, múltiples hilos (SIMT).

La arquitectura SIMT es similar al diseño de una sola instrucción, datos múltiples (SIMD), que
aplica una instrucción a múltiples carriles de datos. La diferencia es que SIMT aplica una
instrucción a múltiples hilos independientes en paralelo, no solo múltiples carriles de datos. Una
instrucción SIMD controla un vector de múltiples carriles de datos y expone el ancho del vector
al software, mientras que una instrucción SIMT controla la ejecución y el comportamiento de
ramificación de un hilo.

A diferencia de las arquitecturas vectoriales SIMD, SIMT permite a los programadores escribir
código en paralelo de nivel de hilo para hilos independientes, así como código paralelo de datos
para hilos coordinados. Para la corrección del programa, los programadores pueden ignorar
esencialmente los atributos de ejecución de SIMT como warps; sin embargo, pueden lograr
mejoras sustanciales en el rendimiento al escribir código que rara vez requiere que los hilos en
una urdimbre diverjan. En la práctica, esto es análogo al papel de las líneas de caché en los
códigos tradicionales: los programadores pueden ignorar el tamaño de la línea de caché al
diseñar de forma correcta, pero deben considerarlo en la estructura del código al diseñar para
un rendimiento máximo. Las arquitecturas de vectores SIMD, por otro lado, requieren que el
software combine manualmente las cargas en vectores y gestione la divergencia manualmente.

Programación warp SIMT. El enfoque SIMT de programación de warps independientes es más


simple que la programación compleja de arquitecturas GPU previas. Un warp consiste en hasta
32 hilos del mismo tipo: vértice, geometría, píxel o cómputo. La unidad básica del procesamiento
del sombreador de fragmentos de píxeles es el cuadrante de 2 3 2 píxeles. El controlador SM
agrupa ocho cuadrículas de píxeles en una urdimbre de 32 hilos. De manera similar, agrupa
vértices y primitivas en urdimbres y empaqueta 32 hilos de cálculo en una urdimbre. El diseño
SIMT comparte la búsqueda de la instrucción SM y la unidad de emisión de manera eficiente a
través de 32 subprocesos, pero requiere una urdimbre completa de subprocesos activos para
una eficiencia de rendimiento completa.

Como un procesador de gráficos unificado, el SM planifica y ejecuta múltiples tipos de warp al


mismo tiempo, por ejemplo, ejecutando concurrentemente vértices y deformaciones de píxeles.
El programador SM Warp opera a la mitad de la frecuencia de reloj del procesador de 1,5 GHz.
En cada ciclo, selecciona uno de los 24 warps para ejecutar una instrucción warp SIMT, como
muestra la Figura 4. Una instrucción de warp emitida se ejecuta como dos conjuntos de 16 hilos
en cuatro ciclos de procesador. Los núcleos SP y unidades SFU ejecutan instrucciones de forma
independiente, y al emitir instrucciones entre ellos en ciclos alternos, el planificador puede
mantener ambos ocupados por completo.

La implementación de programación warp zero-overhead para una combinación dinámica de


diferentes programas warp y tipos de programa fue un problema de diseño desafiante. Un
marcador califica cada warp para cada ciclo. El programador de instrucciones prioriza todas las
urdimbres listas y selecciona la que tenga mayor prioridad para el problema. La priorización
considera el tipo de urdimbre, el tipo de instrucción y la "equidad" para todas las urdimbres que
se ejecutan en el SM.

SM instrucciones. El Tesla SM ejecuta instrucciones escalares, a diferencia de las arquitecturas


de instrucciones de vectores GPU anteriores. Los programas Shader son cada vez más largos y
más escalares, y es cada vez más difícil ocupar completamente incluso dos componentes de la
arquitectura anterior de cuatro componentes vectoriales. Las arquitecturas anteriores
empleaban empaquetamiento de vectores, combinando sub-vectores de trabajo para ganar
eficiencia, pero eso complicaba tanto el hardware de programación como el compilador. Las
instrucciones escalares son más simples y amigables con el compilador. Las instrucciones de
textura permanecen basadas en vectores, tomando un vector de coordenadas fuente y
devolviendo un vector de color filtrado.
Los compiladores de gráficos de alto nivel y de lenguaje informático generan instrucciones
intermedias, como el vector DX10 o las instrucciones escalares PTX, que luego se optimizan y
traducen a instrucciones binarias de la GPU. El optimizador expande fácilmente las instrucciones
vectoriales DX10 a múltiples instrucciones escalares de Tesla SM. Las instrucciones escalares PTX
optimizan las instrucciones escalares de Tesla SM acerca de uno a uno. PTX proporciona un ISA
de destino estable para los compiladores y proporciona compatibilidad a lo largo de varias
generaciones de GPU con arquitecturas de conjunto de instrucciones binarias en evolución.
Como los lenguajes intermedios usan registros virtuales, el optimizador analiza las dependencias
de datos y asigna registros reales. Elimina el código muerto, dobla las instrucciones juntas
cuando sea posible y optimiza la divergencia de la derivación SIMT y los puntos de convergencia.

Set de instrucciones arquitectura. El Tesla SM tiene un conjunto de instrucciones basado en


registro que incluye operaciones de textura, bits, conversión de punto flotante, transcendental,
control de flujo, memoria de carga / almacenamiento.

Las operaciones de coma flotante y entero incluyen agregar, multiplicar, agregar multiplicación,
mínimo, máximo, comparar, establecer predicado y conversiones entre números enteros y de
coma flotante. Las instrucciones de punto flotante proporcionan modificadores de operandos
fuente para la negación y el valor absoluto. Las instrucciones de funciones trascendentales
incluyen coseno, seno, exponencial binario, logaritmo binario, recíproco y raíz cuadrada
recíproca. Las instrucciones de interpolación de atributos proporcionan una generación
eficiente de atributos de píxeles. Los operadores bit a bit incluyen desplazamiento a la derecha,
operadores lógicos y movimiento. El flujo de control incluye la ramificación, la llamada, el
retorno, la trampa y la sincronización de barrera.

Las instrucciones de punto flotante y entero también pueden establecer indicadores de estado
por subproceso para cero, negativo, acarreo y desbordamiento, que el programa de subprocesos
puede usar para la bifurcación condicional.

Instrucciones de acceso a la memoria La instrucción de textura busca y filtra muestras de textura


de la memoria a través de la unidad de textura. La unidad ROP escribe salida de fragmentos de
píxeles en la memoria.

Para satisfacer las necesidades informáticas y del lenguaje C / C ++, Tesla SM implementa
instrucciones de carga / almacenamiento de memoria además de la obtención de texturas de
gráficos y la salida de píxeles. Las instrucciones de carga / almacenamiento de memoria usan el
direccionamiento de bytes enteros con aritmética de direcciones de registro más
desplazamiento para facilitar las optimizaciones de código de compilador convencionales.

Para la informática, las instrucciones de carga / almacenamiento acceden a tres espacios de


memoria de lectura / escritura:

 memoria local para datos temporales por hilo, privados (implementados en DRAM
externa);
 memoria compartida para acceso de baja latencia a datos compartidos por hilos
cooperantes en el mismo SM; y
 memoria global para datos compartidos por todos los hilos de una aplicación
informática (implementada en DRAM externa).

Las instrucciones de memoria load-global, store-global, load-shared, store-shared, load-local y


store-local acceden a la memoria global, compartida y local. Los programas informáticos utilizan
la instrucción de sincronización de barrera rápida para sincronizar los hilos dentro del SM que
se comunican entre sí a través de la memoria compartida y global. Para mejorar el ancho de
banda de la memoria y reducir la sobrecarga, las instrucciones de carga / almacenamiento
locales y globales fusionan los accesos de subprocesos paralelos individuales desde la misma
urdimbre a menos accesos de bloque de memoria. Las direcciones deben estar en el mismo
bloque y cumplir los criterios de alineación. Las solicitudes de memoria fusionadas aumentan
significativamente el rendimiento en solicitudes separadas. El gran número de subprocesos,
junto con el soporte para muchas solicitudes de carga pendientes, ayuda a cubrir la latencia de
carga y uso para la memoria local y global implementada en DRAM externa.

Las últimas GPU de arquitectura de Tesla proporcionan operaciones de memoria atómica


eficientes, que incluyen operaciones de suma entera, mínima, máxima, operadores lógicos,
intercambio y comparación y cambio. Las operaciones atómicas facilitan las reducciones
paralelas y la gestión paralela de la estructura de datos.

Procesador de transmisión El núcleo SP es el procesador de hilo primario en el SM. Realiza las


operaciones fundamentales de coma flotante, que incluyen agregar, multiplicar y multiplicar-
agregar. También implementa una amplia variedad de operaciones enteras, de comparación y
de conversión. Las operaciones de suma y multiplicación de punto flotante son compatibles con
el estándar IEEE 754 para números FP de precisión simple, incluidos valores de no-un-número
(NaN) e infinito. La unidad está totalmente canalizada y la latencia está optimizada para
equilibrar la demora y el área.

Las operaciones de agregar y multiplicar usan IEEE redondear a la más cercana, incluso como el
modo de redondeo predeterminado. La operación de suma y multiplicación realiza una
multiplicación con truncamiento, seguida de un complemento con tono-redondo-redondo-par.
El SP descarga los operandos de origen denormal a los cero y signos de inundación con signo
que producen un subdesbordamiento del rango del exponente de salida objetivo al cero con
signo conservado después del redondeo.

Unidad de función especial. La SFU admite el cálculo de las funciones trascendentales y la


interpolación de atributos planares. Un diseño tradicional de vértice o sombreador de píxeles
contiene una unidad funcional para calcular funciones trascendentales. Los píxeles también
necesitan una unidad de interpolación de atributos para calcular los valores de los atributos por
píxel en la ubicación x, y del píxel, dados los valores de los atributos en los vértices de la primitiva.

Para la evaluación funcional, usamos la interpolación cuadrática basada en aproximaciones


minimax mejoradas para aproximar las funciones recíproca, raíz cuadrada recíproca, log2x, 2x y
sin / cos. La Tabla 1 muestra la precisión de las estimaciones de la función. La unidad SFU genera
un resultado de coma flotante de 32 bits por ciclo.
La SFU también admite la interpolación de atributos para permitir la interpolación precisa de
atributos como el color, la profundidad y las coordenadas de la textura. La SFU debe interpolar
estos atributos en el espacio de pantalla (x, y) para determinar los valores de los atributos en
cada ubicación de píxel. Expresamos el valor de un atributo dado U en un plano (x, y) en
ecuaciones planas de la siguiente forma:

donde A, B y C son parámetros de interpolación asociados con cada atributo U, y W está


relacionado con la distancia del píxel respecto del espectador para la proyección en perspectiva.
El hardware de interpolación de atributos en la SFU está totalmente canalizado, y puede
interpolar cuatro muestras por ciclo.

En un programa de sombreado, la SFU puede generar atributos corregidos de perspectiva de la


siguiente manera:

 Interpolar 1 / W e invertir para formar W.


 Interpolar U / W.
 Multiplique U / W por W para formar U con perspectiva correcta.

Controlador SM. El SMC controla múltiples SM, arbitrando la unidad de textura compartida, la
ruta de carga / almacenamiento y la ruta de E / S. El SMC sirve tres cargas de trabajo de gráficos
simultáneamente: vértice, geometría y píxel. Encapsula cada uno de estos tipos de entrada en
el ancho de urdimbre, inicia el procesamiento del sombreador y desempaqueta los resultados.

Cada tipo de entrada tiene rutas de E / S independientes, pero el SMC es responsable del
equilibrio de carga entre ellas. El SMC admite el equilibrio de carga estático y dinámico en
función de las asignaciones recomendadas por el controlador, las asignaciones actuales y la
dificultad relativa de la asignación de recursos adicionales. El equilibrio de carga de las cargas de
trabajo fue uno de los problemas de diseño más desafiantes debido a su impacto en la eficiencia
general del SPA.

Unidad de textura

La unidad de textura procesa un grupo de cuatro hilos (vértice, geometría, píxel o cómputo) por
ciclo. Las fuentes de instrucciones de textura son coordenadas de textura, y las salidas son
muestras filtradas, generalmente un color de cuatro componentes (RGBA). La textura es una
unidad separada externa al SM conectado a través del SMC. El subproceso SM emisor puede
continuar la ejecución hasta que se detenga una dependencia de datos.

Cada unidad de textura tiene cuatro generadores de dirección de textura y ocho unidades de
filtro, para una tasa máxima de GeForce 8800 Ultra de 38.4 gigabilerps / s (un bilerp es una
interpolación bilineal de cuatro muestras). Cada unidad admite filtrado anisotrópico 2: 1 a
velocidad completa, así como filtrado de formato de datos de coma flotante de 16 bits y 32 bits
de rango dinámico (HDR) de alta velocidad. La unidad de textura está profundamente
canalizada. Aunque contiene un caché para capturar la localidad de filtrado, transmite éxitos
mezclados con fallas sin estancamiento.

Rasterización
Las primitivas de geometría que salen de los SM van en su orden de entrada de round-robin
original al bloque viewport / clip / setup / raster / zcull. La ventana gráfica y las unidades de clip
recortan las primitivas a la vista estándar trunco y a cualquier plano de clip de usuario habilitado.
Transforman los vértices de recorte en el espacio de la pantalla (píxel) y rechazan las primitivas
completas fuera del volumen de la vista, así como las primitivas de la parte posterior.

Las primitivas que sobreviven se dirigen a la unidad de configuración, que genera ecuaciones de
borde para el rasterizador. Las ecuaciones de los planos de los atributos también se generan
para la interpolación lineal de los atributos de los píxeles en el sombreador de píxeles. Una etapa
de fragmentación gruesa genera todos los mosaicos de píxeles que están al menos parcialmente
dentro de la primitiva.

La unidad zcull mantiene una superficie z jerárquica, rechazando las fichas de píxeles si se sabe
que están ocluidas de manera conservadora por los píxeles dibujados previamente. La tasa de
rechazo es de hasta 256 píxeles por reloj. La pantalla se subdivide en azulejos; cada TPC procesa
un subconjunto predeterminado. La dirección del mosaico de píxeles selecciona, por lo tanto, el
TPC de destino. Las fichas de píxeles que sobreviven a zcull pasan a una etapa de
finerasterización que genera información de cobertura detallada y valores de profundidad para
los píxeles.

OpenGL y Direct3D requieren que se realice una prueba de profundidad después de que el
sombreador de píxeles haya generado los valores finales de color y profundidad. Cuando es
posible, para ciertas combinaciones de estado de API, la GPU de Tesla realiza la prueba de
profundidad y la actualización antes del sombreador de fragmentos, posiblemente guardando
miles de ciclos de tiempo de procesamiento, sin violar la semántica ordenada por API.

El SMC ensambla los píxeles supervivientes en urdimbres para ser procesados por un SM que
ejecuta el sombreador de píxeles actual. Cuando el sombreado de píxeles haya finalizado, los
píxeles se probarán en profundidad si esto no se hizo antes del sombreador. El SMC luego envía
los píxeles supervivientes y los datos asociados al ROP.

Procesador de operaciones de trama


Cada ROP está emparejado con una partición de memoria específica. Los TPC alimentan datos a
los ROP a través de una red de interconexión. Los ROP manejan las pruebas de profundidad y
stencil y las actualizaciones y mezclas de colores y actualizaciones. El controlador de memoria
utiliza colores sin pérdida (hasta 8: 1) y compresión de profundidad (hasta 8: 1) para reducir el
ancho de banda. Cada ROP tiene una velocidad máxima de cuatro píxeles por reloj y admite
formatos HDR de coma flotante de punto flotante y 32 bits de 16 bits. Los ROP admiten el
procesamiento de profundidad de doble frecuencia cuando las escrituras en color están
deshabilitadas.

Cada partición de memoria tiene 64 bits de ancho y admite DDR2 de velocidad de datos doble y
protocolos GDDR3 orientados a gráficos a hasta 1 GHz, produciendo un ancho de banda de
alrededor de 16 Gbytes / s.

El soporte Antialiasing incluye hasta 163 multisampling y supersampling. Los formatos HDR son
totalmente compatibles. Ambos algoritmos admiten 1, 2, 4, 8 o 16 muestras por píxel y generan
un promedio ponderado de las muestras para producir el color de píxel final. Multisampling
ejecuta el sombreador de píxeles una vez para generar un color compartido por todas las
muestras de píxeles, mientras que el supermuestreo ejecuta el sombreador de píxeles una vez
por muestra. En ambos casos, los valores de profundidad se evalúan correctamente para cada
muestra, según sea necesario para la interpenetración correcta de primitivas.

Debido a que la multimuestreo ejecuta el sombreador de píxeles una vez por píxel (en lugar de
una vez por muestra), la multimuestreo se ha convertido en el método antialiasing más popular.
Más allá de cuatro muestras, sin embargo, el costo de almacenamiento aumenta más rápido de
lo que mejora la calidad de la imagen, especialmente con formatos HDR. Por ejemplo, una única
superficie de 1.600 3 1.200 píxeles, que almacena 16 muestras de coma flotante de 16 bits de
cuatro componentes, requiere 1.600 3 1.200 3 16 3 (64 bits de color + 32 bits de profundidad) 5
368 Mbytes.

Para la gran mayoría de los píxeles de borde, dos colores son suficientes; lo que importa es más
información de cobertura detallada. El algoritmo de antialiasing de muestreo de cobertura
(coverage-sampling antialiasing, CSAA) proporciona muestras de bajo costo por cobertura, lo
que permite escalar hacia arriba. Al computar y almacenar la cobertura booleana en hasta 16
muestras y comprimir el color y la profundidad redundante y la información de la plantilla en la
huella de memoria y el ancho de banda de cuatro u ocho muestras, se puede lograr la calidad
de antialiasing a 43 en el rendimiento de antialiasing. CSAA es compatible con las técnicas de
representación existentes, incluidos los algoritmos HDR y stencil. Los bordes definidos por la
intersección de polígonos interpenetrantes se renderizan a la calidad de conteo de muestras
almacenadas (43 u 83). La Tabla 2 resume los requisitos de almacenamiento de los tres
algoritmos.

Memoria e interconexión
El ancho del bus de datos de la memoria DRAM es de 384 pines, dispuestos en seis particiones
independientes de 64 pines cada una. Cada partición posee 1/6 del espacio de direcciones
físicas. Las unidades de partición de memoria encuestan directamente las solicitudes. Arbitran
entre cientos de solicitudes en vuelo desde las etapas paralelas de los gráficos y las tuberías de
cálculo. El arbitraje busca maximizar la eficiencia total de transferencia de DRAM, lo que
favorece la agrupación de solicitudes relacionadas por el banco de DRAM y la dirección de
lectura / escritura, al tiempo que se minimiza la latencia en la medida de lo posible. Los
controladores de memoria admiten una amplia gama de frecuencias de reloj DRAM, protocolos,
densidades de dispositivos y anchos de bus de datos.

Red de interconexión Una única unidad concentradora enruta las solicitudes a la partición
adecuada desde los solicitantes no paralelos (PCI-Express, host y comando front-end,
ensamblador de entrada y pantalla). Cada partición de memoria tiene sus propias unidades ROP
de profundidad y color, por lo que el tráfico de la memoria ROP se origina localmente. Sin
embargo, las solicitudes de textura y carga / almacenamiento pueden ocurrir entre cualquier
TPC y cualquier partición de memoria, por lo que una red de interconexión enruta solicitudes y
respuestas.

Unidad de gestión de memoria. Todos los motores de procesamiento generan direcciones en un


espacio de direcciones virtuales. Una unidad de gestión de memoria realiza una traducción
virtual a física. El hardware lee las tablas de páginas de la memoria local para responder a fallas
en nombre de una jerarquía de buffers de apartados de traducción distribuidos entre los
motores de renderizado.
Arquitectura de computación paralela
La arquitectura de cómputo paralelo escalable de Tesla permite que la matriz de procesadores
GPU sobresalga en computación de alto rendimiento, ejecutando aplicaciones informáticas de
alto rendimiento, así como aplicaciones gráficas. Las aplicaciones de rendimiento tienen varias
propiedades que las distinguen de las aplicaciones serie de la CPU:

 extenso paralelismo de datos: miles de cálculos sobre elementos de datos


independientes;
 Paralelismo de tareas modesto: los grupos de hilos ejecutan el mismo programa, y
diferentes grupos pueden ejecutar diferentes programas;
 aritmética intensiva de coma flotante;
 tolerancia a la latencia: el rendimiento es la cantidad de trabajo completado en un
tiempo dado;
 flujo de datos de transmisión: requiere un gran ancho de banda de memoria con
relativamente poca reutilización de datos;
 Los modestos hilos de sincronización entre subprocesos y gráficos de comunicación no
se comunican, y las aplicaciones informáticas paralelas requieren sincronización y
comunicación limitadas.

El rendimiento paralelo de GPU en problemas de rendimiento se ha duplicado cada 12 a 18


meses, atraído por las insaciables demandas del mercado de los juegos en 3D. Ahora, las GPU
de Tesla en computadoras portátiles, computadoras de escritorio, estaciones de trabajo y
sistemas se pueden programar en C con herramientas CUDA, usando un modelo de
programación en paralelo simple.

Descomposición del problema de datos paralelos


Para asignar un gran problema informático de manera efectiva a una arquitectura de
procesamiento altamente paralela, el programador o compilador descompone el problema en
muchos problemas pequeños que pueden resolverse en paralelo. Por ejemplo, el programador
divide una gran matriz de datos de resultados en bloques y luego divide cada bloque en
elementos, de modo que los bloques resultantes se pueden calcular independientemente en
paralelo, y los elementos dentro de cada bloque se pueden calcular cooperativamente en
paralelo. La Figura 5 muestra la descomposición de una matriz de datos de resultados en una
cuadrícula de bloques de 3 x 2, en la que cada bloque se descompone aún más en una matriz de
elementos de 5 x 3. La descomposición paralela de dos niveles se corresponde naturalmente
con la arquitectura de Tesla: los SM paralelos calculan los bloques de resultados y los
subprocesos paralelos calculan los elementos de resultado.
El programador o compilador escribe un programa que calcula una secuencia de cuadrículas de
resultados, dividiendo cada cuadrícula de resultados en bloques de resultados de grano grueso
que se computan de forma independiente en paralelo. El programa calcula cada bloque de
resultados con una matriz de subprocesos paralelos finos, dividiendo el trabajo entre
subprocesos que calculan elementos de resultado.

Matriz de hilos cooperativos o bloque de hilos


A diferencia del modelo de programación de gráficos, que ejecuta subprocesos paralelos de
sombreado de forma independiente, los modelos de programación en paralelo requieren que
los subprocesos paralelos se sincronicen, se comuniquen, compartan datos y cooperen para
calcular de manera eficiente un resultado. Para gestionar un gran número de hilos concurrentes
que pueden cooperar, la arquitectura informática de Tesla introduce el conjunto de hilos
cooperativos (CTA), denominado bloque de hilos en la terminología CUDA. Una CTA es una
matriz de subprocesos concurrentes que ejecuta el mismo programa de subprocesos y puede
cooperar para calcular un resultado.

Una CTA consta de 1 a 512 subprocesos concurrentes, y cada subproceso tiene una Id. De
subproceso único (TID), numerados del 0 al m. El programador declara la forma y las
dimensiones de CTA 1D, 2D o 3D en hilos. El TID tiene índices de una, dos o tres dimensiones.
Los hilos de una CTA pueden compartir datos en la memoria global o compartida y pueden
sincronizarse con la instrucción de barrera. Los programas de subprocesos CTA utilizan sus TID
para seleccionar el trabajo y el índice de matrices de datos compartidos. Las TID
multidimensionales pueden eliminar las operaciones de dividir y restar enteros al indexar
matrices.

Cada SM ejecuta hasta ocho CTA al mismo tiempo, dependiendo de las demandas de recursos
de CTA. El programador o compilador declara la cantidad de hilos, registros, memoria
compartida y barreras requeridas por el programa CTA. Cuando un SM tiene suficientes recursos
disponibles, el SMC crea el CTA y asigna números TID a cada hilo. El SM ejecuta los subprocesos
CTA simultáneamente como SIMT warps de 32 subprocesos paralelos.
Figura 6. Niveles de granularidad anidada: hilo (a), matriz de hilos cooperativos (b) y cuadrícula (c). Estos tienen
los niveles correspondientes de uso compartido de memoria: subprocesos locales, compartidos por CTA y global
por aplicación.

Cuadrículas de CTA
Para implementar el bloque de grano grueso y la descomposición de la cuadrícula de la Figura
5, la GPU crea CTA con números exclusivos de identificación de CTA y de cuadrícula. El
distribuidor de trabajo de cómputo equilibra dinámicamente la carga de trabajo de GPU
distribuyendo una secuencia de trabajo de CTA a SM con suficientes recursos disponibles.

Para permitir que un programa binario compilado se ejecute sin cambios en GPU grandes o
pequeñas con cualquier cantidad de procesadores SM paralelos, los CTA se ejecutan de forma
independiente y calculan bloques de resultados independientemente de otros CTA en la misma
cuadrícula. Los pasos de aplicación secuencialmente dependientes se asignan a dos cuadrículas
dependientes secuencialmente. La grilla dependiente espera a que se complete la primera grilla;
luego, las CTA de la grilla dependiente leen los bloques de resultados escritos por la primera
grilla.

Granularidad paralela
La Figura 6 muestra los niveles de granularidad paralela en el modelo de computación GPU. Los
tres niveles son

 el hilo computa los elementos de resultado seleccionados por su TID;


 CTA-calcula los bloques de resultados seleccionados por su ID de CTA;
 grid-computa muchos bloques de resultados, y las tablas secuenciales computan pasos
de aplicación secuencialmente dependientes.

Los niveles más altos de paralelismo utilizan múltiples GPU por CPU y clústeres de nodos multi-
GPU.

Compartir memoria paralela


La Figura 6 también muestra niveles de intercambio de memoria de lectura / escritura en
paralelo:

 local: cada subproceso que se ejecuta tiene una memoria local privada por subproceso
para el desbordamiento de registro, el marco de pila y las variables temporales
direccionables;
 compartido: cada CTA en ejecución tiene una memoria compartida por CTA para
acceder a los datos compartidos por hilos en la misma CTA;
 Las grillas secuenciales globales se comunican y comparten grandes conjuntos de datos
en la memoria global.

Los hilos que se comunican en una CTA utilizan la instrucción de sincronización de barrera rápida
para esperar que las escrituras en la memoria compartida o global se completen antes de leer
los datos escritos por otros hilos en la CTA. El sistema de memoria de carga / almacenamiento
utiliza un orden de memoria relajado que conserva el orden de las lecturas y escrituras en la
misma dirección desde el mismo subproceso emisor y desde el punto de vista de los subprocesos
de CTA que coordinan con la instrucción de sincronización de barrera. Las cuadrículas
dependientes secuencialmente utilizan una barrera de sincronización intergrid global entre
cuadrículas para garantizar el orden global de lectura / escritura.
Escalado transparente de la computación GPU
El paralelismo varía ampliamente en el rango de productos de GPU desarrollados para varios
segmentos del mercado. Una GPU pequeña puede tener un SM con ocho núcleos SP, mientras
que una GPU grande puede tener muchos SM que sumen cientos de núcleos SP.

La arquitectura de computación GPU escala de forma transparente el rendimiento de la


aplicación paralela con el número de núcleos SM y SP. Un programa de computación GPU se
ejecuta en cualquier tamaño de GPU sin recompilar, y es insensible a la cantidad de
multiprocesadores SM y núcleos SP. El programa no sabe ni le importa cuántos procesadores
usa.

La clave es descomponer el problema en bloques computados independientemente como se


describió anteriormente. La unidad de distribución de trabajo de cálculo de la GPU genera una
secuencia de CTA y las distribuye a los SM disponibles para calcular cada bloque independiente.
Los programas escalables no se comunican entre bloques CTA de la misma grilla; el mismo
resultado de la grilla se obtiene si los CTA se ejecutan en paralelo en muchos núcleos,
secuencialmente en un núcleo o parcialmente en paralelo en algunos núcleos.

Modo de programación CUDA


CUDA es una extensión mínima de los lenguajes de programación C y C ++. Un programador
escribe un programa en serie que llama núcleos paralelos, que pueden ser funciones simples o
programas completos. El programa CUDA ejecuta el código de serie en la CPU y ejecuta kernels
paralelos a través de un conjunto de hilos paralelos en la GPU. El programador organiza estos
hilos en una jerarquía de bloques de hilos y grillas, como se describió anteriormente. (Un bloque
de hilos CUDA es un CTA de GPU).

La Figura 7 muestra un programa CUDA que ejecuta una serie de núcleos paralelos en un sistema
de CPU-GPU heterogéneo. KernelA y KernelB se ejecutan en la GPU como cuadrículas de los
bloques de hilos nBlkA y nBlkB (CTA), que ejemplifican los hilos de nTidA y nTidB por CTA.

El compilador CUDA nvcc compila un programa C / C ++ de aplicación integrada que contiene


código de CPU en serie y código de kernel paralelo de la GPU. La API de tiempo de ejecución de
CUDA administra la GPU como un dispositivo informático que actúa como un coprocesador de
la CPU del host con su propio sistema de memoria.

El modelo de programación CUDA es similar en estilo a un modelo de software de datos


múltiples de programa único (SPMD): expresa el paralelismo explícitamente, y cada kernel se
ejecuta en un número fijo de subprocesos. Sin embargo, CUDA es más flexible que la mayoría
de las implementaciones de SPMD porque cada llamada al kernel crea dinámicamente una
nueva grilla con el número correcto de bloques de hilos y subprocesos para ese paso de la
aplicación.

CUDA extiende C / C ++ con las palabras clave especificadoras de declaración __global__ para
funciones de entrada de kernel, __device__ para variables globales y __shared__ para variables
de memoria compartida. El texto de un núcleo CUDA es simplemente una función C para un hilo
secuencial. Las variables incorporadas threadIdx. {X, y, z} y el bloque Idx. {X, y, z} proporcionan
el ID del hilo dentro de un bloque de hilos (CTA), mientras que el bloque Idx proporciona el ID
de CTA dentro de una cuadrícula. La función extendida llama a la sintaxis kernel <<<nBlocks,
nThreads>>> (args); activa una función de kernel paralelo en una grilla de nBlocks, donde cada
bloque instancia nThreads hilos concurrentes, y args son argumentos ordinarios para funcionar
kernel ().

La Figura 8 muestra un ejemplo de programa serie C y un programa CUDA C correspondiente. El


programa serie C usa dos bucles anidados para iterar sobre cada índice de matriz y calcular c
[idx] = a [idx] + b [idx] en cada disparo. El programa paralelo CUDA C no tiene bucles. Utiliza
subprocesos paralelos para calcular los mismos índices de matriz en paralelo, y cada subproceso
calcula solo una suma.

Figura 7. Secuencia del programa CUDA del kernel A seguida del kernel B en un sistema heterogéneo de CPU-GPU.

Escalabilidad y rendimiento
La arquitectura unificada de Tesla está diseñada para la escalabilidad. Variar el número de SM,
TPC, ROP, cachés y particiones de memoria proporciona la combinación adecuada para
diferentes objetivos de rendimiento y costo en los segmentos de valor, mainstream, entusiastas
y profesionales del mercado. La interconexión de enlace escalable (SLI) de NVIDIA permite que
múltiples GPU actúen juntas como una, proporcionando una mayor escalabilidad.
Figura 9. Diseño de matriz GeForce 8800 Ultra

Las aplicaciones CUDA C / C ++ que se ejecutan en las plataformas informáticas Tesla, las
estaciones de trabajo Quadro y las GPU GeForce brindan un rendimiento informático
convincente en una amplia gama de problemas, que incluyen más de 1003 aceleraciones en
modelado molecular, más de 200 Gflops en problemas con n cuerpos y real tiempo de
resonancia magnética 3D. Para los gráficos, la GPU GeForce 8800 ofrece un alto rendimiento y
calidad de imagen para los juegos más exigentes.

La Figura 9 muestra el diseño de matriz física GeForce 8800 Ultra que implementa la arquitectura
de Tesla que se muestra en la Figura 1. Los detalles de implementación incluyen

 681 millones de transistores, 470 mm2;


 TSMC 90 nm CMOS;
 128 núcleos SP en 16 SM;
 12,288 hilos del procesador;
 Velocidad de reloj del procesador de 1,5 GHz;
 pico 576 Gflops en procesadores;
 768-Mbyte GDDR3 DRAM;
 Interfaz DRAM de 384 pines;
 Reloj DRAM de 1.08 GHz;
 Ancho de banda de 104-Gbyte / s; y
 potencia típica de 150 W a 1.3 V.

La arquitectura de Tesla es la primera plataforma de supercomputación ubicua. NVIDIA ha


enviado más de 50 millones de sistemas basados en Tesla. Esta amplia disponibilidad, junto con
la programabilidad C y el entorno de desarrollo de software CUDA, permite una amplia
implementación de exigentes aplicaciones gráficas y de cómputo paralelo. Con futuros
aumentos en la densidad de transistores, la arquitectura escalará fácilmente el paralelismo del
procesador, las particiones de memoria y el rendimiento general. Un mayor número de
multiprocesadores y particiones de memoria admitirá conjuntos de datos más grandes y gráficos
e informática más completos, sin un cambio en el modelo de programación.

Continuamos investigando mejores algoritmos de programación y balanceo de carga para el


procesador unificado. Otras áreas de mejora son la escalabilidad mejorada para productos
derivados, sincronización reducida y gastos generales de comunicación para programas
informáticos, nuevas funciones gráficas, mayor ancho de banda de memoria y mayor eficiencia
energética.

Das könnte Ihnen auch gefallen