Simulationen

Hallo,
ich habe eine Frage zu den verschiedenen Programmiersprachen:
Gibt es Geschwindigkeitsunterschiede?

Ich möchte nämlich eine größere Simulation schreiben, möchte aber einen möglichst schnellen Code haben.

Welche Programmiersprache (und eventuell ein Compiler) ist da zu empfehlen?

MfG,
P. Falke

Moien

ich habe eine Frage zu den verschiedenen Programmiersprachen:
Gibt es Geschwindigkeitsunterschiede?

jein, hängt davon was da vergleichen werden soll. Fortan und C++ nehmen sich z.B. nicht viel. Bei Skriptsprachen wie javaskript, Perl und Co sieht die Sache schon anders aus.

Dann hängt sehr viel vom Compiler ab. Ein guter C-Compiler holt 20-40% mehr raus als ein Wald-und-Wiesen Teil.

Bei den Skript und Bytecode Sprachen spielt auch die ausführende Umgebung eine grosse Rolle. Bei java holt eine gute aktuelle JVM Faktor 15 (1500%) mehr Leistung raus als ein alte.

Ich möchte nämlich eine größere Simulation schreiben, möchte
aber einen möglichst schnellen Code haben.

Du könntest auch gleich einen Schritt weiter gehen und deine Simulation auf einer GPU ausführen lassen. GPU-Programmierung ist nicht mehr so hard wie sie es einmal war und Simlationen lassen sich (je nach Gebiet) sehr gut darauf umsetzen. GPUs sind bei bestimmten Problemen grob Faktor 80 schneller als CPUs.

Welche Programmiersprache (und eventuell ein Compiler) ist da
zu empfehlen?

Ohne weitere Information: C/C++ und der Intel Compiler.

cu

Welche Programmiersprache (und eventuell ein Compiler) ist da
zu empfehlen?

Ohne weitere Information: C/C++ und der Intel Compiler.

Also erstmal danke für die Hilfe.

Ich hab jetzt aber noch zwei kleine Frage:
Ich habe bisher meistens in Visual C# programmiert. Wie schnell ist diese Sprache, im Vergleich mit C++?
Gibt es den Intel Compiler auch für Windows als Download? Sonst würde ich nämlich auf das Microsoft C++ Studio zurückgreifen, wenn es denn schnell genug ist.

Moien

Ich hab jetzt aber noch zwei kleine Frage:
Ich habe bisher meistens in Visual C# programmiert. Wie
schnell ist diese Sprache, im Vergleich mit C++?

Das hängt davon ab mit welchem C++ man es vergleicht. VisualStudio kennt da schon 2: C++.NET mit managed Klassen (kein malloc, free,…) und das alte C++. C++.NET und C# sind ziemlich exakt gleich schnell (weil beide zur gleichen symbolischen Basis übersetzt werden und erst danach die Optimierungen kommen).

Der Vergleich C# vs altes C++ ist komplexer. C# (wie alle anderen .NET Sachen auch) braucht das .NET Framework zum arbeiten. Da ist nix wirklich schlimmes drin. Aber der Garbage Collector, also die Speicherverwaltung ist langsamer als die Speicherverwaltung von C++ (das hat nicht wirklich eine und man macht alles selbst). Dann fügt .NET immer range checks beim Zugriff auf Arrays ein. Das ist auch nicht weiter wild weil die Checks recht klever gemacht sind und meistens nur einmal pro Schleife eingefügt werden (und nicht 1x pro Schleifendurchlauf). Meistens aber nicht immer. Wenn die Laufvariable über 5 Ecken zum Index verarbeitet wird kommt ein Check vor jeden Arrayzugriff.

