# Tesla (microarquitetura)

Tesla é o codinome de uma microarquitetura de GPU desenvolvida pela Nvidia, e lançada em 2006, como sucessora da microarquitetura Curie. Foi nomeado em homenagem ao engenheiro elétrico pioneiro Nikola Tesla. Como a primeira microarquitetura da Nvidia a implementar shaders unificados, ela foi usada nas séries GeForce 8, GeForce 9, GeForce 100, GeForce 200 e GeForce 300 de GPUs fabricadas coletivamente em 90 nm, 80 nm, 65 nm, 55 nm, e 40 nm. Também estava na GeForce 405 e nos módulos de computação Quadro FX, Quadro x000, Quadro NVS e Nvidia Tesla.
Tesla substituiu as antigas microarquiteturas de pipeline fixo, representadas na época da introdução pela série GeForce 7. Ele competiu diretamente com a primeira microarquitetura de shader unificada da AMD chamada TeraScale, um desenvolvimento do trabalho da ATI no Xbox 360 que usava um design semelhante. Tesla foi seguido por Fermi.
Foi sucedida pela microarquitetura Fermi.

## Visão geral

Tesla é a primeira microarquitetura da Nvidia a implementar o modelo de shader unificado. O driver suporta a arquitetura Direct3D 10 Shader Model 4.0 / OpenGL 2.1 (drivers posteriores têm suporte para OpenGL 3.3). O design é uma grande mudança para a NVIDIA na funcionalidade e capacidade da GPU, sendo a mudança mais óbvia a mudanças das unidades funcionais separadas (pixel shaders, vertex shaders) nas GPUs anteriores para uma coleção homogênea de processadores de ponto flutuante universais (chamados de "processadores de fluxo"), que pode executar um conjunto mais universal de tarefas.
A arquitetura de shader unificada da GeForce 8 consiste em vários processadores de fluxo. Ao contrário da abordagem de processamento vetorial adotada com unidades de shader mais antigas, cada SP é escalar e, portanto, pode operar apenas em um componente por vez. Isso os torna menos complexos de construir, ao mesmo tempo que são bastante flexíveis e universais. As unidades de shader escalar também têm a vantagem de serem mais eficientes em vários casos, em comparação com as unidades de shader vetoriais da geração anterior, que dependem de combinação e ordenação de instruções ideais para atingir o rendimento. O menor rendimento máximo desses processadores escalares é compensado pela eficiência e pela execução deles em alta velocidade de clock (tornada possível por sua simplicidade). A GeForce 8 executa as diversas partes de seu núcleo em diferentes velocidades de clock (domínios de clock), semelhante à operação das GPUs anteriores da Série GeForce 7. Por exemplo, os processadores stream da GeForce 8800 GTX operam a uma freqüência de 1,35 GHz enquanto o restante do chip opera a 575 MHz.
A GeForce 8 executa uma filtragem de textura significativamente melhor do que seus predecessores, que usavam várias otimizações e truques visuais para acelerar a renderização sem prejudicar a qualidade da filtragem. A linha GeForce 8 renderiza corretamente um algoritmo de filtragem anisotrópica independente de ângulo junto com completa filtragem de textura trilinear. O chip G80, embora não seja seu irmão menor, está equipado com muito mais capacidade aritmética de filtragem de textura do que a série GeForce 7. Isso permite filtragem de alta qualidade com um impacto de desempenho muito menor do que anteriormente.
A NVIDIA também introduziu novos métodos de anti-aliasing de borda poligonal, incluindo a capacidade dos ROPs da GPU de executar anti-aliasing multisample (MSAA) e iluminação HDR ao mesmo tempo, corrigindo várias limitações das gerações anteriores. A GeForce 8 pode executar MSAA com formatos de textura FP16 e FP32. GeForce 8 suporta renderização HDR de 128 bits, um aumento em relação ao suporte de 64 bits das placas anteriores. A nova tecnologia anti-aliasing do chip, chamada amostragem de cobertura AA (CSAA), usa Z, cor e informações de cobertura para determinar a cor final do pixel. Esta técnica de otimização de cores permite que CSAA 16X pareça nítido e nítido.

## Desempenho

O alegado poder de processamento teórico de precisão única para placas baseados em Tesla fornecido em FLOPS pode ser difícil de alcançar em cargas de trabalho do mundo real.
No G80/G90/GT200, cada Streaming Multiprocessor (SM) contém 8 processadores Shader (SP, ou Unified Shader, ou CUDA Core) e 2 unidades de função especial (SFU). Cada SP pode realizar até duas operações de precisão simples por clock: 1 Multiplicação e 1 Soma, usando uma única instrução MAD. Cada SFU pode realizar até quatro operações por clock: quatro instruções MUL (Multiplicação). Portanto, um SM como um todo pode executar 8 MADs (16 operações) e 8 MULs (8 operações) por clock, ou 24 operações por clock, o que é (relativamente falando) 3 vezes o número de SPs. Portanto, para calcular o desempenho teórico MAD+MUL de dupla emissão em operações de ponto flutuante por segundo [FLOPS$_{sp+sfu}$, GFLOPS] de uma placa gráfica com contagem de SP [n] e frequencia de shader [f, GHz], a fórmula é: FLOPS$_{sp+sfu}$ = 3 × n × f.
No entanto, aproveitar o desempenho de dois problemas como MAD+MUL é problemático:
* A emissão dupla do MUL não está disponível no modo gráfico no G80/G90, embora tenha sido muito melhorado no GT200.
* Nem todas as combinações de instruções como MAD+MUL podem ser executadas em paralelo no SP e no SFU, porque o SFU é bastante especializado, pois só pode lidar com um subconjunto específico de instruções: multiplicação de ponto flutuante de 32 bits, funções transcendentais, interpolação para parâmetro mistura, recíproca, raiz quadrada recíproca, seno, cosseno, etc.
* O SFU pode ficar ocupado por muitos ciclos ao executar essas instruções, caso em que fica indisponível para instruções MUL de emissão dupla.
Por estas razões, para estimar o desempenho de cargas de trabalho do mundo real, pode ser mais útil ignorar o SFU e assumir apenas 1 MAD (2 operações) por SP por ciclo. Neste caso a fórmula para calcular o desempenho teórico em operações de ponto flutuante por segundo passa a ser:FLOPS$_{sp}$ = 2 × n × f.
O poder teórico de processamento de precisão dupla de uma GPU Tesla é 1/8 do desempenho de precisão única no GT200; não há suporte de precisão dupla no G8x e G9x.

## Chips

* G80
* G84
* G86
* G92
* G92B
* G94
* G94B
* G96
* G96B
* G96C
* G98
* C77
* C78
* C79
* C7A
* C7A-ION
* ION
* GT200
* GT200B
* GT215
* GT216
* GT218
* C87
* C89