JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=602a11e8e92581d3e60b662a487826f7Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Compilieren für Dual-core Prozessoren
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
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

BeitragVerfasst am: 29.06.2006, 14:59    Titel: Compilieren für Dual-core Prozessoren Antworten mit Zitat

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. Question

mfg
RayJunx Wink
_________________
Just a Freak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 29.06.2006, 21:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 29.06.2006, 21:47    Titel: Antworten mit Zitat

Wow, für diese Toperklärung solltest du irgendwas bekommen Shocked

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 29.06.2006, 22:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 30.06.2006, 12:53    Titel: Antworten mit Zitat

@Fallen: Danke für das Lob Smile

@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 Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RayJunx
JLI'ler


Alter: 43
Anmeldedatum: 16.01.2006
Beiträge: 130
Wohnort: Bayern
Medaillen: Keine

BeitragVerfasst am: 30.06.2006, 13:54    Titel: threads Antworten mit Zitat

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.
Question
RayJunx
_________________
Just a Freak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.06.2006, 18:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 30.06.2006, 19:31    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 30.06.2006, 21:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RayJunx
JLI'ler


Alter: 43
Anmeldedatum: 16.01.2006
Beiträge: 130
Wohnort: Bayern
Medaillen: Keine

BeitragVerfasst am: 04.07.2006, 15:48    Titel: danke Antworten mit Zitat

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 Wink
_________________
Just a Freak
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 04.07.2006, 17:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 05.07.2006, 07:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.07.2006, 08:32    Titel: Antworten mit Zitat

Da es niemand gesehen hat hier nochmal:

http://www.jliforum.de/board/viewtopic.php?t=4595

Dort bitte über Multithreading in Spielen weiter diskutieren Smile
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 05.07.2006, 09:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
sp3cK-r0LL3
Senior JLI'ler


Alter: 34
Anmeldedatum: 18.06.2004
Beiträge: 275

Medaillen: Keine

BeitragVerfasst am: 06.07.2006, 18:07    Titel: Antworten mit Zitat

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 Wink

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 Wink
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum