Como a CPU se comunica com a GPU antes do carregamento dos drivers? [duplicado]

24

Pelo que entendi, as GPUs têm seus próprios conjuntos de instruções, cujas instruções são geradas pelos drivers gráficos. As instruções da GPU são então enviadas para a GPU. Então, como funciona a comunicação gráfica antes do carregamento dos drivers? Existem instruções básicas que as GPUs devem implementar no mínimo para garantir que o computador possa executar tarefas básicas de exibição?

VortixDev
fonte

Respostas:

34

"Existem algumas instruções básicas ...?" Sim, exatamente. Todas as GPUs precisam implementar uma de várias interfaces simples - elas são muito primitivas para serem chamadas de "conjuntos de instruções" - com o firmware da plataforma ("BIOS" ou "UEFI") e os drivers incluídos no sistema operacional que sabem conversar com . A escolha usual de "interface simples" atualmente é "VGA" ("Video Graphics Array"), a interface em nível de registro originalmente definida para as placas de vídeo desse padrão. (Agora com mais de 30 anos!)

Por exemplo, se o Gerenciador de dispositivos em um sistema Windows identifica a placa de vídeo como "Microsoft Basic Video Adapter", o sistema operacional não conseguiu encontrar um driver específico para a placa e carregou o driver compatível com VGA.

Bem, tecnicamente, o Windows sempre carrega esse driver (para que ele possa exibir, por exemplo, as telas de progresso da inicialização), e (bastante tarde na inicialização) identifica e carrega o driver "real" da sua placa gráfica.

O padrão VGA suporta apenas alguns modos gráficos de baixa resolução e modos de texto e não envolve o que eu chamaria de "programas em execução" ou mesmo "instruções" na GPU. Em essência, o firmware do sistema ou o "driver de vídeo básico" apenas o coloca no modo desejado e depois grava bits em um bitmap; os bits no bitmap correspondem diretamente aos pixels na tela. Qualquer aritmética que precise ser feita para desenhar linhas ou curvas é feita na CPU. Que é uma maneira muito lenta e de baixo nível para fazer com que as coisas apareçam na tela. Mas é suficiente para exibições e interações simples com o firmware, para instalações de SO e telas iniciais de progresso da inicialização, etc.

Wikipedia: Matriz de gráficos de vídeo

Jamie Hanrahan
fonte
1
A situação completa é complicada. As primeiras placas "VGA" eram realmente limitadas. Por um longo tempo, o Windows NT exigiu suporte para 800x600, mas sim, apenas 16 cores. Parecia bastante terrível! Veja o artigo da Wikipedia que eu vinculei.
Jamie Hanrahan 18/01
9
O Windows provavelmente usa VBE BIOS Extensions (VBE) para seu adaptador básico. O VBE é amplamente suportado e permite cores de 16 a 24 bits e até 1600x1200 pixels.
8bittree 18/01
3
Não seria a extensão do BIOS VESA, porque o Windows simplesmente não invoca o código BIOS / UEFI para nada após a conclusão dos primeiros estágios do bootstrap.
Jamie Hanrahan 19/01
2
Vi alguns computadores, incluindo meu laptop, onde a tela de inicialização do Windows com "pontos giratórios" inicia uma resolução extremamente baixa (320x200, eu diria, o modo de 256 cores do VGA) e depois muda rapidamente para uma resolução mais alta.
Artelius 19/01
1
Até 800x600 em 16 cores está além dos recursos do VGA. O VGA atingiu o máximo de 640x480 16 cores. No entanto, os fabricantes de chips gráficos foram além disso e adicionariam "SuperVGA", também conhecido como modos SVGA, que aumentariam as cores e a resolução, além de possuir seus próprios modos proprietários. O VESA surgiu para uma maneira padrão de acessar esses modos proprietários, mas foi nessa época que o PC começou a ser orientado principalmente por GUI e, portanto, os drivers eram uma boa escolha. Foi também quando a aceleração 3D estava começando a ser adicionada. Portanto, enquanto a maioria das placas se tornou compatível com VESA, ninguém falou sobre isso.
trlkly 20/01
16

Vou tentar esclarecer o "vodu" por trás de tudo isso, explicando como o hardware antigo funcionava. As GPUs modernas não funcionam assim, mas emulam a interface da CPU para a placa gráfica.

tl; dr

Os chips / placas gráficas nos anos 80 e início dos 90 precisavam produzir resultados extremamente rapidamente (em relação à velocidade do relógio), para que não executassem as instruções, mas tivessem circuitos fixos. Eles apenas sugavam dados da RAM à medida que avançavam, então a CPU simplesmente precisava despejar dados na RAM no lugar certo, e o chip gráfico os pegava e jogava na tela. A CPU também pode definir várias variáveis ​​de configuração no chip gráfico.

