Nvidia Streaming Multiprocessor History


No fim de semana passado, passei aprendendo programação CUDA e SIMT. Esse tempo frutífero terminou com uma aceleração de quase 700 vezes do meu "piloto de cartões de visita" [1] - de 101 segundos a 150 ms.

Uma experiência tão agradável foi uma boa desculpa para um estudo mais aprofundado do tema e evolução da arquitetura da Nvidia. Devido à enorme quantidade de documentação publicada ao longo dos anos pela equipe “verde”, consegui voltar no tempo e percorrer brevemente a incrível evolução de seus multiprocessadores de streaming.

Neste artigo, consideraremos:

Série de tecnologia de processo de cristal da geração do ano Cartão mais poderoso
===================================================== ===========================
Tesla GeForce 8 G80 90 nm 8800 GTX 2006 
2010 Fermi GeForce 400 GF100 40 nm GTX 480
2012 Kepler GeForce 600 GK104 28 nm GTX 680
Crie a sua conta Entre Compras Vender null
2016 Pascal GeForce 10 GP102 16 nm GTX 1080 Ti
Placa de vídeo GeForce 20 TU102 12 nm RTX 2080 Ti

Fim da linha


Até 2006, a arquitetura da GPU da NVidia estava correlacionada com os estágios lógicos da renderização da API [2] . A GeForce 7900 GTX, controlada pelo cristal G71, consistia em três partes envolvidas no processamento de vértices (8 blocos), gerando fragmentos (24 blocos) e combinando fragmentos (16 blocos).


Crystal G71. Preste atenção à otimização Z-Cull, que descarta um fragmento que não passaria no teste Z.

Essa correlação fez os projetistas adivinharem a localização dos gargalos do transportador para o balanceamento correto de cada uma das camadas. Com o advento de outro estágio no DirectX 10 - o shader geométrico, os engenheiros da Nvidia enfrentaram a difícil tarefa de equilibrar o cristal sem saber o quão ativamente esse estágio será usado. É hora de mudar.

Tesla



A Nvidia resolveu o problema de aumentar a complexidade com a ajuda da arquitetura Tesla "integrada", lançada em 2006.

Não havia mais nenhuma diferença entre as camadas no cristal G80. Devido à capacidade de executar vértices, fragmentos e "núcleos" geométricos, o multiprocessador de fluxo (Stream Multiprocessor, SM) substituiu todos os blocos existentes anteriormente. O balanceamento de carga foi realizado automaticamente, graças à substituição do “núcleo” realizado por cada SM, dependendo dos requisitos do transportador.

"De fato, descartamos toda a arquitetura de sombreador NV30 / NV40 e, a partir do zero, criamos uma nova, com uma nova arquitetura comum para processadores universais (SIMT), que também introduziu novas metodologias de design de processador".

John Alben (entrevista em extremetech.com)

Não sendo mais capaz de executar instruções SIMD, os "shader blocks" se transformaram em "kernels", capazes de executar uma instrução inteira ou uma instrução com float32 por ciclo. O SM recebe threads em grupos de 32 threads, chamados warp. Idealmente, todos os threads do mesmo warp executam a mesma instrução ao mesmo tempo, apenas para dados diferentes (daí o nome SIMT). A MT (Multi-Threaded Instruction Unit) está empenhada em ativar / desativar threads no warp se o ponteiro de instruções (Instruction Pointer, IP) convergir / rejeitar.

Duas SFUs ajudam a executar cálculos matemáticos complexos, como raiz quadrada inversa, sin, cos, exp e rcp. Esses blocos também são capazes de executar uma instrução por ciclo, mas como existem apenas dois deles, a velocidade do warp é dividida em quatro. Não há suporte de hardware para o float64, os cálculos são executados programaticamente, o que afeta bastante a velocidade de execução.

O SM realiza seu potencial máximo quando é capaz de ocultar as latências de memória devido à presença constante de warp s destacáveis, mas também quando o fluxo no warp não se desvia (a lógica de controle mantém o mesmo caminho de execução das instruções). Os estados do fluxo são armazenados em arquivos de registro de 4 kilobytes (arquivo de registro, RF). Os encadeamentos que ocupam muito espaço na pilha reduzem o número de encadeamentos possíveis que podem ser executados ao mesmo tempo, enquanto reduzem o desempenho.

