Tanzmusikus schrieb:
Was soll sonst "Direct" bedeuten?
Ich denke weil es zur Familie von DirectX, DirectSound, DirectCompute etc. gehört.
Tanzmusikus schrieb:
Ob das GPUs bzw. dessen Grafiktreiber/Spiele-API aber wirklich können?
Microsoft bietet die Dekompression von GDeflate universell als Shader an, daher kommt die Anforderung mit DX12 + Shader Model 6.
Besser wäre es aber, wenn die GPU Treiber das selbst implementieren und besser auf die jeweilige Architektur angepasste Umsetzungen verwenden, bis hin zu diskreter HW speziell dafür. Keine Ahnung ob die ganzen GPU Treiber mit Support das jetzt schon selbst umsetzen oder noch die Vorlage von Microsoft nutzen.
Klassische Dateizugriffe sind pro Datei und jede Datei für sich. Mit richtig schnellen NVMe SSDs wird das schnell zum Flaschenhals. Was ich bisher gesehen habe ist die DirectStorage API hauptsächlich Asynchron, Batched und parallel. Dh. du beantragst das Laden / Kopieren von vielen Fragmenten von vielen Dateien an verschiedene Stellen und musst nur auf ein einzelnes "fertig" warten anstatt alles von Hand zu kontrollieren und zu managen. Das ist notwendig für einen hohen Durchsatz und bietet viele Möglichkeiten Hardwarebeschleunigung oder parallele Verarbeitung einzusetzen.
Wie das dann umgesetzt wird mit Datenträgern die eben nicht auf so eine hohe Parallelität ausgelegt sind und wo die Treiber aus einer viel sequentielleren Zeit kommen ist die Frage. Da kann man bestimmt schon noch einiges an OS Overhead wegoptimieren, die Frage ist, ob die Entwickler das für Sinnvoll empfinden da jetzt noch viel Entwicklungsaufwand in AHCI etc zu stecken. Sie erwähnen ja an allen Stellen, dass NVMe wie die Faust aufs Auge passt zu den Prinzipien von DirectStorage.
Und ob der relative Anteil dieses Overheads mit dem OS nicht vllt nur ein Bruchteil der Zeit ausmacht, den eine SATA-SSD oder HDD mit dem Laden verbringt.
So, ich habe die selbe Demo jetzt gerade mal von einer HDD und auf einer SATA SSD ausgeführt:
HDD - WD Red Pro 14 TB
GPU Decompression stabil 1.43 GB/s, ~ 1.3% CPU Last
CPU Decompression: stabil 1.45 GB/s, 5-6% CPU Last. Wobei die Rohdaten hier schon irgendwo gecached werden, weil der Taskmanager anzeigt, dass meine Festplatte mit 416MB/s liest, während das passiert, was die HDD maximal aus ihrem Cache kann. Sprich wenn man nicht die selbe Datei immer wieder liest oder die Daten technisch gesehen in den DRAM des Laufwerks passen, wird das eher noch langsamer ausfallen.
SATA SSD - Samsung 850 Evo 250 GB in USB3 10G Gehäuse (maximale Datenrate der SSD laut Taskmanager 540 MB/s während dem Benchmark, habe keine SATA SSD intern in einem PC mit DirectStorage fähiger GPU):
GPU Decompression: schwankt 1.36 GB/s und 1.85 GB/s, ~ 3 % CPU Last
CPU Decompression: schwankt zwischen 1.2 GB/s und 1.9GB/s, maximale CPU Last 45%, avg eher 30%
CPU ist 12900K, GPU ist 3090, Datenmenge 8.68 GB für alle Tests.
Im Gegensatz zum Laden von NVMe SSD geht die CPU Auslastung auch bei CPU Decompression nicht über 50%, das erklärt dann auch wieso es nichts bringt, die CPU langweilt sich noch und die muss den Overhead ja abarbeiten.
@Mordekai2009 hatte ja schon gezeigt, dass es aber doch einen Unterschied machen kann, wenn die CPU von der Decompression voll ausgelastet wird, was bei Ivy Bridge und SATA SSD wohl der Fall ist.