PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Volume Raycasting in C# - Performance Probleme von P4 und Core 2


Novox
2007-05-27, 19:34:30
Ich schreibe zur Zeit eine Art simplen Volume Raycaster zur Visualisierung von FE-Simulationsdaten. Es handelt sich aber nicht um einen Volume Raycaster im klassischen Sinne (Interpolation, Resampling, Compositing). Vielmehr sind die zu visualisierenden Daten (Knochenkonzentrationen) innerhalb einer Zelle als konstant anzunehmen. Der Raycaster berechnet daher die exakte Strecke, die ein Strahl innerhalb einer Zelle bzw. eines finiten Elements zurücklegt, um die daraus resultierende Dämpfung zu berechnen. Das nur zum Verständnis.

Nun zum eigentlichen Problem. Das Ding ist in C# geschrieben und während der Entwicklung hauptsächlich auf Rechnern mit K8-CPUs (sowohl Athlon 64 als auch Opteron) getestet worden. Für mittelgroße Modelle erreicht der Raycaster auf meinem privaten Athlon 64 X2 4200+ etwa 230 kRays/s (zwei Threads). Nicht überwältigend, aber ausreichend für unsere Ansprüche.

Ganz anderes auf einem Xeon DP (Prestonia, 3,06 GHz, 2 GiB RAM): die Performance sackt hier auf weniger als 10% der Renderingleistung des Athlons ab. Das erscheint mir doch ein wenig arg viel, trotz der völlig anderen Architektur. Spaßeshalber hab ich's auch mal auf meinem Notebook (Core 2 Duo T5500, 2 GiB RAM) getestet. Das kommt auf etwa 20%
.

Offenbar veranstalte ich da etwas, was den Intel-CPUs gar nicht schmeckt. Aber was? Laut PerfMonitor liegt der CPI-Wert beim Athlon während des Renderings zwischen 0,9 und 1,2. Beim P4 geht er entsprechend seiner "Renderingleistung" auf etwa 13 - 15 CPI hoch. Laut dotTrace verbringt der Core2 auch etwa zehnmal mehr Zeit in den Intersects-Methoden (AABB und Dreieck) wie der Athlon. Woran kann das liegen? Speicherzugriffsmuster? Branching? x87-Code? Hat vielleicht einer von Euch 'ne Ahnung, wo ich da ansetzen könnte?

Edit: :redface: Tja, war wohl die Allokation in der innersten Schleife... wie unfaßbar peinlich. :biggrin:
Edit: VTune funktioniert nicht, aber dotTrace hat geholfen.

transstilben
2007-05-28, 00:35:32
Ich würde mir das ganze mal mit Intel VTune ansehen:

http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=232&lang=deu

bzw.

http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=1631&lang=deu

Coda
2007-05-28, 00:37:56
VTune funktioniert bei managed Code wohl eher nicht.

DaEmpty
2007-05-28, 14:06:26
VTune funktioniert bei managed Code wohl eher nicht.
Intel sieht das anders.
Optimize Microsoft .NET applications including C# and Visual Basic.
http://www.intel.com/cd/software/products/asmo-na/eng/vtune/219898.htm

transstilben
2007-05-28, 18:54:43
Es gibt auch noch ein paar weitere Tools von Intel mit denen
man insbesondere Multithreaded Applikationen bzgl. Performance
untersuchen kann. Link hab ich gerade nicht da; findet man aber leicht
bei Intel.