Hallo miteinander,
hier und anderswo im CAD-Forum gibt es immer wieder die Frage nach geeigneten Graphikkarten für dieses oder jenes Programm.
Was sich daran anschließt ist zwar oft viel Diskussionsstoff:
-Diese Karte ist gut und diese ist schlecht...
-Nein umgekehrt...
-Finger weg von Spielekarten...
-Nein, Spielekarten sind auch gut, aber die und die Profikarte sind mies...
usw., usw...
Anfangen kann damit aber genauso oft nichts.
Da ich selbst nicht nur 3D-Anwender bin, sondern selbst auch 3D-Programme unter Verwendung von OpenGL und C++ erstelle und daher vielleicht näher an der Hardware (Graphikkarte + Treiber) dran bin, will ich hier ein wenig mit Hilfe von Hintergrundinfos zur Thematik und zur Aufklärung beisteuern.
Obwohl ich vieles nur oberflächlich ankratzen werde, wird das ganze doch ziemlich lang. Ich möchte aber nicht noch weiter kürzen, da sonst die Problematik wieder nicht ganz verstanden werden kann.
Was ist OpenGL?
Um 2D- und 3D-Objekte, welche innerhalb eines Programmes erstellt wurden, darzustellen, bedient man sich heute üblicherweise zweier APIs: DirectX und OpenGL. Da DirectX von Microsoft nur für Windows-Systeme entwickelt worden ist, hat sich als Industrie-Standard OpenGL durchgesetzt. Dieses läuft nicht nur unter Windows. OpenGL(wie auch DirectX) stellt dabei eine Sammlung von Befehlen dar (Open Graphics Library), die der Programmierer, besser gesagt sein Programm nutzen kann, um die 3D-Objekte von der Graphikkarte erzeugen zu lassen. Es stellt somit die Schnittstelle zwischen Programm und Graphikkarte dar.
Was ist eine API?
Eine API ist eine Festlegung/Definition, wie die Befehle einer Schnittstelle zu heißen haben, welches die Übergabeparameter zu den einzelnen Befehlen sind und was der einzelne Befehl zu erzeugen hat.
Vor allem letzterer Punkt ist wichtig. Der gleiche Befehl hat auf jedem System das gleiche zu erzeugen.
Die Festlegungen der API geschehen bei OpenGL von einem unabhängigen Konsortium (Architecture Review Board = ARB), zu dem derzeit SGI als die Urmacher von IRIS-GL und weiterhin 3DLabs, Apple, ATI, Compaq, Dell, Evans $ Sutherland, Hewlett-Packard, IBP, Intel, Microsoft, NVidia und Sun Microsystems angehören. Nur was hier verabschiedet wird, hat Gültigkeit und die OpenGL-Definitionen sind absolut eindeutig und zu 100% festgelegt.
Was ist ein Treiber?
Der Treiber stellt nun die softwareseitige Umsetzung der API dar und wird daher vom Graphikkartenhersteller bzw. vom Graphikprozessorhersteller erstellt, damit mit entsprechendem Befehl die Graphikkarte auch das tut, was in der API festgelegt ist.
Damit ist alles an Hintergrundinformationen, gegeben was zur weiteren Betrachtung notwendig ist.
Wo also liegen die Probleme?
Zuerst kann es Hardwareprobleme geben:
1. Einige Graphikkarten benötigen soviel Strom, daß das eingebaute Netzteil nicht genügend zu Verfügung stellt, wenn der Graphikprozessor auf volle Leistung geht. In diesem Moment schmiert dann das ganze System ab. Hier gilt es die notwendige Leistung/Watt beim GraKa-Hersteller zu erfragen.
2. Weiterhin gibt es Unverträglichkeiten zwischen einzelnen Motherboards und Graphikkarten. Auch hier ist beim GraKa-Hersteller nachzufragen.
Zum guten Schluß noch die Treiberproblematik:
Für die Insider: Ich bleibe hier zum Teil ziemlich oberflächlich. Wenn also etwas im Detail nicht ganz korrekt formuliert ist, so ist dies mit der Absicht geschehen, nicht noch tiefer vordringen zu müssen. Dies ist für den Anwender eigentlich eh uninteressant.
3. So eindeutig die OpenGL-API ist, so schwierig scheint es wohl zu sein, die Treiberumsetzung zu gewährleisten. Dabei muß nicht jeder OpenGL-Befehl beherrscht werden. Kann ein Befehl nicht umgesetzt werden, weil die Graphikkarte diese Leitung/Funktion nicht bietet, so hat der Befehl einfach nicht beachtet zu werden. Auch eine Fehlbedienung durch den Programmierer ist ziemlich unwahrscheinlich, da OpenGL hauptsächlich nur aus Schaltzuständen besteht. Wird ein unsinniger Parameter übergeben, so hat OpenGL den Befehl nicht auszuführen. Alles eindeutig festgelegt.
Hierzu ist noch zu sagen, daß es für den vollwertigen OpenGL-Treiber einen Namen gibt. Dieser nennt sich OpenGL-ICD = Installable Client Driver. Um diesen bedienen zu können, muß eine Graphikkarte zum Beispiel mindestens 32MB Graphikkartenspeicher haben, da sonst gewisse Befehle nicht durchführbar sind.
Nochmals gilt es zu sagen: Alles eindeutig festgelegt. Und trotzdem kriegen die GraKa-Hersteller das nicht hin. Ich jedenfalls kenne bisher keinen OpenGL-Treiber, der die API 100% fehlerfrei umsetzt.
Mal sind sie besser, mal wieder schlechter und dann wieder besser. Aber immer tut das eine oder andere nicht.
Die GraKa-Hersteller wissen das und hier liegt auch der Hund mit den Spielekarten begraben. Eine Spielekarte ist grundsätzlich nicht ungeeignet. OpenGL kennt da keine Unterschiede. Nur die Treiber werden bei Spielkarten eben mit aktuellen und anspruchsvollen 3D-Spielen getestet, entwickelt und korrigiert. Es kann allerdings gut sein, daß dabei ein Treiber herauskommt, der seine Fehler dort hat, wo sie in eine 3D-CAD-Anwendung überhaupt nicht stören. Oder gerade erst recht.
Umgekehrt sollte es bei 3D-CAD-Karten so sein, daß die Treiber mit CAD-Anwendungen getestet und entwickelt worden sind. Sicherheit bezüglich Fehlerfreiheit bringt das aber auch nicht, wie sich das aus Beiträgen zeigt. Dies liegt unter anderem auch daran, daß die GraKa-Hersteller die Treiber nicht mehr selbst entwickeln, sondern zum größten Teil vom Graphikprozessorhersteller übernehmen. Und was der testet, steht wieder auf einem anderen Blatt.
Bezüglich der Graphikprozessor-Hersteller kann noch folgendes gesagt werden:
ATI hat generell immer auch sehr günstige Karten/Prozessoren hergestellt. Da aber nicht Karte/Prozessor das schwierige ist, sondern ein korrekter Treiber, scheint klar zu sein, wo hier billig ist.
Nvidia hat die ersten günstigen Karten mit halbwegs vernünftigen OpenGL-ICD herausgebracht. Selbst Profikarten waren damals zum Teil erheblich schlechter oder leistungsschwächer. Bestimmt auch ein Grund für deren gigantische Entwicklung.
Und jetzt das traurige Fazit:
Sofern Punkt 1. und 2. beachtet worden sind, gilt es immer noch:
Jede Karte muß in jedem System getestet werden.
Auch ich habe dies bei meinen Programm-Entwicklungsrechnern so durchführen müssen. Denn schließlich muß ich mir immer sicher sein, daß gegebenenfalls die GraKa den Fehler einer Darstellung erzeugt und nicht meine Programme. Die letztendlich benutzten Karten haben bei meinem System dann auch bei 3D-CAD-Programmen in Tests nie mit Instabilitäten reagiert oder sonst irgendwie versagt.
Für das neue System mit SWX bei meinem zukünftigen Arbeitgeber werd' ich also wieder genau so vorgehen müssen.
Damit also viele gute Nerven beim Testen
Markus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP