Benutzt C++ den Coprozessor?
Ich habe eine 3D-Engine in VB08 geschrieben. Jetzt möchte ich Teile nach C++ portieren, weil VB bei 5000 Teiltransparenten Polygonen mit AntiAliasing "nur noch" 8fps schafft. Doch wenn C++ den Coprozessor für Mathematische Operationen nicht nutzt, wird es eher langsamer.
Ich möchte sowieso nur die Teile auslagern, die Berechnungen durchführen. Die Polygone müssen mit einer .NET-basierten Sprache geschrieben werden, weil GDI+ die zur Zeit wohl schnellste Möglichkeit für umfangreiche Graphikausgaben (Gepuffert, Transparent, AntiAliasing) ist. Da GDI+ sowieso in C geschrieben ist, dürfte das kein Problem darstellen. VB ist aber Coprozessorgestützt, so dass umfangreiche Berechnungen (Drehungen, Transformationen) vielleicht in C++ nicht schneller wären. Es geht mir darum, den GPU aus dem Spiel zu lassen, um eine unabhängige Plattform zu schaffen. Ich habe das alles achon in VB geschrieben, so dass ich es nur noch nach C++ portieren muss. Außerdem habe ich mir gedacht, dass ich das Programm wie folgt für Quadcore-Prozessoren mit Coprozessor optimiere:
Core1: Windows+Programme
Core2: Transformationen, Rotationen->CoCPU
Core3: 3D-Modell-Berechnung-CoCPU
Core4: Darstellung->GDI+
Rest siehe nächste Details
Die Threads würden sich in VB weit effizienter gestalten lassen, da ansonsten alle paar ms tausende von Polygonen nach C++ und zurück übergeben werden müssten. Das ist nicht besonders schnell und verursacht overhead und 2-3 mal so viel Ram-Verbrauch. Das bedeutet (ohne Overhead) bei 10000 Polygonen und 20fps und 3 Threads mit hin und Rückübergabe 220MB Netto, wobei noch ca 20% overhead und der Normale Verbrauch verbleibt. Außerdem der Verbrauch der Quelle, die die Rohdaten produziert. Macht so 300-500MB (Mit Cache für Threadsyncronisation gut 600-700MB), was schon ausreicht, um ein gutes System zum Absturz zu bringen. Nur in VB würde ein drittel, also 250MB genügen.