Autor |
Beitrag |
Hugo343
      
Beiträge: 114
Erhaltene Danke: 2
Windows 7
Turbo Delphi, Dev C++
|
Verfasst: Mo 14.06.10 16:18
Auch ich hab jetzt das Spiel mit den drei Regeln hinbekommen auf Anregung von Chrischuh's Thema hin.
Das Zip-Archiv enthält die GoL.exe, viele Testpatterns, rules.txt und die world.txt, in der man die Größe des Feldes festlegen kann.
Was drin ist:
-Zoom
-Scroll
-Speichern und Laden (das alte Feld bleibt erhalten, es wird nur dazu-geladen)
-augenfreunliches Raster-Feld
-Maximalgeschwindigkeit (volle Berechnungsgeschwindigkeit)
V5: (hat sich in der Zwischenzeit einiges getan)
-gut durchgetestet (sollte halbwegs entbuggt sein)
-zufälliges Füllen des Rasters
-eigene weltenregeln möglich
-kleinere Formular-Größe, besser für schlechtere Auflösungen
-viele neue patterns mit zugehöriger weltenbeschreibung (z.B. "0-2_blinker" [0/2-Welt]; wenn keine beschreibung der welt vorhanden ist, dann ist es conways welt)
-"rules.txt" mit weltenregel-vorschlägen (mit * habe ich zufällig enddeckt, andere noch nachträglich aus internet-quellen)
Einloggen, um Attachments anzusehen!
Zuletzt bearbeitet von Hugo343 am So 11.07.10 22:49, insgesamt 7-mal bearbeitet
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Mo 14.06.10 16:54
Und vorteil bei deinem?
Irgendwas besonderes?
|
|
Hugo343 
      
Beiträge: 114
Erhaltene Danke: 2
Windows 7
Turbo Delphi, Dev C++
|
Verfasst: Mo 14.06.10 17:34
Bis hin zu 500*500 Felder ist meines schneller (er macht mit punkte in einer liste + array) und ich durchsuche nur ein array. ausschlaggebend für meine version sind aber natürlich die humanen farben, was sonst?
Wenn man etwas läd dann wird das nicht per abgespeichertes Bild gemacht sondern per endungsloser datei und der rest wird dadurch nich gelöscht.
Leider ist meines beim scrollen nicht so schnell wie seins.
Also besonderes?, nein.
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Mo 14.06.10 17:55
Dann wäre ein zufälliges Feld und anpassbare Regeln noch gut.
Aber scheint wirklich schneller zu laufen. Aber auch nur SingleThread
|
|
Hugo343 
      
Beiträge: 114
Erhaltene Danke: 2
Windows 7
Turbo Delphi, Dev C++
|
Verfasst: Di 15.06.10 07:47
Zufälliges Feld und anpassbare Regeln sind ja noch im Bereich meines Möglichen aber was meinst du mit "Single-Thread", wie soll ich das denn hinbekommen?
\\EDIT: Ich hab mir grad nochmal Chrischu's Thema durchgelesen. Wie soll ich denn die Arbeit auf alle meine Kerne verteilen?
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Tilo
      
Beiträge: 1098
Erhaltene Danke: 13
Win7 geg. WInXP oder sogar Win98
Rad2007
|
Verfasst: Di 15.06.10 08:50
Hugo343 hat folgendes geschrieben : | Zufälliges Feld und anpassbare Regeln sind ja noch im Bereich meines Möglichen aber was meinst du mit
"Single-Thread", wie soll ich das denn hinbekommen?
\\EDIT: Ich hab mir grad nochmal Chrischu's Thema durchgelesen. Wie soll ich denn die Arbeit auf alle meine
Kerne verteilen? |
Das Feld in Sektoren aufteilen?
Bei Dieser Art von Programm geht das, da für das Ergebnis der einen Zelle nicht für das Ergebnis in der benachbarten Zelle ist. Dies gilt aber nur für die Beachtung eines Simulationschrittes.
|
|
Hugo343 
      
Beiträge: 114
Erhaltene Danke: 2
Windows 7
Turbo Delphi, Dev C++
|
Verfasst: Di 15.06.10 14:48
Ich hab nich gefragt ob es geht, sondern wie.
Hab nähmlich keine Plan davon...
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Di 15.06.10 16:59
Na du erstellst x Threads die jeder zugriff auf dein Feld haben. Dann weist du (am besten beim Erstellen) jedem Thread einen bereich zu, den der berechnen soll (z.b. jede 2. Spalte oder Zeile)
Dann musst du die nur noch aus dem Hauptthread raus synchronisieren. Sprich: Thread muss seinen Teil abarbeiten und dann auf ein continue signal warten, bevor er weiter macht.
Im Hauptthread müssen dann die Threads gestartet werden, gewartet bis alle Fertig sind, zeichnen, alle Threads neustarten. Alternativ erst die Threads neu starten und dann mit zeichnen beginnen. Und dann immer so weiter.
Lies einfach mal ein bisschen was zum Thema Threads. Sind ein Muss-Thema für gute Programmierer heutzutage.
|
|
Hugo343 
      
