Automatische Multi-Core Nutzung mit C++?
-
Hallo,
Ich habe bei einem Projekt von mir etwas seltsames festgestellt.
Ich entwickle mit dem MS Visual Studio 2003 ein kleines OpenGL Game, und habe in den Compiler-Optionen so ziemlich alle Optimierungen angestellt die ich gefunden habe (SSE usw.)Seit kurzem habe ich nun ein Dual-Core System und habe festgestellt, dass das Game rechenleistung von beiden Kernen beansprucht, die Bilder pro Sekunde gehen von ca. 3000 auf 2000 zurück wenn ich meine .exe nur auf einen Kern limitiere.
Nun frage ich mich wie das passieren kann, ich dachte immer für Multi-Core Systeme muss man Threads in sein Programm einbauen, um diese Threads dann auf die Kerne aufzuteilen?
Kann mir dieses, ich nenne es einmal Phänomen, irgendjemand erklären? Vielleicht ist der Grund mein intensiver Einsatz von Klassen? Ich habe keine Ahnung....
Mein System:
-Intel Core2Duo E8500 @ 3,16 Ghz
-Windows Vista Ultimate 64bit
-
Es kann ja sein, das die Libraries, die du verwendest, bereits Multithreaded sind. Z.B. kannst du ja die Standard-Runtime ja auch bereits auf Multithread stellen. Oder DirectX kann ja auch Multithreaded sein. Dein Programm selbst macht wahrscheinlich nicht viel. Bei 3D-Grafik wird wohl eher Direct3D ordentlich von dir beansprucht...
-
DirectX hat bei mir nichts zu suchen, läuft wie gesagt über OpenGL.
Aber das währe natürlich eine mögliche Erklärung, hab gar nicht drüber nachgedacht dass die OpenGL Libraries ja multi-threaded sein können.
Das würde auch erklären warum ich nur auf 70% CPU Auslastung komme, wobei meine 1. Kern fast zu 100% beansprucht wird und der zweite nur zu ca. 50%. Mein Hauptprogramm läuft mit voller Leistung auf dem 1. Kern und einige OpenGl Funktionen laufen zum Teil auf dem 2. Kern ab, brauchen aber weniger Zeit als das Hauptprogramm.