O cristal principal da geração Tesla foi o G80 de 90 nm introduzido na GeForce 8800 GTX. Duas SMs são combinadas em um TPC (Texture Processor Cluster) junto com uma unidade de textura e um cache Tex L1. Foi prometido que o G80 com 8 TPC e 128 núcleos gera 345,6 gigaflops [3]. O cartão 8800 GTX era extremamente popular ao mesmo tempo, recebeu críticas maravilhosas e se apaixonou por aqueles que podiam pagar. Foi um produto tão excelente que, treze meses após o seu lançamento, permaneceu uma das GPUs mais rápidas do mercado.


G80 instalado no 8800 GTX. Render Output Units (ROP) faz a suavização.

Juntamente com a Tesla, a Nvidia introduziu a linguagem de programação C para Compute Unified Device Architecture (CUDA), um superconjunto da linguagem C99. Os entusiastas da GPGPU, que receberam a alternativa de enganar a GPU com texturas e shaders GLSL, gostaram disso.

Embora eu fale principalmente sobre SM nesta seção, era apenas metade do sistema. No SM, é necessário transferir instruções e dados armazenados na memória da GPU. Para evitar o tempo de inatividade, as GPUs não tentam minimizar as transferências de memória usando caches grandes e prevendo o desempenho da CPU. As GPUs aproveitam a latência, saturando o barramento de memória para atender às necessidades de E / S de milhares de threads. Para isso, um chip (por exemplo, G80) obtém alta largura de banda de memória usando seis barramentos de memória DRAM de dois lados.


As GPUs aproveitam as latências de memória, enquanto as ocultam com um enorme cache e lógica de previsão.

Fermi



Tesla foi uma jogada arriscada que provou ser muito bem-sucedida. O sucesso foi tão grande que se tornou a base da GPU NVidia pelas próximas duas décadas.

« , , (Fermi , Maxwell ), , G80, [Pascal]».

( extremetech.com)

Em 2010, a Nvidia lançou o GF100, com base na nova arquitetura Fermi. Os interiores de seu chip mais recente são descritos em detalhes na documentação técnica Fermi [4] .

O modelo de execução ainda é baseado no warp de 32 threads enviados para o SM. A NVidia conseguiu dobrar / quadruplicar todos os indicadores apenas graças à tecnologia de processo de 40 nanômetros. Graças a duas matrizes de 16 núcleos CUDA, a SM agora conseguiu enviar simultaneamente dois semi-warp (16 threads cada). Apesar do fato de que cada núcleo executava uma instrução por ciclo de clock, o SM era essencialmente capaz de excluir uma instrução de distorção por ciclo de clock (quatro vezes mais que a arquitetura Tesla SM).

O número de SFUs também aumentou, mas não tanto - a capacidade apenas dobrou. Pode-se concluir que instruções deste tipo não foram usadas muito ativamente.

Há suporte de semi-hardware para float64, que combina operações executadas por dois núcleos CUDA. Graças à ALU de 32 bits (na Tesla era de 24 bits), o GF100 pode executar a multiplicação de números inteiros em um ciclo e, devido à transição do IEEE 754-1985 para o IEEE 754-2008, aumentou a precisão ao trabalhar com o pipeline float32 usando o Fused Multiply -Adicione (FMA) (mais preciso do que o usado no Tesla MAD).

Do ponto de vista da programação, o sistema de memória integrado da Fermi tornou possível complementar o CUDA C com recursos de C ++, como um objeto, métodos virtuais e exceções.

Devido ao fato de que os blocos de textura agora se tornaram SM, o conceito de TPC foi abandonado. Foi substituído por clusters de Processador de Gráficos (GPC), cada um com quatro SMs. Por último, mas não menos importante, o SM agora possui o Polymorph Engine, que trata de obter vértices, transformar a viewport e o mosaico. O carro-chefe GeForce GTX 480 baseado no GF100 foi anunciado como contendo 512 núcleos e capaz de fornecer 1.345 gigaflops [5] .


GF100 instalado na GeForce GTX 480. Observe os seis controladores de memória que atendem ao GPC.