Beiträge: 114
Erhaltene Danke: 2
Windows 7
Turbo Delphi, Dev C++
|
Verfasst: Di 15.06.10 18:24
wiki.delphigl.com/in...orial_Multithreading
Ist "TForm" auch nur ein Thread??? Irgendwie versteh ich den Sinn nich, selbst wenn ich einen neuen mache oder meinetwegen 1000 die nebeneinander laufen wird das doch nich schneller... Oder wäre das dann Multiprocessoring oder wie? Wofür ist das gut? Auf der Seite habe ich noch das Beispiel mit dem gleichzeitigen Download verstanden, aber das bringt mir doch nix....  *verzweifel*
So wie ich das verstanden habe, habe ich nix verstanden... <= ICH DOOF
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Flamefire
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Di 15.06.10 19:14
In dem anderen Thread habe ich es schon erklärt. Jeder Kern kann einen Thread abarbeiten.
1 Arbeitsthread und 2 Kerne-->Nur 50% Auslastung (Kern0:100% Kern1:0%)
1 Arbeitsthread und 4 Kerne -->25% Auslastung
Also bringt HIER Multithreading bei Anz. Threads=Anz.Kerne einen Geschwindigkeitsvorteil vom Faktor 2 bzw 4
Bei Download ist das was anderes. Download heißt: Sende Anfrage, Warte lange (Thread blockiert), speichere Daten und von vorn. Hier wird Multithreading eingesetzt um die Wartezeit durch ne neue Anfrage zu überbrücken (z.b. des Nächsten Teils der Datei)
|
|
Chrischuh
      
Beiträge: 124
Erhaltene Danke: 1
Win 7
Turbo Delphi
|
Verfasst: Di 15.06.10 19:59
so, ich antworte jetzt mal hier, weil 2 paralelle threads bringen iwie nichts.
ich hab verstanden was diese multithreads bringen.
Aber wie setzt man das um? Ich weiß darüber garnichts^^
Chrischuh
Edit: Hab den Link oben übersehen, werds mir mal angucken..
|
|
Tilo
      
Beiträge: 1098
Erhaltene Danke: 13
Win7 geg. WInXP oder sogar Win98
Rad2007
|
Verfasst: Di 15.06.10 20:34
Mein Vorschlag zum Umsetzen:
Baue Dein Programm erstmal so um das die Berechnung der Simulation in einem separatem Thread läuft.
Wenn Du es geschafft hast aus dem Hauptthread (deine Tform und alles was DU daraus abrufst und nicht als separater Thread läuft), den einzelnen "Berechnungsthread" zu steuern kommt der 2. Schritt.
Der 2. Schritt sieht so aus: 2 Berechnungsthreads erstellen und beiden eine Schranke mitgeben z.B. über die x-Koordiante.
Thread1 berechnet alle koordinaten[x,y] mit x=[0;xmax/2] und Thread2 berechnet alle Koordinaten [x|y] mit x=[xmax/2+1;xmax]. Übergabe der Schranken kann z.B. über Parameter wie xlow und xhigh erfolgen (Thread1: xlow=0 xhigh=xmax/2 Thread2: xlow=xmax/2+1 xhigh=xmax).
Zur Frage "Was kommt in die Threads?"
Irgendwo im Code iterrierst Du durch das Feld was deine "Spielfläche" repräsentiert => dies muss in die THreads rein.
Ich hoffe nur, dass Ihr (Chrischuh und Hugo343) eure Berechnung des neuen Zustandes von der Darstellung selbigen getrennt habt. Wenn nicht müst ihr es jetzt, da parallele Zugriffe auf die Gui nicht erlaubt sind.
einen schönen Abend,
Tilo
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 15.06.10 21:07
Moin!
Ich möchte hier mal auf die Bremde treten: diese Sparte ist nicht zur Diskussion von Programmiertechniken und deren Umsetzung vorgesehen, sondern zur Vorstellung von Programmen.  Bitte zum Thema " Wie macht man GoL multithreaded" einen eigenen Thread aufmachen!  (hehe, das wäre dann mal wirklich multithreaded...  )
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Hugo343 
      
Beiträge: 114
Erhaltene Danke: 2
Windows 7
Turbo Delphi, Dev C++
|
Verfasst: Do 17.06.10 22:18
Neue Version ist nun fertig (v5). Ich glaub das sollte auch die letzte sein. Leider ohne Multithread
Viel Spaß!!!
|
|