Thema: Delphi DelphiX Cpu Entlastung ?

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: DelphiX Cpu Entlastung ?

  Alt 4. Feb 2007, 13:43
Zitat von ebber:
Hallo

ich dachte DelphiX ist um damit auf DirectX zuzugreifen, welches dazu dient den Cpu bei grafischen Berechnungen zu entlasten und das auf die Grafikarte zu übertragen ?

Verstehe ich da nun irgendwas falsch ?
Hi,
ja da verstehst Du etwas falsch. DelphiX ist einfach nur eine Kapselung der DirectX-Funktionalität (bzw. Teile davon) in Delphi. Dies ermöglicht Dir nur von Delphi aus auf DirectX zuzugreifen. Soweit so gut.

DirectX wiederum ist keineswegs dafür da die CPU zu entlasten. DirectX ist eine Sammlung von Schnittstellen (DirectInput, Direct3D,...). Eine Schnittstelle hat den Vorteil, dass sie einfach festlegt, was für Funktionen verfügbar sind und was diese machen. Wie das ganze geschieht bleibt für Dich verborgen. Der Vorteil liegt dann darin, dass ganz unterschiedliche Hersteller von z.B. Grafikkarten die Funktionalität auch recht unterschiedlich implementieren können. Unterstützen sie die Direct3D Funktionalität in Version XYZ, dann kannst Du beide über die gleiche Schnittstelle ansprechen.
DirectX dient also vorallem als einheitliche Schnittstelle, so dass jeder Programmierer einfach auf diese Schnittstelle setzen kann (ohne die tatsächlich vorhandene Grafikkarte zu kennen).
Um hier den Perfomance-Ansprüchen (gerade in modernen Spielen) der Kunden gerecht zu werden, wird ein großteil der DirectX-Funktionalität natürlich direkt von der HW unterstützt. Ob dies auf dein Grafikkarte zutrifft und wie Du die Funktionen aufrufst, das weiß dann der Treiber. Dieser vermittelt quasi zwischen dem Aufruf des Programms und dem tatsächlichen Anzeigen auf dem Bildschirm. Die Funktionalität der Schnittstelle ändert sich (wenig überraschend) mit jeder Version. I.d.R. kommen hier neue Funktionen hinzu, die irgendwas besser/schöner/schneller machen sollen. Kommt eine neue Version raus oder muss an dem Chip
gespart werden (z.B. weil es eine Low-Budget-Version ist), wird nicht der volle Umfang der Schnittstelle direkt in HW implementiert. Für diese Fälle können die Funktionsaufrufe einfach per SW gerendert und an die Grafikkarte geschickt werden. Das ist dann wiede CPU lastig, erspart Dir aber auch den Kauf einer neuen Karte. Ob eine bestimmte Funktion von der Karte unterstützt wird oder nicht lässt sich einfach abfragen, Windows kann also einfach unterscheiden ob ein Aufruf direkt an den Treiber geht oder per SW gerendert wird.
Keiner der Wege wiederspricht dabei der Idee hinter DirectX (auch wenn man sich natürlich immer Perfomance wünscht).

Die andere Sache ist dann die Arbeitsweise einer Komponente. Ich hab mir den Quellcode nicht angeschaut und weiß auch nicht wie DelphiX genau arbeitet, aber häufig versetzt man Programme einfach in eine Endlosschleife, die auf etwas bestimmtes wartet. Typisches Beispiel wären hier auch gleich die meisten Windows-Fenster-Programme. Diese warten auch die ganze Zeit nur auf Nachrichten (die z.B. durch Interatkionen des Benutzers ausgelöst werden). Kommt eine Nachricht an, wird eine Ereignisbehandlung aufgerufen und das Warten beginnt sofort von vorne.
Bei DelphiX kommt eventuell einfach ein Ählicher Mechanismus zum Einsatz. Dafür werden meistens Threads mit niedriger Priorität verwendet. Solange nichts anderes zu tun ist, bekommt ein solcher Thread natürlich die volle CPU Zeit (die Anzeige steht bei 100%). Sobald nun aber eine andere Anwendung/ ein anderer Thread gestartet wird, hat dieser normale und damit höhere Priorität (außer auch hier wird die Priorität geändert). Ein solcher Thread würde also bevorzugt behandelt werden und nicht unter den 100% Last leiden.
Anders gesagt, die Anzeige ist hier nicht Objektiv. Die CPU ist zwar ausgelastet, aber die hier verbrauchten Ressourcen stehen auch sofort jedem anderen zur Verfügung. Würdest Du die komplette Grafik SW rendern, wirst Du den Unterschied schnell merken (da steht dann das Restprogramm solange Grafikoperationen laufen oder umgekehrt).

Gruß Der Unwissende
  Mit Zitat antworten Zitat