Je nach Programm und Styl kann man zwischen ein paar wenigen und 20% verlieren. Dafür hat man aber alle Annehmlichkeiten einer Sprache mit eigener Speicherverwaltung und muss sich nicht um memleaks oder bufferover/underflows Gedanken machen. Rechenzeit kostet i.d.R. weit weniger als Arbeitszeit der Entwickler, also tendieren die meisten zu Sprachen mit eingebauter Speicherverwaltung.

Gibt es den Intel Compiler auch für Windows als Download?

Es gibt eine free eval hier: http://www.intel.com/cd/software/products/asmo-na/en…

Dann solltest du unbedingt die Performance Libraries von Intel durchkucken. Die sind Standardalgos die von Intelfachleuten sehr stark optimiert wurden. Die berücksichtigen Details der Intel Chips an die man als normaler Programmier nie kommen würde. Wenn du einen AMD-Chip hast wird die Sache etwas frickler. Man kann den Libs abgewöhnen bei AMDs deutlich langsamern Code zu nutzen, aber es ist nicht ohne.

Intels VTune kann einem helfen nachher die Performance des eigenen Codes zu optimieren. Das braucht Intel Chips.

Die Numerical Recipes sind auch eine gute Anlaufstelle. Nicht ganz so performance optimiert und orientiert wie die Intel P-Libs sind sie dennoch schnell und gut durchgetestet.

Sonst würde ich nämlich auf das Microsoft C++ Studio
zurückgreifen, wenn es denn schnell genug ist.

Der mitgelieferte ist angeblich ganz ordentlich, reicht dem von Intel aber nicht das Wasser.

cu

Dann solltest du unbedingt die Performance Libraries von Intel
durchkucken. Die sind Standardalgos die von Intelfachleuten
sehr stark optimiert wurden. Die berücksichtigen Details der
Intel Chips an die man als normaler Programmier nie kommen
würde. Wenn du einen AMD-Chip hast wird die Sache etwas
frickler. Man kann den Libs abgewöhnen bei AMDs deutlich
langsamern Code zu nutzen, aber es ist nicht ohne.

Naja, das Problem ist, ich habe einen AMD Athlon 64. Und mit dem anpassen von Libs habe ich mich noch nie beschäftigt.

MfG,
P. Falke

Hallo P.Falke,

ich habe eine Frage zu den verschiedenen Programmiersprachen:
Gibt es Geschwindigkeitsunterschiede?
Ich möchte nämlich eine größere Simulation schreiben, möchte
aber einen möglichst schnellen Code haben.
Welche Programmiersprache (und eventuell ein Compiler) ist da
zu empfehlen?

Um welche Simulationen handelt es sich konkret
und mit welchen Datensätzen arbeiten diese.

Um „wieviele“ Simulationen geht es - und sollen
diese Simulationen ggf. auf Großrechner
ausgelagert werden können?

Grüße

CMБ

Um welche Simulationen handelt es sich konkret
und mit welchen Datensätzen arbeiten diese.

Um „wieviele“ Simulationen geht es - und sollen
diese Simulationen ggf. auf Großrechner
ausgelagert werden können?

Ich plane eine Simulation mit ca. 100.000 Objekten, die sich gegenseitig beeinflussen.
Die Simulation soll so schnell werden, dass diese nicht auf einem Großrechner gerechnet werden muss, sondern auch auf „normalen“ Computern in einem guten Zeitraum (maximal 2 volle Tage) berrechnet werden kann.

Hallo,

Ich plane eine Simulation mit ca. 100.000 Objekten, die sich
gegenseitig beeinflussen.

OK.

Nehmen wir an, jedes der i= 0…100,000 Objekte M[i] hat
eine bestimmte Ausdehnung, sagen wir S (Durchmesser).

  • Wie groß (in S-Einheiten) ist das gesamte Simulationssystem? (Box?)
  • Wie weit (in S-Einheiten) ist die Reichweite der „Beeinflussung“

(Was sind das für Objekte)

