Unterschied PRIMARY zu CORE

Fragen und Antworten, Beispiele

Moderator: herw

Antworten
Benutzeravatar
saXist
synthesist
Beiträge: 83
Registriert: 6. November 2007, 21:21
Wohnort: kÖln
Kontaktdaten:

Unterschied PRIMARY zu CORE

Beitrag von saXist »

Hallo Reaktor´en,

Worin besteht der Hauptunterschied zw. primary-macro und core-macro, bei gleicher Funktion.
Sound?
Rechengeschwindigkeit/Latenz?
CPU-Last?

Bin da aus der BA nicht wirklich schlau geworden.
... DER saXist
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Unterschied PRIMARY zu CORE

Beitrag von herw »

saXist hat geschrieben:Hallo Reaktor´en,

Worin besteht der Hauptunterschied zw. primary-macro und core-macro, bei gleicher Funktion.
Sound?
Rechengeschwindigkeit/Latenz?
CPU-Last?

Bin da aus der BA nicht wirklich schlau geworden.
meistens sind die Core-Module qualitätsmäßig viel besser; zum Beispiel die Oszillatoren haben einen raffinierten und deutlich hörbaren antialaising-Algorithmus. Allerdings kostet das CPU-Verbrauch. Generell sind Core-Macros noch eine Ebene näher an der Maschine. Core-Macros verhalten sich dann auf primary-Ebene wie die vorgegebenen primary-Module. Core hat keine Möglichkeit auf das Panel zuzugreifen, d.h aller optischer Schnickschnack wie Regler, Fader, Buttons, also alles was auf der Bedienoberflöche sichtbar werden kann, ist Sache der Primary-Module.
Leider ist REAKTOR noch nicht soweit entwickelt, dass man eine strickte Trennung vornimmt, also zum Beispiel in der Art, dass man alle Rechnungen der Core-Ebene überlässt und die Panelelemente den reinen Primary-Modulen.
Ein wichtiger Unterschied, der dich schnell zur Verzweiflung bringen wird, ist die Gleichzeitigkeit. Im primary gibt es keine Gleichzeitigkeit, dagegen in core doch. D.h. die normale Denkweise einer mathematischen Operation zum Beispiel findet ihren Widerpart nur auf Core-Ebene.
Ein einfaches Beispiel: gelangen zwei Zahlen "gleichzeitig" an ein Additionsmodul, so verareitet primary zuerst einen Summand (und gibt ein falsches Ergebnis heraus mit dem noch nicht aktualisierten zweiten Summand) und addiert anschließend erst den zweiten aktualisierten Summand. Eine Addition ergibt also unter Umsänden zwei neue Events. In Core dagegen hat man es wirklich logisch mit Gleichzeitigkeit zu tun: zwei Summanden werden hier addiert und es wird nur ein Ergenis ausgegeben.
Zuletzt geändert von herw am 11. November 2007, 19:20, insgesamt 1-mal geändert.
Benutzeravatar
saXist
synthesist
Beiträge: 83
Registriert: 6. November 2007, 21:21
Wohnort: kÖln
Kontaktdaten:

Beitrag von saXist »

dank herw - gut verstanden!
Core ist die aktuellste Version, geht in der Rechen- und Bearbeitungsebene tiefer, genauer, schneller, verbraucht aber auf Grund der pos. Eigenschaften mehr CPU!
Der Hinweis auf mögliche, ungenaue Logik+Rechenoperationen durch das fehlenden Praralellprozessing in Primary-Modulen könnte das ein oder andere Fehlergebniss begründen.
... DER saXist
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Gleichzeitigkeit

Beitrag von herw »

