Como meu driver de tela lida com tantos dados?


61

Acabei de fazer alguns cálculos rápidos:

No meu MacBook, tenho uma resolução de 2560x1440 multiplicada por 24 bits para cores, obtendo 11,05 MB para uma única imagem ou 663 MB por segundo a 60 qps .

Acho que há alguma compressão, mas, por exemplo, quando me movo com três dedos sobre o touchpad, isso é aleatório, o que acontece a seguir na tela e quase todos os pixels mudam. O mesmo que com quase todas as outras interações.

Por favor, explique se meus cálculos estão incorretos e como esses dados são transportados da minha placa de vídeo para a minha tela? Qual a largura dos barramentos entre minha placa de vídeo e minha tela? Talvez explique em poucas palavras como um monitor armazena pixels? Registros de turno? Cache?


7
"Talvez explique em poucas palavras como um monitor armazena pixels?" Na verdade, o monitor não armazena os dados de pixel, tudo isso é tratado pela RAM na placa gráfica (ou RAM do sistema para gráficos integrados). A RAM possui facilmente vários GB / s de largura de banda. Os quadros são enviados para a tela seguindo um protocolo, para que os dados estejam disponíveis conforme necessário para a exibição.
ks0ze

3
Por que você acha que há compressão? O que você acha que acontece quando os dados não são compactáveis? Você acha que a tela fica para trás?
Mehrdad

3
@Aresloom: Ah, entendo. A compressão com perdas seria uma maneira, sim. :) Eu pensei que você estava pensando em sem perdas!
Mehrdad

2
@ ks0ze Alguns painéis mais recentes armazenam a última tela que foram enviados. Armazená-lo em cache usa menos energia do que a GPU bombeando uma imagem estática 60 vezes por segundo. Anandtech.com/show/7208/understanding-panel-self-refresh
Dan Neely

2
Os monitores de laptop modernos ainda usam LVDS? Há meia dúzia de anos atrás, as empresas de GPU planejavam eliminá-lo ao mesmo tempo que o VGA (que passou da geração atual de saída nativa de GPUs) em favor da porta de exibição incorporada.
Dan Neely

Respostas:


69

Seus cálculos estão corretos em essência. Para um sinal de 1440p60Hz, você tem uma taxa de dados de 5,8Gbps depois de permitir o tempo de apagamento (borda de pixel não visível na saída da imagem).

Para HDMI / DVI, é usada uma codificação 10 / 8b, o que significa efetivamente, embora você tenha digitado 24 bits de dados em cores por pixel, na verdade 30 bits são enviados à medida que os dados são codificados e adicionadas palavras de controle de protocolo. Nenhuma compactação é feita, os dados brutos são enviados, o que significa que você precisa de 7,25 Gbps de largura de banda de dados.

Mais uma vez olhando para HDMI / DVI. Ele usa o padrão de sinalização "TDMS" para transferência de dados. O padrão HDMI V1.2 exige um máximo de 4,9 Gbps para um link único (3 linhas de dados seriais + 1 linha de relógio) ou, no caso do Dual-Link DVI, um máximo de 9,8 Gbps (6 linhas de dados seriais, eu acho) ) Portanto, há mais do que largura de banda suficiente para 1440p60 através de um DVI de link duplo, mas não através de um HDMI V1.2.

No padrão HDMI V1.3 (a maioria dos dispositivos realmente passou para a V1.4a, que é a mesma largura de banda de 1.3), a largura de banda dobrou para cerca de 10 Gbps, que suportaria 1440p60, e também é largura de banda suficiente para UHD a 30Hz (2160p30).

O DisplayPort, como outro exemplo, possui 4 fluxos de dados seriais, cada um com capacidade (na V1.1) de 2,16Gbps por fluxo (contabilizando a codificação); portanto, com um link V1.1, você pode fazer 1440p60 facilmente com todos os 4 fluxos. Eles também lançaram um novo padrão, o V1.2, que dobra para 4,32 Gbps / stream, permitindo UHD a 60Hz. Ainda existe uma versão mais recente, que eles aumentaram ainda mais para 6.4Gbps / stream .


