Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RayJunx JLI'ler
Alter: 43 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 29.06.2006, 14:59 Titel: Compilieren für Dual-core Prozessoren |
|
|
Hi Jungs!
weiß jemand wie ich mit Microsoft visual c++ 2005 E.E. meinen programm für Dualcore-CPU´s compilieren kann? Wie funktioniert sowas? und was muß ich dabei schon bei der erstellung des Spieles beachten. Gleiche Frage in bezug auf 64bit prozessoren.
mfg
RayJunx  _________________ Just a Freak |
|
Nach oben |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 29.06.2006, 21:21 Titel: |
|
|
Hi RayJunx,
für Dualcore unterstützung musst du am Compiler eingentlich nichts machen. Ich gehe mal davon aus das du einfach nur beide Kerne gleichzeitig nutzen willst.
Dafür musst du dein Programm ordentlich umstrukturieren. Ein Standardprogramm hat meistens einen Prozess der linear abgearbeitet wird. Bei solch einem Ablauf bringen mehrere CPU's oder Kerne nichts da man nicht einfach ein Befehl auf einer CPU/Kern und den nächsten auf der anderen CPU/Kern asführen kann(unterschiedliche Stacks). Bei zwei Programmen geht es, dass eines auf einer CPU/Kern und das andere Proramm auf der anderen CPU/Kern läuft. Hier stören auch die unterschiedlichen Stacks nicht.
Um also mehrere CPU's/Kerne nutzen zu können musst du deine Anwendung in mehrere Prozesse (Threads) aufteilen. Windows gibt jedem Thread abhängig von der Priorität eine gewisse Zeitspanne in der er ablaufen kann unterbricht ihn und startet den nächsten. Das geht immer die Reihe durch. Gibt es mehrere CPU's/Kerne können entsprechend viele Prozesse/Threads gleichzeitig laufen.
Da nun 2 Funtionen gleichzeitig laufen können, ist es auch möglich, das beide zur selben Zeit auf eine Variable/Speicherbereich zugreifen wollen. Um dies zu verhinden kannst du kritische Bereiche festlegen die verhindern, das dies Passiert. Hier gilt "Wer zuerst kommt schreibt/liest zuerst", der andere muss solange warten.
Wenn du ein Spiel so schreiben willst, musst du dir erstmal Gedanken machen welche Aufgaben anfallen und welche zeitgleich stattfinden können. Als Beispiel kann ohne Probleme eine Nachricht über das Netzwerk geschickt und eine neue Grafik von der Festplatte geladen werden.
Ich hoffe das hat dir etwas geholfen, bei den 64 Bit kann ich dir nicht helfen aber du musst definitiv was ändern da 64 Bit programme anderst kompiliert werden müssen als 32 Bit Programme.
Grüße Chriss |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 29.06.2006, 21:47 Titel: |
|
|
Wow, für diese Toperklärung solltest du irgendwas bekommen
Perfekt. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Dragon Super JLI'ler

Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 29.06.2006, 22:17 Titel: |
|
|
Jo, im groben würde ich das auch so sehen. Nur hast du einen Großen Fehler drin. (Naja, eigentlich ein Definitionsfehler)
Chriss hat Folgendes geschrieben: | Um also mehrere CPU's/Kerne nutzen zu können musst du deine Anwendung in mehrere Prozesse (Threads) aufteilen. |
Ein Prozess ist ausgeführter Code und kann mehrere Thread beinhalten. Ein Thread (Faden) ist nur ein Zweig eines Prozesses. Wir haben das so gelernt. Ein Programm ist toter Code und eine Prozess lebender Code oder halt ein gestartetes Programm.
Edit: http://de.wikipedia.org/wiki/Thread_%28Informatik%29
Ich glaube bei 64bit brauchst du einen eigenen Compiler, bin mir nicht sicher ob der VC++ Compiler 64bit schon unterstützt.
Edit: http://de.wikipedia.org/wiki/64Bit-Architektur _________________ Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung |
|
Nach oben |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 30.06.2006, 12:53 Titel: |
|
|
@Fallen: Danke für das Lob
@Dragon: Du hast natürlich mit den Threads recht. Ich habe das so geschrieben weil es unter Linux möglich ist weitere Prozesse zu starten und mit diesen zu kommunizieren, was eine ähnliche Verwendung wie Threads möglich macht.
Wie auch immer, jetzt wissen ja alle bescheid  |
|
Nach oben |
|
 |
