HIVE-Project

Retro Style Eigenbau Computer mit Parallax Propeller
Aktuelle Zeit: Do 25. Apr 2019, 20:42

Alle Zeiten sind UTC [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Mandelbrot
BeitragVerfasst: Mo 24. Jul 2017, 07:07 
Offline

Registriert: Mi 14. Dez 2011, 22:05
Beiträge: 65
Hallo Chefprogrammierer,

ich versuche, das Apfelmännchen von yeti und drohne235 (siehe viewtopic.php?f=10&t=1072) zu parallelisieren. Das Programm liegt im Anhang, bitte mal ausprobieren.

Ich scheitere an der Stelle, wo die Cogs abwechselnd auf den Bus zugreifen sollen. Entweder klappt der Sperrmechanismus mit lkBus nicht oder die Cogs hinterlassen doch noch irgendwelche Pegel auf dem Bus. Das "dira := 0" in drawPixel sollte eigentlich den Cog vom Bus nehmen. Man kann das Elend sehen, wenn man die Zeile "ifnot is_slave" in drawPixel auskommentiert.

Mit der Konstante MAX_PARALLEL steuert man die Anzahl gestarteter Cogs. Bei 1 oder 0 wird kein "Slave-"Cog gestartet, und das Programm läuft fehlerfrei durch.

Notfalls könnte ich den Haupt-Cog zum Busmaster erklären. Alle Worker würden dann ihre drawPixel-Anforderungen über Shared Memory übergeben, und nur der Busmaster benutzt die ios.g0*-Funktionen. Aber dann käme ich nur auf eine Parallelität von 7 und wüsste immer noch nicht, wie sich mehrere Cogs den Bus teilen.

Irgendwelche konstruktiven Vorschläge?

Grüße


Dateianhänge:
mandelbrot_hive_gr_p.spin [9.46 KiB]
150-mal heruntergeladen
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mandelbrot
BeitragVerfasst: Mo 13. Nov 2017, 21:03 
Offline
Administrator
Benutzeravatar

Registriert: So 24. Mai 2009, 10:35
Beiträge: 2266
Wohnort: Lutherstadt Wittenberg
Interessantes Thema. :twisted:

Bisher haben wir meist nur neben dem Loader eine Cog in unseren Anwendungen laufen, welche auf den Bus zugreift. Hier mal ein einfaches Beispiel, in welchem sieben Cogs Text koordiniert direkt selbst über den Bus ausgeben. Dabei gibt es diverse Fallstricke:

- die aufrufende Main-Cog muss ebenfalls den Bus freigeben, welcher per ios.start initialisiert und belegt wird
- auch die Bildschirmroutinen in Bellatrix sind nicht multicogfähig: setzt eine Cog zum Beispiel die Farbe oder die Cursorposition, ist dieser veränderte Kontext auch für die anderen Cogs gültig
- umgehen könnte man dies teilweise, indem die Cogs getrennte Fenster, oder vollständig indem man die getrennten Screens (nur 3 möglich) verwenden

usw.

Ich konnte in dem Mandelbrotprog jetzt nicht den konkreten Fehler gefunden, vermute aber, dass der Bus der MainCog nicht freigegeben wird. Da das ständige aktivieren und deaktivieren vom Bus inklusive Semaphorenhandling auch Zeit kostet, ist es vielleicht wirklich einfacher, die Busarbeit der MainCog zu überlassen und nur die Ergebnisse einzusammeln.


Dateianhänge:
bustest-1.spin [8.54 KiB]
123-mal heruntergeladen

_________________
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mandelbrot
BeitragVerfasst: Di 14. Nov 2017, 12:47 
Offline
Benutzeravatar

Registriert: Fr 30. Sep 2011, 13:08
Beiträge: 2518
drohne235 hat geschrieben:
... ist es vielleicht wirklich einfacher, die Busarbeit der MainCog zu überlassen und nur die Ergebnisse einzusammeln.


Zustimmung sonst wird die Verwaltung zu groß.

_________________
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mandelbrot
BeitragVerfasst: Di 14. Nov 2017, 21:50 
Offline

Registriert: Mi 14. Dez 2011, 22:05
Beiträge: 65
Zwischenzeitlich habe ich meinen Fehler selbst gefunden: Der Start-COG musste noch den Bus freigeben. Ich war schon am Verzweifeln und hatte eine Variante mit 7 Workern und 1 Busmaster geschrieben. Na, was solls, ich kann ja mal beide Versionen gegeneinander antreten lassen.

Jetzt schreibe ich eine einfache Diagramm-Anzeige, um Messergebnisse grafisch darzustellen. Das Auge sieht nun mal an einer Linie eher, wo der Knick ist, als an einer Zahlenkolonne. Dann kann ich auch verschiedene Ideen ausprobieren und schauen, ob irgendwann die Hauptschleife in Bella zum Flaschenhals wird. ;-)

