3 Sistemas gráficos

Um sistema gráfico é um sistema computacional com capacidade de processar dados para gerar imagens em um dispositivo de exibição. Em sistemas interativos, a interação com os modelos de dados gráficos se dá através de um ou mais dispositivos de entrada. Assim, de maneira geral, um sistema gráfico é composto pelos seguintes componentes:

  1. Dispositivos de entrada: teclado e dispositivos apontadores como mouse, touch pad, touch screen, graphics tablet, trackball, joystick, gamepad, entre outros.
  2. Processadores: unidade de processamento central (CPU, central processing unit), unidade de processamento gráfico (GPU, graphics processing unit) e seus subsistemas (controladores, memórias e barramentos) necessários ao processamento dos modelos de dados e conversão em representações visuais;
  3. Dispositivos de saída: monitores e telas de LCD (liquid-crystal display), OLED (organic light-emitting diodes), CRT (cathode-ray tube) ou plasma, entre outros dispositivos de exibição.

A definição de um sistema gráfico com esses componentes é bastante ampla e pode incluir tanto as estações gráficas de alto desempenho equipadas com várias GPUs, quanto os computadores pessoais sem processador a gráficos. Pode incluir também os consoles de videogames, smartphones, smartwatches, smart TVs, GPSs, entre outros dispositivos com poder computacional suficiente para produzir saída em um dispositivo de exibição (figura 3.1).

Exemplos de sistemas gráficos.

Figura 3.1: Exemplos de sistemas gráficos.

Em sistemas gráficos atuais, o papel principal do processador gráfico é realizar a conversão de primitivas geométricas em uma imagem digital. Nos sistemas mais simples, sem aceleração de gráficos em hardware, a CPU é responsável por todo o processamento gráfico e não há distinção entre a memória da CPU e a memória de processamento gráfico.

Em sistemas com processador dedicado a gráficos (GPU), a GPU pode estar integrada com o chip da CPU (como o Intel HD Graphics ou AMD HD Graphics), ou situada em uma placa de vídeo discreta com memória dedicada. GPUs discretas podem coexistir em um mesmo sistema com GPUs integradas, em diferentes configurações.

Em sistemas de alto desempenho, várias GPUs em placas discretas podem ser combinadas para dividir a carga de processamento usando tecnologias como a SLI e NVLink da NVIDIA, e MGPU da AMD.

A saída de um sistema gráfico é um mapa de bits armazenado em uma área da memória RAM chamada de framebuffer. Esse mapa de bits corresponde a uma imagem digital pronta para ser exibida no dispositivo de exibição. O hardware gráfico atualiza continuamente o dispositivo de exibição com o conteúdo o framebuffer. A imagem mostrada em cada atualização é chamada de quadro de exibição.

A figura 3.2 mostra uma visão geral de um sistema gráfico atual com GPU dedicada em uma configuração comum em desktops. Os dados gráficos são enviados da CPU à GPU através de um barramento de alta velocidade. A GPU opera de forma assíncrona à CPU e gera a saída no framebuffer situado na memória RAM da placa gráfica.

Arquitetura de um sistema gráfico atual com placa gráfica dedicada.

Figura 3.2: Arquitetura de um sistema gráfico atual com placa gráfica dedicada.

Assim como as CPUs atualmente são compostas por vários núcleos programáveis de processamento, assim também são as GPUs atualmente, mas em uma escala muito maior. Enquanto as CPUs topo-de-linha para desktop possuem no máximo 18 núcleos, como o processador Intel Core i9-10980XE, uma GPU como a NVIDIA RTX 3080 Ti contém 10240 núcleos de processamento (chamados de CUDA cores) divididos entre 80 multiprocessadores. Por outro lado, enquanto os núcleos de uma CPU são destinados a processamento de propósito geral, os núcleos de uma GPU suportam um conjunto mais limitado de instruções, dedicado ao processamento de fluxos de dados. GPUs também podem ter núcleos para processamento ainda mais específico. Por exemplo, a mesma NVIDIA RTX 3080 Ti conta também com 320 núcleos dedicados a operações com tensores (tensor cores). Um tensor core é especializado em uma única operação: multiplicar duas matrizes 4x4 em ponto flutuante de 16 bits e acumular o resultado em uma matriz 4x4 em ponto flutuante de 16 ou 32 bits. Além disso, a RTX 3080 Ti também possui 80 núcleos dedicados a processamento de traçado de raios (RT cores).