Você está na página 1de 12

Unidade de Processamento Gráfico

● Definição
● Funcionamento
● Arquitetura
● GPU vs CPU
● GPGPUs
● Aplicações

Definição

GPUs são processadores dedicados para processamento gráfico da classe SIMD


(Single Instruction Multiple Data). GPUs são desenvolvidas especificamente para
cálculos de ponto flutuante, essenciais para renderização de imagens. Suas
principais características são sua alta capacidade de processamento massivo
paralelo e sua total programabilidade e desempenho em cálculos que exigem um
volume grande de dados, resultando em um grande throughput (quantidade de
instruções executadas por segundo).

Funcionamento

Para que as imagens possam ser geradas, a GPU trabalha executando uma
sequência de etapas, que envolvem elaboração de elementos geométricos,
aplicação de cores, inserção de efeitos e assim por diante. Essas etapas recebem o
nome de ​pipeline gráfico.

O pipeline gráfico possui 5 estágios: vector processing, primitive processing,


rasterization, fragment processing, pixel operations. Iremos examinar esses estágios
enquanto a GPU os executam para processar uma objeto gráfico.

● Vector processing: A GPU recebe um conjunto de vértices do objeto do qual


se quer processar. Para o nosso exemplo, a GPU recebe um conjunto de
vértices que descreve dois triângulos sobrepostos.
● Primitive processing: Um polígono complexo é decomposto em polígonos
mais simples chamadas de primitivas. Nesse estágio ocorre o processo de
triangulação, isto é, os vértices são ligados formando triângulos e esses
triângulos são criados de tal forma que tome a forma do objeto da imagem
que se quer processar.

● Rasterization: Ocorre o processo de rasterização, ou seja, todo o objeto da


imagem é preenchido com pixel. Cada primitiva é processa
independentemente.
● Fragments processing: nesse estágio, os pixels ganham cores baseados na
cor do objeto, iluminação, sombreamento.

● Pixel Operations: Se um objeto é sobreposto por outro objeto, esse objeto


não deve aparecer na imagem final. Agora imagine um ponto de observação,
onde aparece o objeto 1 mas o objeto 2 está sendo obscurecido pelo objeto 1
da visão do observador. Cada objeto foi processado independentemente,
então realiza-se cálculos baseados na distância do observador de tal forma,
que os pixels do objeto 2 não apareçam na imagem, descartando-os. Depois
disso, a imagem processada é levada para a memória de vídeo.
As GPUs podem contar com vários recursos para a execução dessas etapas,
entre eles:

● Pixel Shader: é um programa que trabalha com a geração de efeitos com


base em pixels. Esse recurso é amplamente utilizado em imagens 3D (de
jogos, por exemplo) para gerar efeitos de iluminação, reflexo, sombreamento,
etc;
● Vertex Shader: consiste em um programa que trabalha com estruturas
formadas por vértices, lidando, portanto, como figuras geométricas. Esse
recurso é utilizado para a modelagem dos objetos a serem exibidos;
● Render Output Unit (ROP): ​basicamente, manipula os dados armazenados
na memória de vídeo para que eles se "transformem" no conjunto de pixels
que formará as imagens a serem exibidas na tela. Cabe a essas unidades a
aplicação de filtros, efeitos de profundidade, entre outros;
● Texture Mapping Unit (TMU): trata-se de um tipo de componente capaz de
rotacionar e redimensionar bitmaps (basicamente, imagens formadas por
conjuntos de pixels) para aplicação de uma textura sob uma superfície.

Arquitetura Fermi
A GPU foca mais em ULA’s, o que as torna bem mais eficientes em termos
de custo quando executam um software paralelo. Consequentemente, a GPU é
construída para aplicações com demandas como cálculos paralelos grandes com
mais ênfase no throughput que na latência.

As GPUs da NVIDIA são divididas em:

● Streaming processing (SM): responsável por executar os blocos de


threads entregues a GPU.
● GigaThreadEngine: responsável por enviar os blocos de threads às
dezenas de SMs.

