Naja es gibt ja zwei Techniken für das DRAM management auf GPUs, die sich theoretisch auch beliebig für unterschiedliche Speicherbereiche kombinieren lassen. Welche besser ist hängt m.E. stark vom Zugriffsmuster auf den Speicherbereich ab, so dass es wichtig ist beide Techniken sinnvoll zu kombinieren:
Preloading (richtiger Fachbegriff?): Vor dem Zeichenaufruf oder Compute Shader-Aufruf, werden potentiell benötigte Speicherbereiche komplett entweder manuell oder automatisch von der 3D-API in den DRAM der GPU geladen. Vorteil: Die Speicherbereiche sind beim Start des Shaders vollständig im DRAM der GPU vorhanden und können dann dementsprechend mit niedriger Latenz vom Shader aus gelesen werden. Nachteil: Da der komplette Speicherbereich kopiert wird, werden diejenigen Daten im Speicherbereich, die nicht benötigt werden, umsonst kopiert, wodurch wiederum PCIE Bandbreite verschwendet wird. Gerade bei wenn potentiell nur wenige Daten aus einem Speicherbereich benötigt werden ist dies nachteilig.
Paging: Die Speicherbereiche werden in Seiten eingeteilt, wobei sich eine Seite nicht zwingenderweise im DRAM der GPU befinden muss. Bei jedem Speicherzugriff in einem Shader wird überprüft, ob die entsprechende Seite in den DRAM der GPU geladen ist, und falls nicht wird die komplette Seite per Page Fault über den PCIE von den CPU DRAM in den GPU DRAM kopiert. Vorteil: Die Zugriffsgranularität ist sehr fein, wodurch bei chaotischen Speicherzugriffen auf große Speicherbrreiche tatsächlich nur wenig Daten über den PCIE kopiert werden. Nachteil: Ein Page Fault besitzt eine sehr große Latenz, währenddessen die entsprechenden GPU Threads gestallt werden.