2 Monitore + 2 Grafikkarten

HisN schrieb:
*g*
Freu mich drauf. Du scheinst tiefer in der Materie zu stecken als ich. Ich bin nur stiller Beobachter in dem Fall und nicht so sehr Techie :-)

Das ich mich teilweise zu weit aus dem Fenster lehne, habe ich ja schon mit dem ersten Dementi erfahren dürfen ;)
Also nehm ich's mal vorweg: die folgenden Ausführungen sind größtenteils Mutmaßungen. Zum einem fehlt mir leider die Möglichkeit (Tools, Hardware), das ganze nachzuvollziehen, um zum anderem bin ich nicht in der Lage, Windows Komponenten oder Treiber von Drittanbietern soweit zu durchleuchten, dass die Annahmen bestätigt würden bzw. fehlt es immer wieder an Feedback von den Herstellern.

Durch deine Demonstration ist offensichtlich geworden, dass eine Grafikkarte nicht nur ausschließlich den Inhalt der Fenster rendert, welche auf dem an ihr angeschlossenen Monitor ausgegeben werden.
Sondern sie rendert auch den Inhalt von Fenstern
  • welche auf der Host Karte gestartet wurden und dann rüber gezogen wurden
oder
  • welche aufgrund der höheren Performance der Host Karte sowieso von dieser gerendert werden.

Im Verlauf des Textes mißbrauche ich mal den Terminus "Host Grafikkarte" für die Grafikkarte, welche originär das Fenster erzeugt hat bzw. die leistungsfähigere ist.

Nehmen wir das mal als gegeben hin, jetzt stellt sich nur noch die Frage, auf welcher Ebene das passiert und in welchem Ausmaß.

Dazu gibts einen kleinen Exkurs, Basiswissen:
Das finale Bild, was am Monitor ausgegeben wird, liegt als Qasibitmap im Speicher der jeweiligen Grafikarte, im Framebuffer.
Da geht kein Weg dran vorbei, beim Verschieben von einem Fenster auf einen anderen Monitor wird sich da auch keine Änderung in dre Speicherauslastung ergeben, denn der ist immer gleich gut befüllt:
z.B. eine Auflösung 1600x1200, 32bit Farbtiefe
  • 1600 x 1200 = 1920000 Bit
  • 1920000x32 = 61440000 Bit
  • 61440000 / 8 = 7680000 Byte ≙ 7,32MB

Auch wenn jetzt ein Fenster von einem Monitor auf den anderen verschoben wird, ändert sich nichts an dieser Größe; es bleiben genauso viele Pixel auf dem Monitor mit der gleichen Farbtiefe. Dass die jetzt ein paar in einer andere Farbe leuchten, dafür kann der Speicher ja nichts; taugt also nichts für eine Analyse.

Wer sich jetzt fragt, wieso seine (sorry, auch ihre) Grafikkarte jetzt soviel mehr Speicher hat: wir wissen ja, dass eine Grafikkarte heute noch sehr viel mehr macht, als ein langweiliges Bild darzustellen, also liegen neben dem eigentlichen Bild noch diverse andere Sachen im Speicher, seien es Texturen, Zwischenergebnisse, Subroutinen etc.
Früher stellte also der Speicher der Grafikkarte einen Hinweis zur maximalen Auflösung dar. Mit 4MB gabs z.B. keine 1600x1200 mit 32Bit.

Als die Welt noch flach war, hatte eine Grafikkarte tatsächlich nicht viel mehr zu tun, als ein vorgegebenes Bild im Grafikspeicher (der damals ausschliesslich als Framebuffer verwendet wurde) abzulegen, über den RAMDAC wurden dann die Inhalte des Framebuffers ausgegeben.
Sie war also nur für Umwandlung des digitalen Quasibitmap in ein analoges Signal zuständig, die CPU übernahm vollständig die ganze Arbeit der Berechnung.
Eine Entlastung fand in erster Linie dardurch statt, dass z.B. der Befehl "Stelle das Zeichen @ an der Position XY dar" dafür sorgte, dass die Grafikkarte das ihr bekannte ASCII-Zeichen an der vorgegebenen Position darstellte.
War das Zeichen nicht bekannt, wurde entweder ein Ersatz dargstellt oder es oblag wieder dem Prozessor, das "Bild" für dieses Zeichen vorzugeben, und die Grafikkarte stellte dieses dann in den Grafikspeicher.
Auf Blitting, Vectoring etc. will ich jetzt nicht eingehen, dass würde den Rahmen sprengen.

Kurze Zusammenfassung: bei der Grafikkarte kommt hinten das raus, was im Framebuffer liegt.

Ergibt eine weitere Fragestellung: wie kommen die Daten von der Host Karte in den Framebuffer der Client Karte?
Das ist ziemlich trivial, dass passiert einfach via DMA.
Wem sich jetzt die Frage stellt: aber diese riesige Datenmenge, all das 3D Zeugs...
Es geht nur noch um das nackte darzustellende Bild, das ist, wie oben berechnet, z.b. keine 8MB groß. Diese Datenmenge juckt den PIC(Express) Bus mal überhaupt nicht.
Das ging schon zu 486er Zeiten bestens, Haupauge WinTV GRafikkarten arbeiteten z.b. nach dem Prinzip: das TV Bild wurde in den passenden Speicherbereich der Grafikkarte geschrieben, direkt über den Bus. Der Prozessor bleibt davon total unberührt.