PASM kommt später.

Grüße


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mandelbrot
BeitragVerfasst: Di 27. Feb 2018, 21:49 
Offline

Registriert: Mi 14. Dez 2011, 22:05
Beiträge: 65
Während yeti fleißig Mandelbrötchen bäckt, suche ich nach dem Knick in einer Linie. Und tatsächlich: Ich habe etwas gefunden. Um standesgemäß zu suchen, ist ein Linienanzeigeprogramm für den Hive entstanden (diagram). Das kann nur so viel, wie ich im Moment brauche: eine CSV-Datei lesen, in der max. 32 Linien mit jeweils genau 8 Punkten drin stehen. Alle Linien haben einen gemeinsamen Definitionsbereich, der von 1-8 geht (Auf der x-Achse wird der Bereich von 0-8 angezeigt.). Die Binaries, der Quelltext und eine kurze Bedienungsanleitung für diagram liegen im Anhang.

In diagram kann man Linien mit 2 y-Achsen anzeigen. Das ermöglicht, Linien mit weit auseinanderliegenden Wertebereichen so zu skalieren, dass man sie optisch vergleichen kann. Ich benutze den Tile-Treiber des G0-Modus. Da muss sich das diagram auf 4 Farben beschränken. Um dann noch zu erkennen, welche Beschriftung zu welcher Linie gehört, blinken die Linien und Beschriftungen, wenn man mit TAB von einer zur anderen wechselt. Eines ist mir dabei nicht gelungen: die Tastatur-Modifier abzufragen. Weder Shift noch Ctrl bekomme ich zu Gesicht. Vielleicht findet jemand anderes den Fehler. Man kann also nicht mit Shift+TAB rückwärts durch die Linien gehen.

Und nun zur eigentlichen Untersuchung: Wie zu erwarten verhalten sich Darstellungszeit und Anzahl eingesetzter Cogs nicht umgekehrt proportional zueinander. Und wie zu erwarten bremst die Art und Weise, wie man ein Pixel anzeigen lässt, die Darstellungsgeschwindigkeit. Ich hätte aber nicht gedacht, dass das schon ab dem 4. Cog und dann noch so stark wirkt. Im Bild unten ist der Knick in der weiß markierten ("blinkenden") Linie zu sehen. Das ist die Effizienz-Linie, die zeigt, wie viele Pixel pro Cog und Zeiteinheit angezeigt werden. Daneben gibt es die Gesamtzeit t für die Darstellung, die Wartezyklen im Mandelbrot-Programm (also in Regnatix) auf den Bus und die Leerlaufzyklen in der Hauptschleife von Bellatrix.

Für die Zeitmessung wurden Administra und reg-ios erweitert. Bisher ist es nicht möglich, einen konsistenten Zeitstempel von der RTC abzufragen, obwohl die das anbietet. Und auch das Subtrahieren von 2 Zeitstempeln ist aktuell recht umständlich. Die Erweiterungbasiert auf date_time_ts.spin (adm-dttme.spin). Vielleicht kann die Erweiterung ins Trios übernommen werden.

Das Messprogramm macht den Fehler, die csv-Datei im Root-Verzeichnis der SD-Karte anzulegen. Warum das passiert, weiß ich noch nicht.

Die nächsten Versuche müssen in 2 Richtungen gehen: Umsetzung der Mandelbrot-Berechnung in Assembler (das ist offensichtlich) und Einbau einer speziellen Pixel-Funktion in Bellatrix. Es soll nur noch die Anfangskoordinate übergeben werden und dann die Farben für die nächsten 4, 16, 64 oder 256 Pixel in aufsteigender x-Richtung. Mal sehen, ob das was bringt. Möglicherweise verliere ich schon eher die Lust am Experiment.

Grüße


Dateianhänge:
20180227_mandelb_src.zip [77.35 KiB]
109-mal heruntergeladen
20180227_mandelb_bin.zip [25.48 KiB]
97-mal heruntergeladen
Dateikommentar: Linienauswahl
P1510548.JPG
P1510548.JPG [ 2.32 MiB | 4915-mal betrachtet ]
Dateikommentar: Diagram mit dem Ergebnis von mess1.bin
P1510545.JPG
P1510545.JPG [ 2.28 MiB | 4915-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mandelbrot
BeitragVerfasst: Di 27. Feb 2018, 22:11 
Offline
Benutzeravatar

Registriert: Fr 27. Aug 2010, 14:48
Beiträge: 1855
Wohnort: Wrong Planet
Spannend!

U-Held hat geschrieben:
Mal sehen, ob das was bringt. Möglicherweise verliere ich schon eher die Lust am Experiment.
Manchmal braucht man nur 'ne Pause...

_________________
I have a natural instinct for science. — D.J. Trump
OmmmMMMmmmMMMmmmPtimistisch bleiben!
Hive #14 rennt TriOS-pre-R58-20180430
Digitales Heimat-Museum
MediYETIer mal über "Vermummungsverbot und Schleierfahndung"!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mandelbrot
BeitragVerfasst: Mi 28. Feb 2018, 09:52 
Offline
Administrator
Benutzeravatar

Registriert: So 24. Mai 2009, 10:35
Beiträge: 2266
Wohnort: Lutherstadt Wittenberg
Ich bin zwar mehr der Typ Conway/Zellulare System, aber so Sachen rund um Fraktale sind immer eine schöne Denksportaufgabe! ;)


