CLI kombiniert mit nativem C/C++



  • Viel mehr gibts da auch nicht zu wissen. Damit sagst du nur dem Compiler, dass die Funktion exportiert werden soll. Dlls haben eine Tabelle mit Funktionen, die sie exportieren. Wahnsinnig viel mehr Zusammenhänge gibts da auch nicht, da schreibt man keine Bücher drüber.

    Ist dein Algorithmus so komplex oder könntest du ihn probeweise und C und in C# implementieren? Mich würd hier echt mal interessieren, ob du mit C spürbar schneller bist. Ich selber hab noch nie performancekritische Anwendungen in C# geschrieben. Mich würde mal interessieren, wie gut der JIT Compiler von .NET hier optimieren kann, eigentlich müsste er sowas genauso gut wie der C++ Compiler optimieren können.
    Ich denke, wenn Faktor 2 für dich ein Quantensprung ist, wirst du grundsätzlich noch einiges optimieren können. Mehrere Threads, SSE, CUDA usw...



  • Wenn du derart große Gleichungssysteme mit guter Performance und Genauigkeit lösen willst, willst du in der Regel wohl eher irgendeine bewährte Numerikbibliothek verwenden und das auf keinen Fall selbst schreiben!?



  • ...also, der eigentliche Lösungsalgorithmus... das sind drei ineinander geschachtelte Schleifen... das ist am Ende ein 30-Zeiler.
    Da kann ich, wenn es so weit ist, mal nen Benchmark machen.

    Vielleicht kann der C#-Kompiler das auch gut übersetzen - viel muss er nicht machen - einfach in den Maschinencode übersetzen. In diesem Löser gibt man ihm über die Zeiger eigentlich alles vor. Über ein gutes Memory-Management muss man sich im Vorneherein Gedanken machen, um einen schnellen Zugriff zu erhalten. Kann man in C# auch auf einer sehr niedrigen Ebene arbeiten, also Einfluss darauf nehmen, wies die Elemente im Speicher liegen, wie es in C der Fall ist?

    Wir OpenMP unterstützt? Oder hat das Microsoft seine eigene Variante für Parallelisierung?



  • In dem Fall ist es sehr wahrscheinlich, dass du da auch mit C# ausreichend schnell, wenn nicht sogar praktisch gleich schnell bist...



  • ...welcher die Performance von C++ mit C# vergleicht.
    http://megos.wordpress.com/2009/06/06/die-performance-von-c-sharp-programmen/

    Sehr interessant ist ein Link zu einem Buch welches sich mit der Performancesteigerung bei C# beschäftigt:
    "Effective C#: 50 Specific Ways to Improve Your C#"

    Auch habe ich einen Weg gefunden, OpenMPI in C# über einen Umweg einzubauen.

    Resumet: Die wirklich rechenintensiven Methoden werde ich wohl in C++ schreiben und dann über DLL importieren, denn ich benötige bei solchen Gleichungssystemen (Matrizen) sehr viele Zugriffe auf die Daten - und es handelt sich dabei nicht um sequenzielle Zugriffe, so dass C# bei jedem Zugriff den Index intern prüfen würde. Gerade bei Gleichungslösern ist jedoch der Speicherzugriff das, was am meisten Zeit benötigt. Hier sind Numerikbibliotheken natürlich optimiert, aber ich will es einmal selbst machen - dann werde ich sicher auch auf Boost-Bibliothek oder ATLAS zurückgreifen.

    Aber mit C# kann man wohl doch vieles ohne den Einsatz von C++ schnell bearbeiten. Der Einsatz von OpenMPI begünstigt dies.



  • Willst du das Gleichungssystem dann auf einem Cluster lösen, oder wofür genau brauchst du MPI?



  • CJens schrieb:

    Sehr interessant ist ein Link zu einem Buch welches sich mit der Performancesteigerung bei C# beschäftigt:
    "Effective C#: 50 Specific Ways to Improve Your C#"

    In dem Buch geht es nicht um Performance, jedenfalls nicht primär. Nicht, dass du da mit falschen Hoffnungen herangehst...



  • dot schrieb:

    Willst du das Gleichungssystem dann auf einem Cluster lösen, oder wofür genau brauchst du MPI?

    Naja, lokalparallel. Ich will mich nicht zu tief in die Parallelisierung vertiefen, aber einfache Schleifen würde ich schon gerne Parallelisieren. Das geht ja mit Open MPI sehr schön.





  • Nur um das klarzustellen... Ich glaube, du meinst Open MP, nicht MPI.


Anmelden zum Antworten