• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Parallele Ausführung oder (Threads/g++)

hallo !!!
Programmiere gerade ein Spiel mit SDL und OpenGl !!!
Es wird ein Remake eines sehr alten Computerspiels und es ist noch eine Menge zu tun und da wollte ich wissen wie parallele Ausführung funktioniert.
System:
AMD FX(tm)6100 Six-Core Processor -8 GB RAM, Main-Board.:M5A78L-le
Linux 3.11.10-21-desktop-opensuse 13.1 Bottle(x86_64) KDE:4.11.5
Also wie wird in c++ ein paralleler Call realisiert, da ja 6 Prozessoren vorhanden sind.
kann mir da jemand ein Beispiel zeigen.
Das eine CPU Funktion A aufruft und die andere falls frei gleichzeitig Funktion B, gibt es dazu irgendwo Beispiele ?
auf Assemblerebene habe ich Interrupts gesehen, allerdings nur bei SystemMonitor. Reicht mir, wenn ich weiß wie das in c++ funktioniert.
bitte helfen !!! ;)
 

abgdf

Guru
chris-sneth schrieb:
AMD FX(tm)6100 Six-Core Processor
Also wie wird in c++ ein paralleler Call realisiert, da ja 6 Prozessoren vorhanden sind.
Soll Dein Spiel also nur auf Rechnern mit 6 Prozessoren laufen? Ich hab' nur 2.
chris-sneth schrieb:
Das eine CPU Funktion A aufruft und die andere falls frei gleichzeitig Funktion B, gibt es dazu irgendwo Beispiele ?
Wahrscheinlich. Aber wenn das SDL und OpenGL nicht können (was ich stark vermute), wird das Dir wohl auch nichts bringen. Ich würde also deren API durchsuchen.
chris-sneth schrieb:
auf Assemblerebene habe ich Interrupts gesehen, allerdings nur bei SystemMonitor. Reicht mir, wenn ich weiß wie das in c++ funktioniert.
Wenn Du Dich mit solchen Low-Level-Sachen beschäftigst, wird Dein Spiel wahrscheinlich nie fertig. Ich würde erstmal das Spiel fertigschreiben und dann gucken, ob man da irgendwo noch mehr (Prozessoren) unterbringen kann. Wenn das wirklich nötig ist, was ich bezweifle.

Allgemein finde ich Threads Mist, sie machen Programme meist instabil. Verarbeitung von mehreren Events übernimmt bei GUI-Programmen meist das GUI-Toolkit. Bei Tk z.B. gäbe es da die after-Methoden.
SDL ist im Prinzip ja auch so eine Art GUI-Toolkit: Es gibt Dir ein Fenster, in das Du Sachen schreiben kannst, und es verarbeitet Events.
chris-sneth schrieb:
So eine Aufforderung ist unter Entwicklern in Foren eher weniger gern gesehen.
 
A

Anonymous

Gast
chris-sneth schrieb:
Also wie wird in c++ ein paralleler Call realisiert, da ja 6 Prozessoren vorhanden sind.
kann mir da jemand ein Beispiel zeigen.
......
bitte helfen !!! ;)

Aber gerne doch ;)
Einstiegsseite: http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

Das klassische UNIX-Model gibts auch noch, dazu kann man sich am besten rund um das Thema IPC einlesen: http://openbook.galileo-press.de/linux_unix_programmierung/Kap09-006.htm

Vieles lässt sich auch recht einfach als Client <-> Server programmieren und somit auf mehrere CPUs verteilen.

Ganz modern jetzt Vektorisierung eine noch andere Art der Parallelisierung, aber für ein aufgemöbeltes Ping-Pong-Spiel aus den 80 Jahren wohl etwas über proportioniert. Ansonsten einfach mal im Netz nach "Vectorization" suchen, ich will hier aus bestimmten Gründen keine direkten Links dazu posten.

Und bestimmt noch einige Dutzend mehr oder weniger bekannte spezielle Methoden mehr.

Aber ganz egal für was du dich entscheiden solltest. Typischer weise fallen wenn du mit sowas nicht geübt bist 50% der Arbeit nur für Daten-Analyse, Planung, Vorbereitung und Strukturierung an, damit du erstmal einen groben Plan hast, was überhaupt wie parallel an Daten im Programm effektiv verarbeitet werden kann und dabei auch einen Sinn und einen Zeitgewinn machen könnte, und welche Schnittstellen du dazu benötigst und wie du diese gegenseitig absichern musst, und welche Libraries du dafür überhaupt verwenden kannst, bzw was an schon bestehenen Klassen oder Funktionen man einbeziehen könnte.
(50% deshalb, weil du mit Sicherheit diese Arbeit mehrfach machen musst und 2 bis 5 Mal ganz von vorne anfangen darfst, weil du nach ein paar hundert Stunden Programmierung feststellen wirst, was du dir am Anfang ausgedacht hast, geht entweder gar nicht, oder ist totaler Quatsch)

40% und mehr der Zeit benötigst du immer für das debuggen, das fällt hier typischer Weise immer etwas komplizierter aus.

Der Rest der Zeit ist dann das verstehen und erlernen dieser Methoden und das programmieren deines Programmes selbst. Wobei du dann bei einem Vielfachen von dem bist, was eine saubere strukturierte nicht parallel ablaufende Programmierung gekostet hätte. Und um wieviel schneller dein Programm dann letztlich auf mehren CPUs wirklich läuft, steht dann aber immer noch auf einem anderem Stern.

Das ganze ist ein spannendes Thema, aber nicht einfach und besonders am Anfang zeitraubend ohne Ende.

robi
 
OP
C

chris-sneth

Newbie
hallo !!!
Ein Six-core muss auch nicht Pflicht sein bzw. werden.
Es ist einfach gehalten, da sollte ein guter Prozesser (2.5GHZ) das alleine schaffen.
Hab mir die Links mal angesehen, sieht lustig aus.
Habe mir aber zum Thema parallele Ausführung schon Gedanken gemacht (mit Hinkelsteinen wie bei Asterix und Obelix) ;)
Bis das soweit ist, baucht es noch ein bisschen Zeit. :/
 
Oben