RayJunx JLI'ler
Alter: 43 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 30.06.2006, 13:54 Titel: threads |
|
|
dann könnte ich also innerhalb eines prozesses mehrere threads starten und so parallel die arbeit auf cpus auslasten? So in etwa habe ich mir das auch vorgestellt, aber wie geht das im detail? ich mein es hört sich einfach an aber gibt es irgend ein einfaches laufendes beispiel dafür? Keine Ahnung, ein Programm das in einem Track Primzahlen ermittelt und mit einem anderem Thread prüft ob es auch wirklich primzahlen sind. irgendwas, ganz gleich. Hat jemand von euch sowas im Keller liegen oder Ahnung wie man so etwas aufbaut? In dem Wikipedia link habe ich einen kurzen Ansatz über das Thema gelesen, aber wie man es konkret einsetzen kann, no matter.
RayJunx _________________ Just a Freak |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.06.2006, 18:25 Titel: |
|
|
vergiß das mal lieber wieder.
Threads sind sauschwer. Und auch die moderenn Spiele sind lange nicht alle auf DualCore optimiert (IMHO).
So wie ich das sehe, kannst du dann im Pirnzip noch mal neu mit programmieren anfangen, weil das Programm jetzt ncoh in Threads aufzuteilen (du meinst den Spaceshooter, oder?) ürfte extrem schwer sein. Und wenn du es schaffst ist der Gewinn wahrhsceinlich minimal, da es nicht optimal aufgeteilt ist.
Du machst dir damit extrem viel Mühe, wirst sehr wahrschienlich scheitern, weil dein Programm immer aus irgendwelchen Gründen abstürtzt oder Scheiße baut, und am Ende kommt lange nicht genug raus, wie du reingesteckt hast.
Threads sind eben keine einfache Technik und nicht einfach mal so eingebaut. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 30.06.2006, 19:31 Titel: |
|
|
Finde Threads eigentlich gar nicht sooo schwer zum Programmieren. Man muss halt darauf achten keine Deadlocks zu produzieren, ok das ist glaube auch schon das schwierige an der ThreadProgrammierung
Also Threads in Spielen gibt es schon lange, allein schon Sound, Netzwerk Grafik und Eingabe, nutzen muss man es nicht, aber zu wissen das es sie gibt und sie gut funktionieren ist schon toll.
FMOD zB nutzt Threads.
Die XBox360 ist Afaik darauf ausgelegt Threads voll auszunutzen dank Multicore.
Allerdings hat Jonathan nicht ganz unrecht, das ganze Spiel umzukonzipieren könnte der Overkill werden, nicht unmöglich aber nervenaufreibend.
Würde dir gerne ein Beispiel dazu geben, nur habe ich nur riesen Systeme parat die ich nur ungern auseinanderflicken/posten würde. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.06.2006, 21:01 Titel: |
|
|
Ja, du hast Recht, DirectSound müsste auch Threads benutzten, da ja die Msuik z.B. im Hintergrund läuft und ich nicht in jedem Schleifendurchlauf ProcessMusik() oder ähnlihces aufrufen muss.
Ich selber habe damit realtiv wenig Erfahrung, hab in Bücher aber darüber gelesen und da soll es angeblich recht schwer sein.
Wo ich das allerdings evbtl. irgendwann mal benutzen würde, wäre um im Hintergrund das nächste Level zu laden, so wie es in Morrowind (AFAIK) passiert. Ich denke MultiThreading ist nur dann schwer wenn 2 Threads Sachen parallel bearbeiten müssen, da sie sich so wunderbar in die Quere kommen können. Allerdings wird das höchstwahrscheinlich der Fall sein, wenn du die Spielmechanik auf verschiedene Threads aufteilst, da diese ja die selben Daten benutzen müssen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
RayJunx JLI'ler
Alter: 43 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 04.07.2006, 15:48 Titel: danke |
|
|
danke für die info.
Habe übrigens nicht vor das für Freakwave einzusetzen! das wäre ja wirklich wahnsinn. Außerdem ist der flaschenhals zur zeit ohnehin die Grafik und nicht die eigentliche Programmrutine. Interessiert mich vorwiegend für Zukünftige Programmierung von rechenintensiven Berechnungen. Weiß jetzt kein konkretes Beispiel, aber ich tüftel manchmal so verrückte Sachen aus  _________________ Just a Freak |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 04.07.2006, 17:44 Titel: |
|
|
In so einem komischen Buch, hab ich mal ne interessante Lösung gesehen:
Im Pirnzip simuliert man Threads indem man eine Aufgabe aufteilt. Das bedeutet, das man den aktuellen Schritt speichert udn druch ein switch imemr guck welchen Teil der Berechnung man als nächtes ausführen muss.
Im Prinzip ganz simpel, dass muss man nur noch mal gründlich überlegen und kann dass dann ohne kenntnise von Threads oder MultiCore umsetzen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Chriss Senior JLI'ler
Anmeldedatum: 18.08.2004 Beiträge: 267
Medaillen: Keine
|
Verfasst am: 05.07.2006, 07:53 Titel: |
|
|
Ich würde sie vorallem dazu verwenden die Landschaft zur laufzeit nachladen zu lassen. Hier kann man ja die Landschaft in Würfel teilen und dann immer den aktuellen Würfel und die 8 umliegenden Würfel anzeigen. Läuft man in den nächsten Würfel können die nächsten Würfel nachgeladen werden. Hängt aber von der Größe der Spielwelt ab ob diese Lösung Sinn macht.
Zudem kann man die Landschaftsphysik der Gegner und Objekte gut in einem Thread berechnen. Also quasi eine Endlosschleife die alle Objekte immer wieder einzeln durchgeht.
@Jonathan_Klein: Für Single Core CPU's ist diese Lösung bestimmt gut aber die Lösung von diesem Buch nutzt nicht mehrere Kerne. Da Windows alleine entscheidet was wo ausgeführt wird ist die einzige Möglichkeit, alle Kerne/CPU's zu nutzen, die Verwendung von Threads oder von mehreren Prozessen die z.B. über den lokal Loopback kommunizieren. |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.07.2006, 08:32 Titel: |
|
|
Da es niemand gesehen hat hier nochmal:
http://www.jliforum.de/board/viewtopic.php?t=4595
Dort bitte über Multithreading in Spielen weiter diskutieren  _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
 |