Kepler



Em 2012, a Nvidia lançou a arquitetura Kepler, em homenagem a um astrólogo, mais conhecido por descobrir as leis do movimento planetário. Como sempre, a documentação técnica GK104 [6] nos permitiu olhar para dentro .

Na Kepler, a Nvidia melhorou significativamente a eficiência energética do chip, diminuindo a velocidade do relógio e combinando a frequência do núcleo com a frequência do cartão (anteriormente sua frequência era duplicada).

Tais mudanças deveriam ter levado a uma diminuição da produtividade. No entanto, graças à metade da tecnologia do processo (28 nanômetros) e à substituição de um controlador de hardware por um software, a Nvidia conseguiu não apenas colocar mais SM no chip, mas também melhorar seu design.

O SMX (Next Generation Streaming Multiprocessor) é um monstro, quase todos cujos indicadores foram duplicados ou triplicaram.

Graças a quatro expedidores de urdidura capazes de processar uma urdidura inteira em um ciclo de clock (Fermi só processava metade da urdidura), o SMX agora continha 196 núcleos. Cada despachante tinha despacho duplo, o que permitia executar a segunda instrução em warp se fosse independente da instrução executável atual. O agendamento duplo nem sempre foi possível porque uma coluna de 32 núcleos era comum a duas operações de agendamento.

Esse esquema complicou a lógica de agendamento (voltaremos a isso mais tarde), mas, graças à execução de até seis instruções warp por ciclo, o SMX forneceu desempenho dobrado em comparação com a arquitetura Fermi SM.

Alegou-se que o carro-chefe NVIDIA GeForce GTX 680 com um cristal GK104 e oito SMX possui 1536 núcleos, atingindo 3.250 gigaflops [7]. Os elementos do cristal tornaram-se tão complexos que eu tive que remover todas as assinaturas do diagrama.


GK104 instalado na GeForce GTX 680.

Preste atenção aos subsistemas de memória completamente redesenhados, trabalhando com uma frequência impressionante de 6 GHz. Eles permitiram reduzir o número de controladores de memória de seis para quatro.

Maxwell


Em 2014, a Nvidia lançou a GPU da décima geração, chamada Maxwell. Conforme declarado na documentação técnica GM107 [8] , o lema da primeira geração da arquitetura era "Máxima eficiência energética e desempenho extraordinário para cada watt consumido". As placas foram posicionadas para "ambientes com pouca energia, como laptops e PCs com fator de forma pequeno (SFF)".

A decisão mais importante foi abandonar a estrutura do Kepler com o número de núcleos CUDA no SM, o que não é uma potência de dois: alguns kernels se tornaram comuns e voltaram ao trabalho no modo half warp. Pela primeira vez na história da arquitetura, o SMM tinha menos núcleos que seu antecessor: “apenas” 128 núcleos.

Combinar o número de núcleos e o tamanho da urdidura melhorou a segmentação de cristal, resultando em economia de espaço e energia.


Uma SMM de 2014 tinha tantos núcleos (128) quanto toda a GTX 8800 em 2006.

A segunda geração do Maxwell (descrita na documentação técnica GM200 [9] ) aumentou significativamente a produtividade, mantendo a eficiência energética da primeira geração.

A tecnologia do processo permaneceu em 28 nanômetros, então os engenheiros da Nvidia não puderam recorrer à simples miniaturização para aumentar a produtividade. No entanto, uma diminuição no número de núcleos SMM reduziu seu tamanho, devido ao qual mais SMMs poderiam ser colocadas no chip. Comparado ao Kepler, a segunda geração do Maxwell dobrou o número de SMMs, enquanto aumentava sua área de cristal em apenas 25%.

Na lista de aprimoramentos, também é possível encontrar uma lógica de despacho simplificada, que permitiu reduzir o número de redundância redundante de despacho e o atraso dos cálculos, o que garantiu um aumento na otimização do uso do warp. Além disso, a frequência da memória foi aumentada em 15%.

O estudo do diagrama de blocos Maxwell GM200 já está começando a forçar seus olhos. Mas ainda o examinamos cuidadosamente. A emblemática placa NVIDIA GeForce GTX 980 Ti com um cristal GM200 e 24 SMM prometeu 3072 núcleos e 6.060 gigaflops [10] .