Detalhes:

Nos anos 80, os computadores domésticos tinham um chip gráfico realmente "burro" que tinha alguns comportamentos fixos. Faz mais sentido se eu seguir o oleoduto para trás.

Monitores CRT

Esses monitores precisavam de entradas analógicas. Em outras palavras, tensão mais alta = saída mais brilhante. Os monitores coloridos tinham três canais (vermelho, verde e azul (ou, por exemplo, YUV ou YIQ ) ). Essas tensões ajustaram a força de um feixe de elétrons. Coisas simples.

Os monitores CRT literalmente usavam eletroímãs para desviar o feixe de elétrons da esquerda para a direita, depois recomeçam um pouco mais baixo e vão da esquerda para a direita, e assim por diante, de cima para baixo. Então volte ao topo e repita.

DAC

Os chips gráficos tinham um conversor "digital para analógico" (um componente elétrico muito comum ). Isso converteu valores digitais (por exemplo, 2, 4 ou 8 bits) em voltagens que poderiam ser fornecidas ao monitor.

Digitalização

Os chips gráficos tinham que "acompanhar" o feixe de elétrons, enviando o valor correto ao DAC para que ele pudesse produzir a tensão correspondente no momento certo. (Foram usados ​​relógios para isso, que não vou abordar.) Não houve tempo para executar instruções aqui. Tudo estava conectado e levou um número pequeno e fixo de ciclos de relógio.

Modos de vídeo

Os primeiros chips não eram muito rápidos e tinham RAM limitada. Por causa disso, eles tendiam a permitir a seleção de vários modos e outros parâmetros de configuração, por exemplo, cor de fundo, seleção de fonte, localização e tamanho do cursor, seleção de paleta e sprites. A maioria oferecia um modo "somente caracteres" de alta resolução e modos pixel a pixel de resolução mais baixa.

Os três modos VGA dignos de nota são:

  • Modo de texto de 16 (ish) cores 80x25 (é basicamente a aparência da tela de carregamento do BIOS)
  • Modo de alta resolução em 16 cores, 640x480
  • Modo de 256 cores e 320 x 200 em cores

Pixels de pintura

De maneira bem aproximada, dependendo do sistema gráfico, o pipeline se parece com isso:

Localização atual do pixel ⇒ Caractere do processo / fonte / sprite / pixel / dados de configuração ⇒ Valores do pixel ⇒ Paleta ⇒ DAC

É o segundo passo que precisa ser lido em alguns locais da RAM. Por exemplo, no modo de texto, um caractere de 1 byte seria procurado. Isso formaria um índice em uma tabela de fontes. Um pouco seria pesquisado nesta tabela, indicando se esse pixel deve ser a cor do primeiro plano ou do plano de fundo. Um terceiro byte seria buscado para obter a cor de primeiro plano / plano de fundo. Ao todo, 3 bytes são lidos da RAM.

Mas esse "fluxo" é praticamente um conjunto de circuitos fixos simples, organizados exatamente como, bem, o fluxo que acabamos de descrever.

Interface de barramento de memória

As CPUs Intel têm esse recurso herdado e irritante chamado de barramento de entrada / saída, mas não é importante, então vou fingir que não está lá.

As CPUs acessam a RAM transmitindo uma solicitação READ ou WRITE e um endereço no barramento de memória. Embora a maioria dos endereços válidos provoque uma resposta da RAM, alguns intervalos são tratados pelos dispositivos . Por exemplo, a leitura de um endereço específico pode fornecer informações sobre as teclas pressionadas no teclado.

Ao escrever nas partes corretas do "intervalo de gráficos", você pode escrever o conteúdo da tela e também definir os parâmetros de configuração da placa gráfica. O chip gráfico "burro" não executa nenhuma instrução. Ele continua se arrastando, tendo alguns bytes fluindo através de seus circuitos e voltagens de saída.

Com o VGA, existe realmente RAM na placa gráfica, porque você pode configurar a placa gráfica para dados pré-processados ​​antes de serem gravados na RAM gráfica, para aumentar o desempenho em algumas situações.

VESA

As placas gráficas após VGA ofereceram resoluções mais altas e boa profundidade de cor, mas funcionaram com princípios semelhantes. Muitas placas gráficas modernas ainda oferecem compatibilidade com isso para permitir maiores resoluções durante a inicialização. Mas o VGA é o "infalível" que praticamente todos os cartões imitam.

Artelius
fonte