Christian Rousselle Site Admin

Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 05.07.2006, 09:56 Titel: |
|
|
Habe zwar nicht alles gelesen, aber man kann auch normalen Code auf zwei (oder mehrere) Prozessoren aufteilen. Dazu müssen nicht zwangsläufig Thread genutzt werden. VS 2005 verwendet z.B. OpenMP dazu. Das geht über Flags und einen Compilerswitch. Da können z.B. unabhängie Berechnungen in einer for-Schleife aufgeteilt werden u.Ä. Ich hatte bisher nur Gelgenheit das auf einem HT-Rechner zu testen, nicht auf einem echten Doppelkern. Bei HT hat es nichts gebracht.
C. |
|
Nach oben |
|
 |
sp3cK-r0LL3 Senior JLI'ler

Alter: 34 Anmeldedatum: 18.06.2004 Beiträge: 275
Medaillen: Keine
|
Verfasst am: 06.07.2006, 18:07 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | vergiß das mal lieber wieder.
Threads sind sauschwer. Und auch die moderenn Spiele sind lange nicht alle auf DualCore optimiert (IMHO). |
meine kritik eigentlich nur zu der aussage, alles andere hat hier eigentlich meiner meinung nach gestimmt
warum soltle er es nicht versuchen? als ob er es macht, um mehr speed für seinen spaceshooter zu bekommen - und probieren macht fun, vor allem wenns am ende funzt...
ich benutz auch total komische sachen nur zum testen, obwohls totaler overkill ist, aber im nachhinein bin ich schlauer  _________________ sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; apt-get install condom; mount; fsck; gasp; more; yes; more; umount; apt-get remove --purge condom; make clean; sleep |
|
Nach oben |
|
 |
|