GM200 instalado na GeForce GTX 980 Ti.

Pascal


Em 2016, a Nvidia apresentou o Pascal. A documentação técnica GP104 [11] deixa uma sensação de déjà vu porque o Pascal SM se parece exatamente com o Maxwell SMM. A falta de mudanças no SM não estagnou o desempenho, porque a tecnologia de processo de 16 nanômetros nos permitiu colocar mais SMs e dobrar o número de gigaflops novamente.

Entre outras grandes melhorias, estava um sistema de memória baseado no novo GDDR5X. A interface de memória de 256 bits, graças a oito controladores de memória, forneceu velocidades de transferência de 10 gigaflops, aumentando a largura de banda da memória em 43% e reduzindo o tempo de inatividade dos warp s.

O carro-chefe da NVIDIA GeForce GTX 1080 Ti com um chip GP102 e 28 TSM prometeu 3584 núcleos e 11.340 gigaflops [12] .


GP104 instalado na GeForce GTX 1080.

Turing


Com o lançamento do Turing em 2018, a Nvidia deu o seu "maior passo arquitetônico em dez anos" [13] . No Turing SM, não apenas os núcleos tensores especializados com inteligência artificial apareceram, mas também os núcleos para traçado de raios (rautracing, RT). Essa estrutura fragmentada me lembra a arquitetura em camadas que existia antes de Tesla, e isso prova mais uma vez que a história adora repetição.


Além dos novos núcleos, três características importantes apareceram em Turing. Primeiro, o kernel CUDA agora se tornou superescalar, o que permite a execução paralela de instruções com números inteiros e números de ponto flutuante. Se você encontrar 1996, isso poderá lembrá-lo da arquitetura "inovadora" da Intel.

Em segundo lugar, o novo subsistema de memória no GDDR6X, suportado por 16 controladores, agora é capaz de fornecer 14 gigaflops.

Em terceiro lugar, os fluxos agora não possuem ponteiros de instruções comuns (IP) no warp. Graças ao agendamento independente de threads em Volta, cada thread tem seu próprio IP. Como resultado disso, as SMs podem configurar de maneira mais flexível os fluxos de despacho em warp sem a necessidade de convergência o mais rápido possível.

O carro-chefe da NVIDIA GeForce GTX 2080 Ti com cristais TU102 e 68 TSM possui 4352 e atinge 13 45 gigaflops [14] . Não desenhei um diagrama de blocos, porque ele pareceria uma mancha verde borrada.

O que nos espera a seguir


Segundo rumores, a próxima arquitetura, com o codinome Ampere, será anunciada em 2020. Como a Intel provou com Ice Lake que ainda havia potencial de miniaturização usando a tecnologia de processo de 7 nanômetros, quase não há dúvida de que a Nvidia a usa para reduzir ainda mais a SM e dobrar seu desempenho.


Teraflops / s para cada chip / placa Nvidia (fonte de dados: techpowerup.com).

Será interessante ver como a Nvidia continua a evolução da idéia de cristais com três tipos de núcleos que executam tarefas diferentes. Veremos cristais, todo o estado dos núcleos tensores ou núcleos RT? Curioso.

Materiais de referência


[1] Fonte: Revisitando o cartão de visita Raytracer
[2] Fonte: Fermi: a primeira arquitetura completa de computação em GPU
[3] Fonte: NVIDIA GeForce 8800 GTX (techpowerup.com)
[4] Fonte: white paper Fermi (GF100)
[5] Fonte: NVIDIA GeForce GTX 480
[6] Fonte: white paper Kepler (GK104)
[7] Fonte: NVIDIA GeForce GTX 680
[8] Fonte: white paper da Maxwell Gen1 (GM107)
[9] Fonte: white paper da Maxwell Gen2 (GM200)
[10] Fonte: NVIDIA GeForce GTX 980 Ti
[11] Fonte: white paper Pascal (GP102)
[12] Fonte:NVIDIA GeForce GTX 1080 Ti
[13] Fonte: white paper Turing (TU102)
[14] Fonte: NVIDIA GeForce GTX 2080 Ti

All Articles