Die interessanten Fragen, die sich jetzt noch stellen, sind Ausmaß und Ebene:

Im 2D Modus wird alles, was angezeigt wird, sowieso von der CPU berechnet.
Spricht das Betriebssystem dafür
  • die Host Grafikkarte mit einem kompletten Abbild des Desktops an, die Verteilung der beiden Bilder werden von der Host GraKa realisiert (Darstellung auf dem direkt angeschlossenen Monitor erfolg autonom, das Bild für den 2. Monitor wird via Busmastering in den Framebuffer der sekundären GraKa geschrieben)
  • beide Grafikkarten erscheinen dem Betriebssystem gegenüber als eine autonome Einheit, welche Berechnungen (Stichwort CUDA) auf die passende GPU verteilt, das Befüllen des Framebuffers als ein System realisiert.
  • beide Grafikkarten mit den dafür entsprechenden Daten (das linke Bild für GraKa1, das rechte für GraKa2) an

Ebene
Um das ganze noch komplizierter zu machen, kann das durch den Treiber, den Windowmanager oder durch deren Zusammenarbeit realisiert werden ;)

Ausmaß
Bei den ersten beiden Möglichkeiten würde z.B. eine 3D Applikation mit ihren notwendigen Berechnungen von der GPU der Host Grafikkarte bearbeitet werden, deren auszugebendes Bild je nach Monitorziel in den Framebuffer der entsprechenden Grafikkarte geschrieben werden.

Bei der dritten Möglichkeit würde die Grafikkarte, auf welcher initial die Darstellung der 3D Anwendung stattfindet, die Berechnung auch übernehmen, wenn das Fenster verschoben wird. Nur werden dann die Daten via Busmastering in den Framebuffer der 2. GraKa geschrieben (Experiment: eine 3D Anwendung auf dem einem und dem anderem Monitor starten und beobachten).
Die bisherigen 2D Inhalte werden weiterhin von der eigentlich angeschlossenen Grafikkarte verarbeitet.

Dazu kommt aber auch noch die Möglichkeit, das 3D Inhalte, egal auf welchem Monitor sie dargestellt werden, immer von der leistungsfähigeren Host Grafikkarte berechnet werden und wieder via DMS in den Framebuffer der leistungsschwächeren GraKa geschrieben werden (gleiches Experiment).

Um sowas dann adäquat zu bemessen und zu durchleuchten, müsste man den Datentransfer der Grafikkarten untereinander beobachten können sowie die Kommunkation der einzelnen Softwarekomponenten (Treiber, Windowmanager, 3D Anwendung).
 
Zuletzt bearbeitet:
Ist es möglich 3 Monitor anzuschließen, aber jeweils immer nur ZWEI davon unter Nvidia Systemsteuerung zu aktivieren ?? Erkennt Nvidia die 3 Monitor, ohne das ein Häcken gesetzt ist, sprich kein Signal.. (so wie im Screenshot 3 Monitore)

praktisch würde der 27'' immer aktiv sein, und als 2.Monitor würde ich unter der Nvidia-Systemsteuerung entweder den 52'' Philips oder Samsung 22'' auswählen.

Noch eine kleine Randfrage:

Wie kann ich es einstellen, das ein bestimmtes Spiel auf dem sekunderen Monitor angezeigt wird ?
btw: Ultramon bringt nichts..
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    63,8 KB · Aufrufe: 166
Zuletzt bearbeitet:
Ja zur ersten Frage.
Du machst den sekundären Monitor zum primären Monitor, oder das Spiel hat eine Möglichkeit einzustellen auf welchem "Device" es rendert. Ist eher selten.
 
- danke, ich konnte es endlich selber testen.. und es funktioniert :)

- auch mit dem sekundär auf primär setzen hat geklappt.. da muss ich halt für CS kurzweilig umstellen.

Frage:
was mir noch aufgefallen ist, wenn ich auf dem sekundären Monitor zb Firefox laufen habe und beim primären Monitor im Steam Menü bin und mit der Maus rüber gehe um zb kurz was in Firefox einzutippen, geht primär Monitor (wo zb CS läuft) automatisch aufm Desktop, obwohl Firefox im sekudären läuft..

IST das normal ?
 
Ganz normal. Passiert ja auch wenn Du nur einen Monitor verwenden würdest (wenn Du an früher denkst). Eine Vollbild-Anwendung minimiert sobald sie den Anwendungs-Fokus verliert.
Wenn Dich das stört: Fenster-Modus. Da gehts dass das Fenster bei Alt-Tab geöffnet bleibt. Verlierst halt ein bisschen Render-Leistung^^
 
eingentlich stört mich das nicht, aber gut zu wissen, danke :)
 
Zurück
Oben