Wieso? Die anfallenden Arbeiten für CPU und GPU sind ja von Spiel zu Spiel unterschiedlich. Sogar von Szene zu Szene, von Sekunde zu Sekunde. Mikroskopisch betrachtet hast du Gleichmäßigkeit, makroskopisch dann eher "Chaos".
Ne so mein ich das nicht...
Betrachten wir ein Frame als ein Ganzes, so hast du bei 33FPS eben eine Zeitspanne von gemittelten 30ms.
Der Zeitanteil der CPU muss in diesen 30ms mit drin sein...
Nach der Theorie von dir oben ist die CPU durch ihre vorherige Berechnungen für den MR Versatz zuständig.
Da aber jedes Games bei den zu vergleichenden möglichst konstanten 33FPS immer besagte 30ms pro Frame zur Verfügung haben, bedeutet das, das in so manchem Game die GPU deutlich eher mit dem Bild fertig wird, und der CPU Anteil dieser 30ms deutlich höher ist als in anderen Games. Denn der Versatz variiert bei um die 30FPS teils sehr stark. Mal sinds nur paar wenige ms, mal 10, mal 15 usw. (das ganze kannst du natürlich auf mehrere GPUs hochrechnen, genau so auf mehr als nur ein Frame)
Das ist halt der Punkt... Das der CPU Zeitanteil schwanken kann, ist klar, aber der GPU Anteil kann nicht in Spiel A für 33FPS 20ms brauchen und für Spiel B eben nur sagen wir 15ms. Wäre das der Fall, würde die Leistung in FPS deutlich ansteigen müssen.
Auch wäre dann die Szene im Vergleich unpassend. Denn die Leistung steigt.
Ist die Frage - was genau baut aufeinander auf? Rein beim Rendering kann ich mir das nicht vorstellen. Ich würde eher sagen, es kommt auf die Interaktionen des Spielers mit der Spielwelt an. Bewegt er sich, schießt oder macht sonstwas, beeinflusst das natürlich, was gerendert werden muss. Diese Informationen kommen kontinuierlich rein. Ob in einem langsameren oder schnelleren Rhythmus als gerendert wird, weiß ich nicht. Wenn ich geradeaus laufe, wie oft wird die Eingabe dann abgefragt? Alle 10ms, alle 5?
Die Eingabe wird denke ich doch nicht abgefragt, sondern die Eingabe kommt wie sie kommt. Bewegst du die Maus, so wird ein stetiger Strom an Daten (mit leichter Verzögerung durch USB) an den PC geliefert. Ich denke nicht, das es dort ein hartes Zeitintervall Fenster gibt. Denn dann wären Mausbewegungen rucklig.
Dazu kommt, es hängt ja nicht nur an der Interaktion des Menschen...
Es können ja auch andere Ereignisse interagieren. Beispielsweise wenn ein NPC über einen bestimmten Punkt raus geht, passiert irgendwas.
Normal arbeitet man soweit mir bekannt mit Offsets von Werten. Das heist, ich bewege beispielsweise Körper A in der X Achse um 10 Einheiten usw.
Aber für diese Bewegung muss vorher klar sein, wo war das Teil vorher. Das heist, ich brauch die Daten des Vorframes.
Hart positionieren in dem Fall gestaltet sich auch recht schwer, da wiederum klar sein muss, was sieht der Betrachter überhaupt...
Ja da hab ich natürlich Quatsch geschrieben

Ich meinte, eine GPU braucht 50ms für ein Bild, zwei GPUs brauchen 50ms für zwei Bilder. Der kleinste (parallele) Block ist aber weiterhin 50ms, nicht die aus den schlussendlich angezeigten 40fps errechneten 25ms.
Aber aber dennoch bleibts doch bei 40FPS und 25ms pro Bild... Das mindestens zwei Bilder kommen müssen, ist logisch. Sonst geht das nicht auf. Aber das ist ja beim Gamen der Fall...
Halt mal. Hier machst du einen essentiellen Denkfehler. Laut deinen Diagrammen rendert das System jetzt viel schneller wie du es eigentlich angibst. Alle 10ms wird ein Frame rausgehauen - das sind 100fps! Nicht 33, 25 oder 20. Und damit ist deine ganze Rechnung leider für die Katz. Die 100fps hast du übrigens in allen drei Diagrammen, was ja nicht wirklich sein kann
Mhh OK, ich seh grad die Erklärung über den Bildern ging nach hinten los, aber schau nochmal genauer... Oben die 10ms Abstände sollen nur als Skala dienen um zu verdeutlichen, das pro Kasten eben 10ms Abstand gemeint sind.
- Im ersten Bild schmeiße ich 3 Bilder nach 50ms raus (aber 6 nach 80ms raus). Weitergerechnet auf 1000ms wären das 75 Bilder. Also 75 FPS. Hier limitiert der 10ms CPU Teil die schnellere GPU Berechnung, weil GPU 1 mit Frame 4 erst nach 10ms Leerlauf beginnen kann.
- Im zweiten Bild kommen die 6 Bilder nach 90ms raus. Also 66,66FPS.
- Im dritten Bild kommen die 6 Bilder nach 110ms raus. Also 54,54FPS...
Das ganze kannst du nun weiter hoch ziehen. Um so länger der GPU Teil, bei gleichem CPU Teil, desto niedriger die FPS im Beispiel.
Ich stelle mir das eher so vor:
http://www.abload.de/img/mrvm1d.png
Das Rote oben ist die CPU. Denke, das Bild ist selbsterklärend. Das einzige, was ich nicht gemacht hab, ist die CPU-Zeit in die Zeit für ein Frame zu packen. Macht aber nur 10ms aus und ändert an der Grundaussage nichts.
Die CPU-Blöcke 4 und 7 sind doppelt, weil hier irgendwo eine Bremsung stattfinden muss. Würden die Blöcke ohne Pause aneinandergereiht, würde ja das passieren, was ich oben schon geschrieben habe - die zeitliche Differenz zwischen Vorarbeit_n und n-tem Bild würde immer größer werden. Irgendwo zwischen den beiden Blöcken mit "4" muss die CPU also Bild 4 vorbereiten. Vorher kann sie nicht, da ist sie mit 3 beschäftigt. Später als der zweite Block "4" ist auch ungeschickt, weil dann zu den 70ms Versatz nochmal 10ms dazukommen würden.
Problem hierbei: Die CPU weiß nicht, wie lange GPU 1 rendern wird. Eigentlich müsste sie die Daten so schnell wie möglich bereithalten, denn statt 90ms könnte GPU 1 ja vielleicht auch nur 30 brauchen und die neuen Daten sofort benötigen ohne Pause.
Nochmal: Deine GPUs rendern zu schnell

