Was soll denn IO mapped sein?
Es gibt 3 grundlegende Zugriffsverfahren um IOs durch die Gegend zu schaufeln.
2 davon sind CPU controlliert und 1 eben nicht.
CPU controlliert:
a) memory mapped
b) port mapped
nicht CPU controlliert
c) direct memory access
a)
- IO Geräte und der Speicher nutzen den gleichen Adressraum, daher auch memory mapped, da die IOs auf den selben Adressenraum zugreifen wie der Speicher
- hierbei legt die CPU also auf dem selben Adressbus IO Adressen an, welcher auch für den Memory genutzt wird
- das führt letztendlich dazu, dass der IO Adressraum(wer braucht schon zB 32bit IO Adressen) unnötig weit aufgeblasen wird, was die Komplexität des Decodierens in der CPU unweigerlich erhöht und damit (Rechen)Zeit und auch Geld kostet.
b)
hier gibt es einen eigenen IO Adressraum, der losgelöst vom Adressraum des Speichers genutz werden kann. Das macht es für die CPU und deren Programmierer einfacher das ganze zu nutzen, weil weniger komplex.
Genutzt wird das, nach meinem Wissen (auch) in "unseren" CPUs.
In beiden Fällen ist die CPU aber immer beim IO involviert. Sie muß entweder auf einem oder 2 Adressräumen arbeiten, die Daten reinladen und wieder rausladen. Das sorgt dafür, dass die CPU für keine andere Aufgabe genutzt werden kann, wenn die Daten zwischen IO und Mem kopiert, was die Systemperformance verschlechtert, wenn es ums stumpfe Kopieren geht.
Daher nutzt man, gerade für große Datenmengen DMA.
c)
Hierbei ist der Transfer nicht CPU controlliert, sondern nur initiiert. Sprich die CPU sagt dem DMA Controller was von wo nach wo kopiert werden soll, dieser baut dann eine Verbindung zwischen beiden Geräte auf und der Spaß nimmt seinen Lauf. In der Zeit hat die CPU Zeit andere Sachen zu erledigen.
Als damals DMA für HDDs eingeführt wurde, hat man deutlich gemerkt, wie das System besser zu handeln war, da die CPU nicht immer unterbrechen mußte, wenn Daten geschaufelt werden mußten.
DMA ist aber weniger für den Transfer zwischen HDD und RAM gedacht, sondern ist ein Verfahren was überall Anwendung findet, man hat bei ATA einfach DMA für die Bezeichnung dieses Modi genommen.
DMA ist in diesem Zusammenhand auch weniger zwischen HDD und RAM angewendet, sondern zwischen dem HBA und dem RAM. Der HBA holt sich die Daten von der HDD, der DMA controller holt sich die Daten vom HBA und diese landen dann im RAM. Das läßt auch erahnen, warum DMA für das Brennen sinnvoll ist, da der Datenstrom dann nicht mehr von der CPU unterbrochen wird, weil diese plötzlich was anderes machen muß, sondern eben konstant über DMA mit Daten versorgt wird. (früher konnte man beim Brennen nicht mehr viel nebenbei machen, sonst war das Brennen platt)
Um genau zu sagen wo das verwendet wird, müßte man sich die Struktur der CPU anschauen und analysieren.
Wie gesagt, DMA ist ein Verfahren, welcher mittlerweile ÜBERALL da eingesetzt wird, wo große Datenmengen bewegt werden müssen, das spart CPU Zeit und damit kann die CPU kleiner dimensioniert werden und erhöht zeitgleich die Systemperformance.
Anwendung findet das nicht nur bei "unser" CPU, sondern auch in allen anderen Prozessoren, die sich in unserem Rechner befinden, wie zB GPUs, AudioCPU, (richtige) VideoCPUs und was weiß ich nicht noch. Weiterhin ist es auch in embedded systems anzutreffen, sprich in deinem Handy, deinem MP3 player, Auto, what ever.
Bezüglich der HDD -> GPU:
Das bringt herzlich wenig, da die Daten, die von der GPU berechnet werden sollen, zunächst von der CPU aufbereitet werden, da die Daten nicht in der Form auf der HDD liegen wie sie auch für die GPU nutzbar sind.
Was du verschlägst würde bedeuten, dass die GPU sämtliche relevanten und möglicherweise zu nutzenden Daten reinläd und von der CPU dann gesagt bekommt, was sie nutzen soll. Da die Daten dann aber im Rohformat vorliegen müssen und das im kompletten Umfang, müßten wir für GPUs Speichermengen vorsehen, dass diese nicht mehr feierlich sind.
Aktuell bekommt die GPU nur das in den RAM geladen, was sie auch wirklich "wissen" muß, dies wird von der CPU bereitgestellt.
Sprich, dein Vorschlag ist schlicht weg nicht sinnvoll, denn wenn es nur darum ginge Daten zu schaufeln, dann könnte man das schon heute machen, denn beide Sachen sind IO Geräte und lassen sich, über den Umweg RAM, mit DMA mit Daten füttern und das ginge auch schon jetzt reichlich schnell.
Es hat schon einen Grund, warum bei Games die CPU so ausgelastet wird, das sind eben überwiegend Rechenaufgaben die im Zusammenhang mit der Aufbereitung der GPU Daten zusammenhängen.