2009-11-08 7 views
28

Haben Grafikkarten eigene Befehlssätze? Ich nehme an, sie tun, aber ich habe mich gefragt, ob es proprietär ist oder ob es einen offenen Standard gibt.Haben Grafikkarten eigene Befehlssätze?

Wird jeder GPU-Anweisung eine CPU-Anweisung vorangestellt oder ist sie nahtlos? Das ist OpenGL oder DirectX-Aufruf auf der Treiberschicht über die CPU, die dann eine GPU-Anweisung über den Bus sendet oder ist es aufwendiger.

Antwort

28

Ja, sie tun. AMD stellt die Spezifikation sogar bis zur HD4000-Serie zur Verfügung.

Werfen Sie einen Blick hier: http://developer.amd.com/wordpress/media/2012/10/R700-Family_Instruction_Set_Architecture.pdf

Es gibt auch ein Open-Source-Projekt Nouveau genannt, das Engineering der Sätze NV Anweisung tut umkehren.

Beachten Sie, dass NVIDIA eine etwas andere Architektur als AMD hat, da sie nicht VLIW, sondern skalare Ausführung verwenden (obwohl mehrere Threads zusätzlich in einem so genannten Warp oder einer Wavefront gruppiert sind).

Außerdem wird nicht jeder OpenGL/Direct3D-Aufruf einem "GPU-Befehl" zugeordnet. Wenn beispielsweise eine Textur gebunden wird, stellt der Treiber nur geeignete Hardware-Register ein, die der GPU mitteilen, welcher Texturspeicher für die Abtastung verwendet werden soll.

Echte Programme werden nur ausgeführt, wenn Shader oder Stream-Processing-Kernel auf der GPU ausgeführt werden.

+2

Die pdf ist hierher umgezogen: http://developer.amd.com/wordpress/media/2012/10/R700-Family_Instruction_Set_Architecture.pdf – larsr

+0

Letztens ist das eine: http: //amd-dev.wpengine.netdna-cdn. com/wordpress/media/2013/07/AMD_GCN3_Instruction_Set_Architecture.pdf – Simon

+0

http://developer.amd.com/wordpress/media/2012/12/AMD_Southern_Islands_Instruction_Set_Architecture.pdf –

3

Ja, die GPU hat eigene proprietäre Befehlssätze. Die GPU-Anweisungen werden unabhängig von den CPU-Anweisungen ausgeführt.

+0

OK, aber wie weiß das Betriebssystem dies? Wenn ein Betriebssystem für x86 kompiliert wird, verstehe ich, wie es x86-Anweisungen kennt. Aber wenn ein System über eine ATI-Karte verfügt, wie kann es einen ATI-Befehlssatz verwenden? Ruft die CPU zuerst den Treiber auf, der eine Opengl-Anweisung ausführt? Was bedeutet das Routing von Anweisungen an die entsprechende Ressource? – Matt

+7

@Matt: Der Treiber behandelt alles; Windows spricht mit dem Fahrer auf eine bestimmte Art und Weise, und der Fahrer spricht auf eine bestimmte Weise mit der GPU. –

5

Derzeit verwenden NVIDIA-Karten eine Art zwischengeschalteter ISA namens PTX. Sie können in diesem Dokument darüber lesen:

PTX ISA 1.1

PTX Programme übersetzt werden zur Zeit auf die Zielhardware Befehlssatz installieren.

+0

So erhalten und ändern Sie PTX: http://StackOverflow.com/fragen/4660974/how-to-create-or-manipulieren-gpu-assembler/43304961 # 43304961 –

2

Siehe auch: CUDA-Programmierhandbuch Version 3.0

Die Rechenkapazität eines Gerätes wird durch eine Hauptversionsnummer und eine kleinere Revisionsnummer definiert.

Geräte mit der gleichen Hauptversionsnummer haben dieselbe Kernarchitektur. Die Hauptversionsnummer von Geräten, die auf der Fermi-Architektur basieren, ist 2. Frühere Geräte sind alle Rechenkapazität 1.x (Ihre Hauptversionsnummer ist 1).

Die kleinere Revisionsnummer entspricht einer inkrementellen Verbesserung der -Architektur, möglicherweise einschließlich neuer Funktionen.

Anhang A Liste aller CUDA-fähigen Geräte mit ihrer Rechenleistung. Anhang G enthält die technischen Spezifikationen jeder Rechenleistung.

0

AMD Graphics Core Next (GCN)

https://en.wikipedia.org/wiki/Graphics_Core_Next

Die erste Generation "Southern Islands" genannt wird, haben möchten.

Die Wiki-Seite Links zu AMD Spezifikationen, die die ISA dokumentieren, zB: http://developer.amd.com/wordpress/media/2012/12/AMD_Southern_Islands_Instruction_Set_Architecture.pdf

Es gibt sogar eine offene Implementierung RTL MIAOW genannt https://github.com/VerticalResearchGroup/miaow, obwohl es einige IP wahrscheinlich verletzt, die AMD lediglich für in Schweigen toleriert hat sich dafür entschieden jetzt (source).

SPIR-V

https://en.wikipedia.org/wiki/Standard_Portable_Intermediate_Representation ist eine Krhonos Standardzwischensprache.

Es ist wahrscheinlich entworfen, um zu bestehenden GPU ISAs ähnlich zu sein, so dass es mehr umsetzbar sein wird und eine bessere Annahme, so sollte es eine gute Vorstellung von tatsächlichen GPU ISAs geben.

Und wenn sich dieser Standard durchsetzt, wie es aufgrund der Einführung in Vulkan und OpenCL 2.1 der Fall zu sein scheint, werden zukünftige Implementierungen wahrscheinlich entwickelt werden, um eine bessere Leistung zu erzielen.