mibbio schrieb:
Natürlich können OS und Programme auch ohne rBar die volle Größe des Grafikspeichers nutzen. Das OS/Programm sieht dann lediglich immer nur einen 256 MB Adressbereich davon.
Ich habe nicht gesagt "nutzen". Ich habe gesagt addressieren. Ich habe doch sogar direkt und indirekt Addressieren kurz erklärt. Das "genutzt" in deinem Zitat, bezieht sich explizit darauf das ein PCIe Gerät mit 32 GiB BAR in einem alten PC nicht genutzt werden kann. Der PC kann nicht booten mit der Karte. Deshalb brauchen wir ReBAR um das selbe Ergebnis zu erreichen ohne die Kompatibilität mit alten PCs zu brechen. Weil 32 GiB BAR mit ReBAR nur eine Option ist, aber nicht Vorraussetztung um die Karte zu nutzen.
Und es geht dabei nicht um den kleinen Addressbereich der gemappt wird, sondern es geht darum, dass du der GPU einen Befehl gibst "hol dir folgende Daten von Addresse X aus dem System RAM und pack sie an Addresse Y in deinen VRAM". Damit ist immer alles addressierbar. Den gesamten VRAM zu Mappen, erlaubt der CPU, diese Indirektion zu überspringen wenn sie möchte und kleine Datenmengen direkt zu schreiben. Also anstatt einer Transaktion für den Befehl und dann die eigentliche Transaktion von der GPU aus für den eigentlichen Schreib/Lesevorgang, kannst du die Daten direkt in einem einzigen Paket schreiben.
Die kleine Menge VRAM wird nicht genutzt um dort Daten zwischenzuparken, die die GPU dann nochmal verschiebt etc. Das wäre dämlich vor dem Hintergrund der Funktionsweise von PCIe. Da kannst du halt bisher die wichtigsten Datenstrukturen reinpacken, für die indirekte Zugriffe ein gewaltiger Nachteil wären.
Wie ich gesagt habe, für niedrige CPU Last und hohen Durchsatz willst du DMA Zugriffe nutzen. Da ist die CPU dann für den eigentlichen Transfer nicht mehr involviert, das Gerät redet direkt mit dem Memory Controller.
Und PCIe nutzt einzelne Pakete. Deren Größe in der Praxis auf 256 Byte limitiert sind. Dieser Latenzvorteil der direkten Zugriffe ist also am größten, wenn du nur ein Paket schickst, also alle Daten in max. 256 Byte passen. Wenn du eh mehrere Pakete brauchst für die Datenmengen, werden DMA Transfers immer sinnvoller.
Also 1 GiB an Daten am Stück werden nie und nimmer mit direkten Transfers übertragen. Das wäre viel zu ineffizient und langsam.