Inicialmente, esses números parecem enormes, mas na verdade não muito quando se considera o USB 3.0. Foi lançado com uma taxa de dados de 5 Gbps em apenas um cabo (na verdade dois, um para TX, um para RX, mas discordo). O PCIe, que é usado internamente pela sua placa de vídeo hoje em dia, é de até 8 Gbps através de um único par diferencial, portanto, não é de surpreender que as interfaces de dados externas estejam atualizando.


Mas a questão permanece: como é feito? Quando você pensa em VGA, ele é composto de fios únicos para dados R, G e B, enviados em formato analógico. O analógico, como sabemos, é altamente suscetível a ruídos, e a taxa de transferência de DAC / ADCs também é limitada, de modo que limita enormemente o que você pode empurrá-los (tendo dito que você mal pode fazer 1440p60Hz sobre VGA se tiver sorte).

No entanto, com os padrões modernos, usamos padrões digitais que são muito mais imunes ao ruído (você só precisa distinguir alto ou baixo em vez de todos os valores intermediários) e também remove a necessidade de conversão entre analógico e digital.

Além disso, o advento do uso de padrões diferenciais em extremidade única ajuda significativamente, porque agora você está comparando o valor entre dois fios (diferença + ve = 1, diferença -ve = 0) em vez de comparar um único fio com algum limite. Isso significa que a atenuação é menos problemática porque afeta os dois fios igualmente e atenua até a tensão do ponto médio - o "olho" (diferença de tensão) fica menor, mas você ainda pode dizer se é + ve ou -ve mesmo se for apenas 100mV ou menos. Sinais de terminação única, uma vez que o sinal atenua, podem cair abaixo do seu limite e se tornar indistinguíveis, mesmo que ainda possua amplitude de 1V ou maior.

Ao usar um link serial em paralelo, também podemos obter taxas de dados mais rápidas, porque a inclinação deixa de ser um problema. Em um barramento paralelo, digamos 32 bits de largura, você precisa combinar perfeitamente as características de comprimento e propagação de 32 cabos para que os sinais não saiam de fase um do outro (inclinação). Em um link serial, você tem apenas um único cabo; portanto, a inclinação não pode acontecer.


TL; DR Os dados são enviados na taxa de bits total calculada (vários Gbps), sem compactação. Técnicas modernas de sinalização de links digitais serializados sobre pares diferenciais tornam isso possível.


Além disso, acho que alguns monitores HDMI usaram 2 links HDMI 1.2v para obter a imagem, dividindo efetivamente a tela em 2. Isso daria uma largura de banda combinada de essencialmente 9,8 Gbps.
Ismael Miguel

5
O @Aresloom 5GHz é o ponto em que praticamente todas as CPUs começam a derreter devido ao grande número de transistores que trocam simultaneamente e geram grandes quantidades de calor. Isso não significa que 5GHz é o relógio mais alto para tudo , tudo se resume ao calor (e qual material você usa - o silício nem sempre é o melhor). O melhor exemplo que posso pensar é em um Keysight Infinnium DSAX96204Q, no qual cada uma das quatro extremidades frontais possui um amostrador de fosfeto de índio que funciona a 80 GHz! Mas isso amostrador só tem uma dúzia de transistores nele e ele queima vários watts (CPUs modernas tem bilhões )
Sam

4
@Aresloom 340MHz seria a taxa de clock, a taxa de dados será serializada de forma que (no TDMS, por exemplo) 10 bits sejam enviados por cabo em cada ciclo de clock - para que um clock de 340MHz produza 3,4 Gbps. São apenas os cabos e o hardware (de) serialização (SERDES) na periferia dos ICs de vídeo que são executados nessas taxas de dados seriais. Após o hardware do SERDES, internamente, há um barramento paralelo novamente em execução com a freqüência mais baixa. Os blocos SERDES podem rodar muito rápido - o PCIe é de 8 Gbps por pista, portanto os blocos SERDES rodam em 4GHz (usando as duas bordas do relógio para bits - DDR).
Tom Carpenter

11
8b / 10b melhora a rejeição de erros porque é mais fácil detectar transições do que estados em sinais rápidos. Essa codificação garante que não haverá uma execução muito longa de zeros ou consecutivos.
Pjc50