Zeiterfassung:

Wo finde ich adm-dttme.spin?

Pixelcache:

Wenn die Darstellung die Berechnung ausbremst, könnte man vielleicht einen Puffer als Cache in Regnatix verwenden: sieben Cogs keilen den Cache in voller Geschwindigkeit mit den Apfelmänchendaten voll, eine Cog kümmert sich um Übertragung zu Bellatrix.

Keyboardabfrage/Zusatztasten:

Habe den Fehler gefunden. Die Funktionsnummer für spec in g0key stimmt nicht mit der Nummer im IOS überein. Kommt davon, wenn man die Nummer (in g0key) fest verdrahtet, und nicht die globale Definitionsdatei (glob-con.spin) verwendet... ;)Ändere ich für die nexte TriOS-Version.

Verzeichnisse/Dateien:

Nutze doch sddmact(ios#DM_USER), der Usermarker zeigt doch immer auf das aktuelle Verzeichnis.

Warum ios#DM_C nicht funktioniert, kann ich gerade nicht erkennen. Ich habe versucht, die Funktion in Regime nachzuvollziehen mit dmlist/dmset/dm und da funktioniert der C-Marker. Seltsame Sache das...

--- {guru meditation} ---

So, habe die Ursache gefunden. Korrigierter Code (in mess2 schauen) ist anhänglich. Die Ursache ist folgende:

1. Problem: ios.start muss ausgeführt werden, da dort nach dem Start wieder über DM_USER in das aktuelle Userverzeichnis gewechselt wird. Ohne ios.start steht der DM auf Root und es wird im folgende ios.admLoad die Datei nicht im Userverzeichnis gesucht, sondern im Stammverzeichnis.

2. Problem: Durch das Laden eines Administra-Chipcodes geht der DM_USER verloren. Ist ja für Administra quasi wie eine Gehirnwäsche, also woher soll Admin wissen, in welchem Verzeichnis wir uns aktuell befinden? Aber Gehirnwäsche ist eine coole Sache, und ich habe das ja schon an einigen Stellen genutzt - siehe Boing-Demo, welches ebenfalls einen eigenen Administracode startet. Die Lösung: Den aktuellen DM_USER kann man vor der Gehirnwäsche auslesen und nach dem Laden des Chipcodes wieder setzen. (Noch kniffliger ist das bei mental: Hier wechsle ich nicht nur den Chipcode, sondern auch noch von Dirmarkern im alten Code zu echten Pfaden und Verzeichnissen im neuen Code. Da hilft dann auch kein gesicherter Dirmarkerwert mehr, sowas kennt der Administracode von mental nicht mehr...)

Habe den Code angepasst, jetzt startet mess2 auch aus dem Unterverzeichnis und die CVS-Datei wird ebenfalls dort abgelegt.

:)

ios.sdseek(0) ist nicht nötig nach einem open.

Ich muss echt mal eine neue TriOS-Version ausrollen: Habe bemerkt, dass ich schon so einige Sachen aus g0tools ins ios (Farben und screen setzen usw.) eigebaut habe... ;)


Dateianhänge:
apfel.zip [101.51 KiB]
100-mal heruntergeladen

_________________
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Mandelbrot
BeitragVerfasst: Mi 28. Feb 2018, 21:55 
Offline

Registriert: Mi 14. Dez 2011, 22:05
Beiträge: 65
drohne235 hat geschrieben:
Wo finde ich adm-dttme.spin?

Mist, habe ich beim Rückbau meiner wilden Trios-Änderungen vergessen. Ist wirklich nur aus dem OBEX gezogen, _epoc auf 1.1.2000 (=_eprop) gesetzt und Datei umbenannt. Siehe Anhang.

Danke für die Korrekturen und Hinweise. Die schaue ich mir in den nächsten Tagen in Ruhe an (soweit das im ÖPNV geht) und werde sie einarbeiten.

Grüße


Dateianhänge:
Dateikommentar: date_time_ts.spin von Bob Belleville
adm-dttme.zip [2.65 KiB]
92-mal heruntergeladen
Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de