Uma SM possui:
● Dois Warps Schedules: a dual Warp Scheduler recebe um conjunto de
32 threads chamadas de warps, seleciona uma instrução de cada
Warp.

● Duas unidades Dispatch Unit: responsável por enviar as intrunções


para as dezenas de unidades de execução da SM.

● Load/Store: carrega ou armazena o endereço das threads e carrega


ou armazena o dado entre a cache e a shared memory.
● Special Function Unit (SFU): responsável por realizar cálculos
transcendentais, como seno, cosseno, tangente.

● Duas colunas com 16 núcleos CUDA.


● Cada Núcleo possui uma ALU e uma FPU.

● Possui uma cache L1 por SM.

● Registradores: cada thread tem acesso somente ao seu registrador;

● L1 + Shared Memory: utiliza caches para threads individuais;

● Local Memory: utilizada para armazenar “spilled registers”. Um “spill


register” ocorre quando um bloco de thread requer mais espaço nos
registradores do que o disponível na SM.

CPU vs GPU

Uma CPU possui geralmente


uma quantidade baixa de
núcleos quando comparada a
uma GPU. Uma GPU pode ter
centenas de núcleos com
cada um possuindo uma ALU
para inteiros e para números
em ponto flutuante com
operações em pipeline.

Uma CPU genérica moderna é


construída utilizando camadas de cache para reduzir a latência do acesso à
memória. Cada núcleo possui uma cache L1 para dados e uma cache L1 para
instruções, auxiliadas por uma outra cache L2. Há ainda um terceiro nível de cache,
a cache L3 que é compartilhada por todos os núcleos da CPU. Quando os dados
não estão nas caches este é trazido da memória.
Uma GPU é constituída de vários Processors Cluster (PC) cada um possuindo
várias unidades chamada de Streaming Muitiprocessors (SM). Cada (SM) é
composto de vários blocos onde cada um acomoda uma Cache de instruções L1,
que por sua vez é compartilhada pelas dezenas de núcleos (também chamadas de
Cuda) que compõe um bloco. Todos os SM compartilham a mesma cache L2.

Uma GPU possui bem menos caches


se comparado com uma CPU. Uma
GPU não se preocupa com latência de
acesso à memória, ou seja, o tempo
gasto para recuperar um dado da
memória e sim com a quantidade de
trabalho que é realizada
paralelamente. Uma GPU é projetada
para computação paralela de dados.

GPGPUs

A Unidade de Processamento Gráfico de Propósito Geral ou GPGPU (General


Purpose Graphics Processing Unit) utiliza a ​GPU (graphics processing unit) para
além de renderização gráfica tais como: ​processamento de imagem​, ​visão
computacional​, ​inteligência artificial​, ​cálculo numérico dentre outras aplicações. Ou
seja, é a utilização da GPU para realizar a computação em aplicações que antes
eram tratada pela CPU(Unidade Central de Processamento).

A NVIDIA apresentou a Compute Unified Device Architecture (CUDA) em


2006, trata-se de uma plataforma de computação paralela e modelo de
programação que disponibiliza um aumento significativo de desempenho ao
aproveitar o poder da GPU. Ao fornecer abstrações simples com respeito à
organização hierárquica de threads, memória e sincronização, o modelo de
programação CUDA permite aos programadores escreverem programas escaláveis
sem a necessidade de aprender a multiplicidade de novos componentes de
programação.

Alguns modelos de GPUs da NVidia:


● G80: ​Introduzida em novembro de 2006. A GeForce 8800 foi a primeira GPU
com suporte a linguagem C, introduzindo a tecnologia CUDA. A placa gráfica
possui unificada com 128 CUDA cores, distribuídos entre 8 SMs.
● Fermi: ​Lançada em abril de 2010, esta arquitetura trouxe suporte para novas
instruções para programas em C++, como alocação dinâmica de objeto e
tratamento de exceções em operações de try e catch. Cada SM de um
processador Fermi possui 32 CUDA cores. Até 16 operações de precisão
dupla por SM podem ser executadas em cada ciclo de clock.
● Kepler: ​Lançada em 2012, a mais nova arquitetura da NVIDIA introduziu um
novo modelo de SM, chamado de SMX, que possui 192 CUDA cores,
totalizando 1536 cores no chip. A alteração da arquitetura foi a principal
responsável pela maior redução no consumo de energia.