11
@curiousdannii É um ciclo interessante, não é? Primeiro, começamos com o serial (por exemplo, UART), que era muito lento (digamos, 115kbps no máximo). Em seguida, fomos para barramentos paralelos como o IDE, que atingiram 66MHz a 16bit, ou seja, 1Gbps. Depois, voltamos à série porque descobrimos que podemos ir muito rápido com barramentos diferenciais. Mas agora o serial não é rápido o suficiente novamente, então seguimos com uma espécie de serial paralelo - várias faixas de barramentos seriais individuais que podem ser processados ​​são essencialmente completamente separados e, em seguida, qualquer inclinação de pista para pista é corrigida com FIFOs.
Tom Carpenter

19

Computadores modernos são surpreendentemente rápidos. As pessoas carregarão alegremente vídeos em alta definição a 30fps sem perceber que isso envolve bilhões de operações aritméticas por segundo. Os jogadores tendem a estar um pouco mais conscientes disso; um GTX 1060 fornece 4,4 TFLOPS ( trilhões de operações de ponto flutuante por segundo).

Por favor, explique se meus cálculos estão incorretos e como esses dados são transportados da minha placa de vídeo para a minha tela?

Qual a largura dos barramentos entre minha placa de vídeo e minha tela?

Outra resposta abordou a natureza de vários gigabits do HDMI, DisplayLink etc.

Talvez explique em poucas palavras como um monitor armazena pixels? Registros de turno? Cache?

O próprio display armazena, em teoria, nenhum dado de imagem.

(Alguns monitores, especialmente televisores, armazenam um quadro ou dois para aplicar o processamento de imagem. Isso aumenta a latência e é impopular entre os jogadores.)

O subsistema gráfico de um computador armazena pixels na DRAM comum. Geralmente, não redesenha tudo do processador a cada quadro, mas entrega algumas das funcionalidades a subsistemas dedicados e a um compositor . Um compositor permitirá, por exemplo, que cada janela da área de trabalho seja armazenada como um conjunto distinto de pixels, que podem ser movidos, rolados ou ampliados pelo hardware dedicado. Isso se torna bastante óbvio com a rolagem em dispositivos móveis - você pode percorrer um curto caminho até ficar sem pixels pré-computados "fora da tela" e o software precisar parar e renderizar um pouco mais os buffers do compositor.

Os jogos são redesenhados a cada quadro, e há muita literatura sobre como uma cena é construída. Isso é incorporado em um buffer de quadros na placa de vídeo que é transmitido enquanto o próximo quadro é desenhado em um buffer diferente.

A decodificação de vídeo geralmente também é fornecida para hardware dedicado, especialmente o H.264.


11

O link entre a placa de vídeo e o painel LCD é transmitido por vários pares diferenciais de alta velocidade usando a sinalização TMDS , geralmente chamada de "faixas". Normalmente, são utilizadas quatro faixas, portanto, pode-se dizer que o barramento tem 4 bits de largura. Para mais detalhes, há uma resposta stackhexchange .

Cada modelo de painel LCD geralmente é produzido com várias encarnações de interface, portanto, é preciso ter cuidado e analisar os sufixos ao tentar substituir um painel quebrado. O link digital mais moderno (HDMI 1.4) possui 10,2 Gbps, ou apenas 2,5 Gbps por faixa. Nos seus cálculos (663 MBps), totaliza 1,2 Gbps por faixa (assumindo 4 faixas), o que não é muito (por exemplo, o SATA3 tem 6 Gbps).

ADIÇÃO em painéis LCD. O LCD de matriz ativa realmente tenta armazenar a imagem do quadro (dados de pixel) em capacitores associados a "Twisted Nematic Cells" (aquele que controla a polarização do filme). O problema é que o tamanho dos limites de armazenamento analógico deve ser uma troca entre o tempo de armazenamento e a velocidade da alternância de pixels. Portanto, não pode ser ampliado, perde o potencial armazenado rapidamente e, portanto, requer atualização periódica . Cada célula de pixel é conectada a linhas de dados e endereço por meio de um transistor (elemento "ativo"), consulte este artigo da Tomshardware . O controlador-controlador LCD multiplica as linhas de dados e endereço de maneira linha por linha, mantendo assim a imagem exibida. A própria imagem é armazenada em um buffer de quadro (RAM) dentro do controlador gráfico.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.