PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : programm auf dual cpu optimieren



AstroTom
26.07.2004, 16:59
hallo

wollte mal fragen wie schwer es ist ein programm auf ein dual cpu system zu portieren??
ich hab leider gar nix mit programmierung am hut aber für mein hobby (astronomie) gibt
es ein privat programmiertes programm für bild und videobearbeitung. das ganze ist sehr rechenintesiv (laufzeit für ein bild ~30min bis mehrer stunden) dort würde ein dual system abhilfe schaffen.

dann noch eine frage : wie schwer ist es denn code auf 64 bit zu portieren? ist das schwerer oder leichter als es auf dual cpu fähigkeit zu optimieren.

vielleicht möchte ja einer von euch mit ein paar tips bzw. evtl. sogar handanlegen an das programm.

gruss
AstroTom

mtb][sledgehammer
26.07.2004, 23:21
Ich würde sagen, beides ist abhängig von der gewählten Programmiersprache.

Mit Delphi (ich arbeite mit 6.0) sind mehrere Threads, also eine Optimierung auf SMP/SMT sehr einfach erstellt. Für jeden Thread erzeugt man ein getrenntes Objekt vom Typ TThread. Wichtig ist dabei die richtige Syncronisation der Threads (es können nicht beide Threads beispielsweise gleichzeitig auf eine Variable schreibend zugreifen). Dafür stehen in Delphi auch schon praktische Objektklassen zur Verfügung. Für andere Sprachen kann ich im Moment nicht reden, da ich dort noch nicht SMT programmiert habe.

Bei 64 Bit ist vor allem der richtige Compiler notwendig, welcher 64 Bit Code erzeugen kann. Dann ist es erforderlich, dort nur 64 Bit ints zu nutzen, wo sie Vorteile bringen, denn diese brauchen beispielsweise eine längere zeit bei der Multiplikation (beim Opteron 5 statt 3 Takte). Ansonsten dürfte der Rest vom Compiler erledigt werden, solange man nicht in Assembler opimieren will.

Da für dich Performance eine große Rolle zu spielen scheint, dürfte auch die richtige Programmiersprache eine entscheidende Rolle spielen. Solange du nicht mit ASM per Hand optimierst, wird C++ wohl eine nicht schlechte Wahl sein. Aber am besten berät dich dabei intel_hasser.

Sargnagel
27.07.2004, 09:25
@64bit-Portierung:
Wenn das Programm in C/C++ geschrieben ist und der Programmierer ein paar "evil hacks" anwandte, bei denen er/sie z.B. Annahmen über die Größe von Pointern gemacht hat, so muß vor der Portierung diese Größenanahme bereinigt werden. Da hilft auch ein guter 64bit-Compiler nicht weiter ...
Ich würde sagen, es ist grundsätzlich einfacher, sauber programmierte Software nach 64bit zu portieren; idR ein einfaches Neukompilieren. ;) Bei SMP leisten einem oftmals die lieben Freunde livelock und deadlock Gesellschaft. :]
Es kommt bei der SMP-Portierung und dem möglichen Performancegewinn ganz darauf an, wie einfach parallelisierbar die verwendeten Algorithmen sind.

mtb][sledgehammer
27.07.2004, 21:49
Habe gerade den passenden Java Thread zu Multi Threading gesehen
http://www.planet3dnow.de/vbulletin/showthread.php3?s=&threadid=169409

Orkomike
07.08.2004, 00:56
Original geschrieben von Sargnagel
Es kommt bei der SMP-Portierung und dem möglichen Performancegewinn ganz darauf an, wie einfach parallelisierbar die verwendeten Algorithmen sind.

Vor allem müssen sie überhaupt parallelisierbar sein. Kannst du die Abhängigkeiten im Prog. überschauen/erläutern? Sind beispielsweise Vektor oder Matrix Operationen enthalten?

Wer hat das aktuelle Prog. geschrieben? Vielleicht ist eine Optimierung des bestehenden Prog. möglich? Wurde der Prozessoraufbau (z.B. Cache) richtig beachtet?

i_hasser
07.08.2004, 14:54
Ich weis ja nicht was du da berechnen willst, aber am Programm was zu ändern wird nix bringen - zu kompliziert. Vor allem wenn du keine Ahnung vom Programmieren hast, sowas tut mal nicht mal eben nebenbei sondern sowas muss schon von Begin an bei der Konzeption berücksichtigt werden.

Am besten wird es sein, du teilst die Bilder in kleiner auf (wenn das geht).