Hier werden mal wieder 1000de Sachen wegen Async Compute durcheinander geworfen:
- DX 12 schreibt nur vor, dass es mehrere voneinander unabhängige Schlangen gibt. Die Schlangen für Graphik und Compute müssen nicht aber können *potentiell* gleichzeitig abgearbeitet werden. Dieses gleichzeitge Abarbeiten ist das, was man unter Async Compute versteht.
- Aus dem Grund kann eine Anwendung Async Compute auch nur implizit über mehrere unahängige Schlangen verwenden. Es gibt keinen Schalter in DX 12 um Async Compute an oder aus zu schalten. Deshalb muss eine Anwendung, sofern sie Async Compute nicht implizit verwenden will, die Befehlsordnung in den Schlangen dementsprechend umgestalten. Eben das machen die Async Compute Schalter, die es in diversen Spielen so gibt.
- Async Compute ist kein funktionales Feature, sondern ein reines Performance Feature: Ein (korrektes) DX12 Programm liefert immer das korrekte Ergebnis, unahängig davon ob ein Performance Feature wie Async Compute vorhanden ist oder nicht. Im Gegensatz dazu ist z.B. Tessellation ein funktionales Feature: Ist es nicht vorhanden so kann die GPU diverse Shader gar nicht oder nicht korrekt ausführen. Das Programm liefert also ein anderes Ergebnis oder stürzt ab. Aus diesem Grund würde es gar keinen Sinn ergeben, ein Performance Feature wie Async Compute für DX12 GPUs vorzuschreiben.
-NVIDIAs Treiber beherrschen den funktionalen Teil von DX 12 in dieser Hinsicht, nämlich mehrere unahängige Schlangen, weshalb NVIDIA GPUs auch den DX12 Standard erfüllen. Aus dem Grund läuft auch jedes (korrekte) DX12 Programm auf ihnen, unabhängig davon ob Async Compute unterstützt wird oder nicht.
Eventuell noch eine etwas andere Analogie zu dem Async Compute Thema: Windows 10 unterstützt, wie so ziemlich jedes andere moderne Betriebssystem auch, mehrere Threads softwareseitig und mehrere Kerne hardwareseitig. Auf einer Einkern-CPU kann eine Anwendung unter Windows 10 zwar mehrere Threads verwenden, was aus Kompabilitätsgründen (und noch ein paar anderen Gründen) ja sinnvoll ist: Jede "korrekte" Anwendung wird sowohl auf einer Zweikern-CPU als auch auf einer Einkern-CPU laufen und das korrekte Ergebnis liefern. Aber die Anwendung wird (je nachdem wie sie die Threads verwendet) in der Regel keinen Performancevorteil aus mehreren Threads ziehen können, weil die Threads von dem einen Kern nur sequentiell abgearbeitet werden können. In diesem Fall würde ja auch niemand sagen, dass eine Einkern-CPU keinen Windows 10 Support hat, weil sie eben nicht von mehreren Threads profitiert. Und so ähnlich ist die Sache auch unter DX12 mit Async Compute . . .
Und was soll diese Emulation bzw. Software Lösung von Async Compute darstellen? Ich habe hier immer so das Gefühl, dass das andauernd in jedem Forum wiedergekaut wird, ohne dass jemand wüsste, was man sich darunter überhaupt vorstellen soll. Allein von den Begrifflichkeiten ergeben die Begriffe meines Erachtens keinen Sinn.