Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

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

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
chris-sneth
Newbie
Newbie
Beiträge: 42
Registriert: 31. Jan 2006, 13:04
Wohnort: wolfsburg

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

Beitrag von chris-sneth » 2. Nov 2014, 18:18

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 !!! ;)
Zuletzt geändert von chris-sneth am 3. Nov 2014, 11:16, insgesamt 1-mal geändert.
--------------------------------------------
do aliens have e - patents ?
----~~~~~----zzzzwwwosch
--------------------------------------------

Werbung:
abgdf
Guru
Guru
Beiträge: 3254
Registriert: 13. Apr 2004, 21:15

Re: Parallele Ausführung Funktion Call oder (Threads/g++)

Beitrag von abgdf » 3. Nov 2014, 00:11

chris-sneth hat geschrieben: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 hat geschrieben: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 hat geschrieben: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 hat geschrieben:bitte helfen !!! ;)
So eine Aufforderung ist unter Entwicklern in Foren eher weniger gern gesehen.

Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3173
Registriert: 25. Aug 2004, 02:13

Re: Parallele Ausführung Funktion Call oder (Threads/g++)

Beitrag von robi » 3. Nov 2014, 03:35

chris-sneth hat geschrieben: 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/LinuxT ... reads.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_ ... 09-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

chris-sneth
Newbie
Newbie
Beiträge: 42
Registriert: 31. Jan 2006, 13:04
Wohnort: wolfsburg

Re: Parallele Ausführung Funktion Call oder (Threads/g++)

Beitrag von chris-sneth » 3. Nov 2014, 11:15

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. :/
--------------------------------------------
do aliens have e - patents ?
----~~~~~----zzzzwwwosch
--------------------------------------------

Antworten