Digamos que eu esteja usando um computador, qualquer computador moderno típico mais ou menos. Um driver de dispositivo é responsável por tudo que vejo na minha tela, inclusive quando digito isso, a tela é atualizada (é claro que isso está dentro do escopo de um sistema operacional, como o Windows).
Vamos levar isso ao nível em que o hardware não se importa se existe um kernel ou não, e apenas recebe instruções.
Basicamente, como as GPUs "sabem" exatamente como fazer tudo? Um driver controla basicamente todas as funções minúsculas, intrínsecas ou de nível de circuito de hardware possíveis ou necessárias para calcular dados binários para exibição usando instruções especiais fornecidas por um driver?
Nesse caso, a GPU usa uma linguagem "assembly" ou "especial" para entender as instruções enviadas a ela como uma CPU?
Tenho muitas lacunas no meu conhecimento e existe esse "mistério" desagradável por trás das GPUs e de acessá-las diretamente via hardware.
Por exemplo, uma GPU e CPU precisam ser capazes de conectar-se de alguma forma, para que seja possível acessar uma GPU via conjunto da CPU e implementar os barramentos de dados / endereço corretos. Não há como um fornecedor de dispositivos impossibilitar o acesso à GPU fora de um driver, porque um driver também é código compilado e a GPU, como um circuito programável, deve trabalhar com instruções binárias.
Eu fiz esses tipos de perguntas e elas são excluídas violentamente rapidamente, sem resposta por que em muitos sites, então qual é o grande mistério / segredo aqui? É um pedaço de hardware em uma placa-mãe que é acessado como qualquer outro.
Então, realmente ... supondo que essa seja uma pergunta "ok" aqui sobre software e hardware, qualquer pessoa pode acessar diretamente uma GPU sem arquivos específicos do fornecedor, porque os arquivos não são mágicos.
Então, como as GPUs são "programadas" da perspectiva direta de hardware direto no nível específico do hardware?
Respostas:
Não, o dispositivo possui seus próprios ICs que controlam todos os aspectos do funcionamento do dispositivo em nível de hardware e fazem interface com um processador central que coordena os aspectos do dispositivo, além de fornecer uma interface de programação de nível superior que pode ser usada para acessar, ler, escrever e controlar o dispositivo.
Sim e não. Como a maioria dos dispositivos, as placas de vídeo usam padrões para simplificar as coisas. Eles usam padrões como o VESA para acessar funções regulares, como vídeo de inicialização, ou CUDA para acessar as funções de programação da GPU. Além disso, os programas podem acessar as funções não padrão ou dependentes do dispositivo diretamente usando o código da máquina (geralmente C compilado no assembler) em conjunto com as documentações de programação do dispositivo (disponíveis no site do adaptador).
Os drivers acessam o dispositivo diretamente, e é por isso que eles têm acesso especial (programas regulares no nível do usuário não têm permissão para acessar o hardware diretamente no Vista + por motivos de segurança e estabilidade). Acesse o dispositivo usando portas, DMA (acesso direto à memória ) e mapeamento de memória .
Um driver pode ler e gravar o dispositivo com instruções regulares da CPU, acessando portas mapeadas na memória e outras coisas. Como um exemplo fácil de entender, você pode colocar um caractere na tela no modo de texto escrevendo em “memory” no endereço B8000. Esse endereço não era RAM, mas sim, foi mapeado para corresponder à memória da placa de vídeo; portanto, a gravação nele seria gravada na tela. Da mesma forma, você pode escrever na tela colocando o caractere que deseja gravar no
AL
registro,0x09
noAH
registro e, em seguida, chamando a interrupção do BIOS0x10
. Funções mais avançadas não são diferentes; você pode ler e gravar a memória do adaptador, chamar as funções em seu chip e assim por diante, usando as interfaces que o dispositivo expõe e documenta.Somente para recursos que cumprem os padrões, mas todo o resto (ou seja, o material mais avançado), você precisará consultar os documentos de programação do fabricante.
Através de várias camadas:
fonte
Não sou exatamente um gênio da arquitetura de computadores, mas tentarei tratar sua pergunta por pontos, com o melhor de meu conhecimento.
É verdade, principalmente porque a interação direta com a GPU não é fácil de implementar. Daí o desenvolvimento de estruturas gráficas como DirectX e OpenGL.
Esta definição útil da Wikipedia explica isso com mais detalhes:
GPU's são microprocessadores. Como tal, eles processam. Eles processam dados que são alimentados da CPU (ou seja, posição dos elementos) para uma exibição adequada. Eles "sabem" como fazer tudo porque são fabricados dessa maneira e um grande grupo de pessoas concordou com as maneiras adequadas de enviar dados para e a partir da GPU.
Pense no driver de vídeo como um buffer ou um proxy. Imagine que você é uma janela de programa e o usuário o move para cima. Você pede à GPU para atualizar a exibição. Mas, como a GPU fala klingon e você fala vulcano , o driver recebe seu comando, converte-o na GPU que, por sua vez, faz o que você mandou.
Da Wikipedia :
Há um exemplo e lembre-se de que fabricantes individuais (NVIDIA, ATI) têm seus próprios conjuntos de instruções.
Além disso, existe o OpenCL e muitas outras maneiras de, de certa forma, programar diretamente instruções para a GPU.
Tudo isso deve responder à sua pergunta, até certo ponto.
fonte