Die Simulation soll so schnell werden, dass diese nicht auf
einem Großrechner gerechnet werden muss, sondern auch auf
„normalen“ Computern in einem guten Zeitraum (maximal 2 volle
Tage) berrechnet werden kann.

Je nach Rahmenbedingungen (s.o.) liegt es möglicherweise
vorwiegend an der Simulationstechnik (Heransgehensweise)
und nicht an der Programmiersprache, ob die Simulation in
einer Stunde oder einer Woche durchläuft.

(wundere Dich nicht über meine Fragen, aber mit sowas
verdiene ich (u.a.) mein täglich Brot …)

Grüße

CMБ

Nehmen wir an, jedes der i= 0…100,000 Objekte M[i] hat
eine bestimmte Ausdehnung, sagen wir S (Durchmesser).

  • Wie groß (in S-Einheiten) ist das gesamte Simulationssystem?
    (Box?)

Die Box dürfte mindestens 10.000.000 S-Einheiten groß sein.

  • Wie weit (in S-Einheiten) ist die Reichweite der
    „Beeinflussung“

Die Beeinflussung reicht über das gesamte Feld. Sie wird zwar schwächer, ist aber immernoch vorhanden.

Moien

Die Box dürfte mindestens 10.000.000 S-Einheiten groß sein.

  • Wie weit (in S-Einheiten) ist die Reichweite der
    „Beeinflussung“

Die Beeinflussung reicht über das gesamte Feld. Sie wird zwar
schwächer, ist aber immernoch vorhanden.

Du willst das N-Body Problem simulieren ? Nimm ne Nvidia-Graka der 8’er Serie und den N-Body löser aus den CUDA-Beispielen. Der bietet ein Grundgerüst das man zu deinem Problem umbauen kann. Und er ist verflucht schnell.

cu

Hallo,

Nehmen wir an, jedes der i= 0…100,000 Objekte M[i] hat
eine bestimmte Ausdehnung, sagen wir S (Durchmesser).

  • Wie groß (in S-Einheiten) ist das gesamte Simulationssystem?
    (Box?)

Die Box dürfte mindestens 10.000.000 S-Einheiten groß sein.

Eine Box der Kantenlänge A mit A=10,000,000 hätte
demzufolge K=1,000,000,000,000,000,000,000 Volumen-
elemente der Größe S³.

Falls Du aber mit obiger Angabe bereits die Anzahl
dieser Volumenelemente meinst also K1/3, dann hätte
Deine Box eine Kantenlänge von A = 215.44 S und Deine
100,000 Objekte hätten eine ‚number density
von ρN = 0.01 …

  • Wie weit (in S-Einheiten) ist die Reichweite der
    „Beeinflussung“

Die Beeinflussung reicht über das gesamte Feld. Sie wird zwar
schwächer, ist aber immernoch vorhanden.

Das verstehe ich nicht ganz. Sind denn die „Wände“ Deiner Box
der Länge A=215.44 S „hart“? Also - wenn Du Deine 100,000
Objekte (welcher Art sind diese Objekte, Kugeln?) in
Deiner 214’er Box „regelmäßig“ (kubisch) zusammenpackst,
dann bilden diese einen „Würfel“ der Kantenlänge 46.4 S.

Daraus läßt sich sofort ablesen, daß (projiziert auf das
Boxvolumen) ca. 12,555 Objekte *direkt* in der Nähe der
Wand liegen (würden). Der Einfluß der Wand ist also schon
spürbar und liegt bei 12.5%. Ist die Reichweite der Wechsel-
wirkung „größer“ als oder 2S, so wirkt natürlich auch die Wand
auf viel mehr Objekte.

Daher würde mich interessieren, um was für eine
Simulation es sich konkret handelt, was für Ob-
jekte das sind und was Du schon gemacht hast.
Wie lautet das „Beeinflussungs-“ Potential
(analytische Form, polynomial)?

Vielleicht könnte ich Dir den einen oder anderen
Tip geben?

Grüße

CMБ