Eine GPU wird für ihr zugewiesenes Bild immer 3x (bei perfekter Skalierung) so lang brauchen wie 3 GPUs zusammen, die ja die (gemittelte) Framerate letztendlich angeben.
Neja mein drittes Bild im GPU Limit entspricht ja quasi deinem. Nur das ich die CPU Zeit noch mit im Frame habe. Und ja, du hast recht, die CPU weis nicht, wann GPU 1 in dem Fall fertig ist, und weis logisch auch nicht, wann sie mit dem Vorberechnen von Frame vier beginnen muss... Ich denke ich verstehe was du mit bremsen meinst... Vllt gibts hier dann wirklich was von wegen Treiber Queue gibt den Speed vor oder irgendwie anhand des Framebuffers oder sowas wird abgezählt.
Bei DX9 scheints hier ja vllt auch einfach zu sein, denn dort geht AFR nur mit zwei vorgerenderten Bildern. Das heist, mehr wie drei in Summe sind ja nicht drin. Ich könnt mir zum Beispiel vorstellen, die CPU berechnet Bild vier vor, sobald ein Frame aus dem Framebuffer raus fliegt, so wäre immer ne konstante Anzahl an Frames im Umlauf. Bei größer DX9 klappt das aber so nicht. Wobei man dann hier sicher auch anhand der GPU Anzahl ein viertes in dem Fall vorbereiten könnte, das fünfte aber erst beginnt, wenn das erste hinten rausgespuckt wurde.
Aber OK, mein Problem bei der Betrachtungsweise ist immernoch, das ich nicht den CPU Zeitanteil für den Versatz verantwortlich machen will. Vergleiche mal ein paar Fraps Messungen... Das schwankt mal mehr mal weniger. Wie oben schon angesprochen müsste aber gleich identischer FPS Rate der GPU Anteil, also die Zeit, die die GPU hat um die Berechnung anzustellen identisch sein bei gleicher FPS Rate. Oder steh ich da völlig auf dem Schlauch?
Ich hab grad mal Heaven 2.5 bei mir laufen gehabt. Mit den beiden OCed 470ern komme ich mit angehaltener Cam. beim Tess Drachen auf um die 30 FPS. Die Anzeige schwankt nicht. Vllt wäre das eine gute Stelle um mal die Frametime Unterschiede bei massiver Taktänderung der CPU zu prüfen. Vorteil ist, die Stelle kann man komplett einfrieren. Durch anhalten der Cam.
Werd ich mal probieren... Einfach unter Windows den Multi runter drehen müsste ja gehen und das Bild bleibt kommt auch sauber wieder beim zurück "tabben"...
Es heißt Skalierung bitte

Dass NV was macht, glaub ich denen schon, nur bringen tut es nichts. Ich spüre die Mikroruckler ganz deutlich. Ohne Limiter mag ich da nicht spielen.
Wie auch immer, ich denke du weist was gemeint ist

Skalierung mit einem "l" sieht irgendwie mies aus
Naja es ist zur Zeit auch fraglich ob Mikrorucker tatsächlich von diese Sprünge kommen, denn dann müsste bei 3gpu-s z.B. immer jede 3. Frametime besonders groß sein.
In der Theorie ja. Aber die Unbekannte ist eben die Zeit, welche die CPU braucht. Kommts allein von der CPU, so müsste eben durch massive Taktsänkung der CPU Zeitanteil größer werden. Und somit die Frametimes in Summe länger bzw. der Versatz im gleißen Maße eben steigen.