saXist hat geschrieben:dank herw - gut verstanden!
Core ist die aktuellste Version, geht in der Rechen- und Bearbeitungsebene tiefer, genauer, schneller, verbraucht aber auf Grund der pos. Eigenschaften mehr CPU!
Der Hinweis auf mögliche, ungenaue Logik+Rechenoperationen durch das fehlenden Praralellprozessing in Primary-Modulen könnte das ein oder andere Fehlergebniss begründen.
Ich greife das Thema nochmals auf und möchte an einem ganz simplen Beispiel die unterschiedliche Eventverarbeitung in primary und core erläutern:
Das Ensemble besteht nur aus einem Regler, dessen Werte quadriert werden. Der Eventwatcher gibt die einzelnen Events aus.
primary vs core 1.jpg
Sieht ganz harmlos aus. Wir erwarten,nachdem der Regler auf 0 steht, die Ausgabewerte 1, 4, 9,16,25,usw. !
Doch weit gefehlt! 0, 1, 2, 4, 6, 9, 12, 16, 20, usw. .
Der Regler wurde von mir auf 0 gestellt und der Eventwatcher zurückgesetzt. Alle PrimaryLevel-Module verarbeiten ihre Eingangswerte niemals gleichzeitig, sondern speichern die anliegenden Werte intern ab. Bei jedem Eintreffen eines Events (auch von derselben Quelle!) wird ein zusätzlicher Wert ausgegeben; in diesem Beispiel die zuvor berechnete Quadratzahl plus (!???) dem neu eingestellten Wert. Würde man in der weiteren Verarbeitung zum Beispiel die ausgegeben Events zählen, käme man schon völlig durcheinander, ganz zu schweigen, dass eine Auswertung der Events durch Router völlig chaotisch ist.
Nun drei Lösungen in Core (schließe das zweite Makro core Version 1 an den Eventwatcher):
Hier ist der Inhalt der CoreCell:
primary vs core 2.jpg
Wie erwartet (??) erhalten wir denselben Ablauf. Wo ist da die Gleichzeitigkeit? Nun wir haben nicht beachtet, dass die CoreCell ja vom Primary-Level gefüttert wird. Dort gibt es keine Gleichzeitigkeit, also muss die CoreCell wie das PrimaryLevel Makro reagieren. Sie erhält die Eingangswerte nacheinander!
Was bedeutet nun Gleichzeitigkeit? Die CoreCell darf ihre Operation nur durchführen, wenn innerhalb der CoreCell auch gleichzeitige Events vorliegen. Da hilft uns das Latch-Modul. (schließe das zweite Makro core Version 2 an den Eventwatcher). Das Latchmodul ist ein Zwischenspeicher, dass erst gezielt durch einen Event seinen Wert ausgibt, in diesem Fall mit Hilfe des unteren Eingangs.
primary vs core 3.jpg
Der obere Eingangswert „wartet” auf den unteren, der dann gleichzeitig (wie man denkt!!!) an die Multiplikation übergeben wird. Bei verschiedenen Eventquellen muss man dies beachten. Für dieses spezielle Beipiel gibt es eine noch einfachere Lösung.
Nun schließen wir das vierte Makro core Version 3 an.
primary vs core 4.jpg
Wir übernehmen aus dem PrimaryLevel nur den Reglerwert und überlassen allein der CoreCell die Berechnung. Da die CoreCell nur einen Event erhält, ist dieser (natürlich) zu sich selbst ;-) gleichzeitig. Somit kann die Multiplikation - mit unserem Denken übereinstimmend - auch genau so durchgeführt werden. Wir erhalten nur die erwarteten quadrierten Werte.
Wer noch mehr staunen will, kann dasselbe Beispiel mal für das „Kubieren” x^3 durchführen. Vielleicht findet ihr auch heraus mit welchem System das PrimaryLevel Zwischenwerte ausgibt.

Meine Empfehlung: auch wenn man nicht gerne gänzlich zur Core-Ebene überwechseln will, so sollte man doch wenigstens die Eventverarbeitung den CoreCells überlassen. Die Konstruktion der Struktur ist fast der primary-Ebene entsprechend. Lediglich Latch-Module müssen eventuell hinzugefügt werden.

Nicht erwähnt habe ich noch, dass die Reihenfolge, mit der die Primary-Ebene Werte an Makros oder Rechenoperationen übergibt zudem noch davon abhängt, in welcher Reihenfolge die Wires gelegt wurden !?! :?

ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Antworten