Angenommen, ich benutze einen Computer, jeden typischen modernen Computer mehr oder weniger. Ein Gerätetreiber ist für alles verantwortlich, was ich auf meinem Bildschirm sehe, einschließlich der Aktualisierung des Bildschirms während der Eingabe (dies liegt natürlich im Rahmen eines Betriebssystems wie Windows).
Lassen Sie uns dies auf die Ebene reduzieren, auf der es der Hardware egal ist, ob es einen Kernel gibt oder nicht, und nur Anweisungen entgegennimmt.
Woher "wissen" GPUs genau, wie man alles macht? Steuert ein Treiber grundsätzlich jede winzige, intrinsische oder Hardware-Funktion auf Schaltungsebene, die möglich oder erforderlich ist, um Binärdaten für die Anzeige mithilfe spezieller Anweisungen zu berechnen, die ein Treiber bereitstellt?
Wenn ja, verwendet die GPU eine "spezielle" Sprache oder "Assembly", um die an sie gesendeten Anweisungen zu verstehen, wie dies eine CPU tut?
Ich habe zu viele Wissenslücken und es gibt dieses unangenehme "Geheimnis" hinter GPUs und dem direkten Zugriff über Hardware.
Zum Beispiel müssen eine GPU und eine CPU in der Lage sein, sich irgendwie zu verbinden, damit es möglich ist, über eine CPU-Baugruppe auf eine GPU zuzugreifen und die richtigen Daten- / Adressbusse zu implementieren. Ein Gerätehersteller kann es unmöglich machen, außerhalb eines Treibers auf die GPU zuzugreifen, da ein Treiber auch aus kompiliertem Code besteht und die GPU als programmierbare Schaltung mit binären Anweisungen arbeiten muss.
Ich habe diese Art von Fragen gestellt und sie werden heftig schnell gelöscht, ohne Antwort, warum auf vielen Websites. Was ist also das große Geheimnis / Geheimnis hier? Es ist eine Hardware auf einem Motherboard, auf die wie auf jedes andere zugegriffen wird.
Also wirklich ... vorausgesetzt, dies ist hier eine "ok" -Frage in Bezug auf Software und Hardware, kann jeder ohne herstellerspezifische Dateien direkt auf eine GPU zugreifen, da die Dateien nicht magisch sind.
Wie werden GPUs aus der Bare-Metal-Perspektive der direkten Hardware auf hardwarespezifischer Ebene "programmiert"?
Antworten:
Nein, das Gerät verfügt über eigene ICs, die alle Aspekte der Hardwarefunktion auf Geräteebene steuern. Sie sind mit einem Zentralprozessor verbunden, der die Aspekte auf dem Gerät koordiniert, und bieten eine übergeordnete Programmierschnittstelle, die verwendet werden kann um auf das Gerät zuzugreifen, von ihm zu lesen, darauf zu schreiben und es zu steuern.
Ja und nein. Wie die meisten Geräte verwenden Grafikkarten Standards zur Vereinfachung. Sie verwenden Standards wie VESA, um auf die regulären Funktionen wie Boot-Time-Video zuzugreifen , oder CUDA, um auf GPU-Programmierfunktionen zuzugreifen. Darüber hinaus können Programme direkt auf die nicht standardmäßigen oder geräteabhängigen Funktionen zugreifen, indem sie Maschinencode (häufig C für Assembler kompiliert) in Verbindung mit den Programmierdokumentationen des Geräts (die auf der Website des Adapters verfügbar sind) verwenden.
Treiber greifen direkt auf das Gerät zu, weshalb sie über einen speziellen Zugriff verfügen (reguläre Programme auf Benutzerebene dürfen aus Sicherheits- und Stabilitätsgründen nicht direkt auf Hardware in Vista + zugreifen). Der Zugriff auf das Gerät über Ports, DMA ( Direct Memory Access ) und Speicherzuordnung .
Ein Treiber kann das Gerät mit regulären CPU-Anweisungen lesen und schreiben, indem er auf speicherabgebildete Ports und dergleichen zugreift. Als leicht verständliches Beispiel können Sie ein Zeichen im Textmodus auf den Bildschirm bringen, indem Sie unter der Adresse B8000 in den Speicher schreiben. Diese Adresse war kein RAM, sondern wurde so zugeordnet, dass sie dem Speicher der Grafikkarte entspricht, sodass beim Schreiben auf den Bildschirm geschrieben wird. Ebenso können Sie auf den Bildschirm schreiben, indem Sie das Zeichen, das Sie schreiben möchten, in die
AL
Registrierung und0x09
in dasAH
Register einfügen und dann den BIOS-Interrupt aufrufen0x10
. Erweiterte Funktionen unterscheiden sich nicht. Sie können den Speicher des Adapters lesen und schreiben, die Funktionen auf seinem Chip aufrufen usw., indem Sie alle vom Gerät bereitgestellten und dokumentierten Schnittstellen verwenden.Nur für Funktionen, die den Standards entsprechen, aber für alles andere (dh für fortgeschrittenere Funktionen) müssen Sie die Programmierdokumente des Herstellers konsultieren.
Durch mehrere Schichten:
quelle
Ich bin nicht gerade ein Genie in der Computerarchitektur, aber ich werde versuchen, Ihre Frage nach bestem Wissen und Gewissen nach Punkten zu behandeln.
Dies ist vor allem deshalb der Fall, weil die direkte Interaktion mit der GPU nicht einfach zu implementieren ist. Daher die Entwicklung von Grafik-Frameworks wie DirectX und OpenGL.
Diese handliche Definition aus Wikipedia erklärt dies genauer:
GPUs sind Mikroprozessoren. Als solche verarbeiten sie. Sie verarbeiten Daten, die von der CPU (dh der Position der Elemente) einer ordnungsgemäßen Anzeige zugeführt werden. Sie "wissen", wie man alles macht, weil sie auf diese Weise hergestellt werden und eine große Gruppe von Menschen sich auf die richtigen Wege zum Senden von Daten zur und von der GPU geeinigt hat.
Stellen Sie sich den Anzeigetreiber als Puffer oder Proxy vor. Stellen Sie sich vor, Sie sind ein Programmfenster und der Benutzer bewegt Sie nach oben. Sie fordern die GPU auf, die Anzeige zu aktualisieren. Aber wenn die GPU klingonisch spricht und Sie Vulkanisch sprechen , erhält der Treiber Ihren Befehl und übersetzt ihn in die GPU, die wiederum das tut, was Sie befohlen haben.
Aus Wikipedia :
Es gibt dieses Beispiel, und denken Sie daran, dass einzelne Hersteller (NVIDIA, ATI) ihre eigenen Befehlssätze haben.
Es gibt auch OpenCL und viele andere Möglichkeiten, um Anweisungen in gewisser Weise direkt auf die GPU zu programmieren.
All dies sollte Ihre Frage bis zu einem gewissen Grad beantworten.
quelle