Aplicações

● Computação Acelerada por GPU: ​Computação com aceleração de GPU é a


utilização de uma GPU em conjunto com uma CPU para acelerar aplicativos
científicos, de análise, de consumidor, de engenharia e corporativos.
Basicamente o que faz a GPU, é receber da aplicação o processamento que
requer maior uso intensivo de computação. A GPU recebe uma parte da
aplicação, enquanto a CPU recebe o restante.
● Deep Learning: ​Arquiteturas de Deep Learning geralmente são complexas e
necessitam de muitos dados para seu treinamento. Dessa forma, é inevitável
a dependência de muito poder computacional para aplicar essas técnicas. As
GPUs se destacam em cargas de trabalho paralelas e aceleram as redes
neurais em até 10 a 20 vezes.
● Carros Autônomos: ​Praticamente todo carro autônomo ou semi autônomo
em desenvolvimento hoje precisa de alguma plataforma computacional criada
em torno de GPUs, como a NVIDIA que lançou a sua linha de placas​ Drive
PX​, que permitem a condução automatizada em vias expressas e
mapeamento em HD, permite que os veículos usem redes neurais para
processar dados de várias câmeras e sensores, pode compreender em
tempo real o que está ocorrendo em volta do veículo e traçar uma rota segura
e pode realizar 24 trilhões de operações de aprendizagem profunda por
segundo.

● Medicina: ​Para processar gigabytes de dados gerados dinamicamente a


cada segundo para uso por profissionais da área médica na prestação de
serviços de saúde aos pacientes, por exemplo detectar câncer de mama,
sequenciamento e análise genômica com computação acelerada e
inteligente, ​a modelagem molecular permite​ usar uma ​unidade de
processamento​ gráfico para simulações moleculares e cálculos de ​química
quântica​ e simulações de ​mecânica molecular​.
● Realidade Virtual e Jogos: ​Na CES 2019, foi anunciada a nova placa da
NVIDIA, a GeForce RTX 2060, Equipada com a arquitetura NVIDIA Turing, a
GeForce RTX 2060 conta com recursos de Inteligência Artificial e Ray
Tracing em tempo real, uma tecnologia usada na renderização de gráficos 3D
para simular o comportamento físico da luz. A RTX 2060 vem equipada com
6 GB de memória DDR6 e até 52 teraflops de performance em deep learning.
● Mineração​: GPUs foram feitas para ter alto paralelismo e podem computar
múltiplos hashes ao mesmo tempo, já que não é nada mais é do que resolver
equações matemáticas repetidamente, isso faz com que as GPUs se
encaixem perfeitamente na tarefa de mineração. A placa AMD Radeon
RX580 pode computar até 29 mh/s, o que significa 29 milhões de hashes por
segundo.
Referências

https://www.infowester.com/placavideo.php

https://www.tecmundo.com.br/produto/123327-gpu-so-games-conheca-outras-aplica
coes-elas-essenciais.htm

http://www.cienciaedados.com/gpu-e-deep-learning/

http://www.ic.unicamp.br/~ducatte/mo401/1s2012/T2/G02-001963-023169-085937-t
2.pdf

https://developer.nvidia.com/Clara-Genomics

https://www.nvidia.com.br/object/drive-px-br.html

https://blogs.vmware.com/vsphere/2019/03/exploring-the-gpu-architecture-and-why-
we-need-it.html

https://iq.opengenus.org/basic-graphics-processing-unit-gpu-design-concepts/

https://en.m.wikipedia.org/wiki/Fermi_(microarchitecture)

https://blog.pantuza.com/artigos/o-que-sao-e-como-funcionam-as-threads

Você também pode gostar