Fettpet / DeepIterator

This project implements a trait based iterator.
4 stars 0 forks source link

Collectiv #4

Closed Fettpet closed 7 years ago

Fettpet commented 7 years ago

Verschiedene Ebenen können kollektiv und nicht kollektiv sein. Offene Fragen:

  1. Angenommen wir haben einen vierfach verschachtelten Container. Ist C-N-C-N eine legale Ausführung? Das C bedeutet Collectiv und N nicht collectiv.
  2. Für die Collectivität wird ein offset (Startelement) und eine Sprungweite benötigt. Wo werden diese Informationen gesetzt.
  3. Was genau bedeutet Collective.
  4. Welche Ebenen können collectiv sein, und welche nicht.
Fettpet commented 7 years ago

Zu 3. und 4: Collectiv bedeutet, dass ich eine Operation mit allen Recheneinheiten gleichzeitig durchführen muss. Für unseren Iterator bedeutet dies, dass die Operationen operator++, it = begin(offset) und operator!= von allen Prozessen collectiv durchgeführt werden müssen. Damit nicht alle Arbeiter das gleich tun, benötigen wir einen Offset und eine Sprungweite. Die Sprungweite ist implementiert, der Offset nicht.

  1. Iterator: Particle in Frame Die Funktionen können unabhängig voneinander ausgeführt werden, da nur ein Indize verändert wird. Jedoch wir in der Collectiven Abarbeitung ein Offset benötigt. Dieses muss mitgegeben werden.
  2. Iterator: Frames in Superzelle Die Funktionen haben untereinander abhängigkeiten. Sie arbeiten auf Pointern. Ein weiterrücken eines einzelnen Arbeiters ist somit ausgeschlossen.
  3. Iterator Particles in Superzellen: Hier muss beides beachtet werden: Sowohl die Abhängigkeiten im Superzellen Iterator, als auch der Offset im Particle in Frames.
  4. Iterator: Superzellen im Programm. Auch hier sind die Abhängigkeiten zu beachten.

Aus den Beobachtungen können wir folgende Schlüsse ziehen.

  1. Kollectiv und Nicht Kollektiv sind beliebig verschachtelbar. Vorraussetzung ist jedoch, dass die Arbeiter sich disjunkt auf die Teilaufgaben aufteilen. Dies beantwortet Frage 1.
  2. Nach einer Kollektiven Ebene wird eine Ebene benötigt, welche ein Offset bereitstellt und eine Sprungweite.
  3. Die Sprungweite ist eine Compilezeit Variable. Sie ist schon implementiert.
  4. Das Offset ist eine Laufzeitvariable. Sie muss der begin Funktion mitgegeben werden. Ich gehe davon aus das sie Algorithmisch benutzt wird.
Fettpet commented 7 years ago

Um Collectiv einzubauen muss folgendes getan werden:

  1. Eine Collectiv Policy einführen
  2. Den Container eine möglichkeit geben, ein Offset einzuführen
  3. DeepForeach muss nach allen collectiven Operationen synchronisieren. Dafür benötigt es eine Synchro Funktion.
  4. Elemente können ungültig werden. Wir benötigen einen Wrapper um sicherzustellen, das ungültige Elemente rausgefiltert werden.
Fettpet commented 7 years ago

Das Collectiv scheint eine Implementierungseigenschaft zu sein.

Fettpet commented 7 years ago

Eine Kollective Policy muss mehrere Funktionen Implementieren. Die erste ist eine Synchronisationsfunktion. Nach dem Weiterrücken müssen alle Teilnehmer synchronisieren, damit sie auf den selben Daten arbeiten. Falls sie sich die daten teilen, darf auch nur ein Arbeiter weiterrücken. Dafür benötigen wir eine zweite Funktion.

Fettpet commented 7 years ago

Mir fehlt noch das Offset. Falls eine Ebene Collectiv war, benötigt die Ebene darinter ein Offset, damit die Arbeiter nicht auf dem selben Datum rechnen. Das Offset wird in der begin Funktion des darunterliegenden virtuellen Containers benötigt. In der begin Funktion wird der Construktor des Iterators aufgerufen.

  1. Implementierungsidee: Ich implementiere eine überladung für die begin Funktion, welche ein Offset hat. Die Iteratoren benötigen somit neue Konstruktoren, um das Offset zu setzen.
Fettpet commented 7 years ago

Folgende Probleme sind zum jetzigen Zeitpunkt ungelöst:

  1. Informationsmanagment Nach jeder Collectiven Schicht benötige ich einen Layer, welcher einen Offset bereitstellt. Dieser Offset muss der obersten Layer bereitgestellt werden und nach untern durchpropagiert werden.
  2. Arbeitermanagment Nach einer Kollektiven Ebene stehen vermutlich neue arbeiter bereit. Es ist unklar wie mit diesen umgegangen werden muss. Prinzipell sind unterschiedliche Hardwarekomponenten möglich (Rechner -> Knoten -> CPU -> GPU)
Fettpet commented 7 years ago

Ich habe das Collectiv falsch verstanden. Die Arbeiter sind von anfang an da. Das bedeutet

  1. Falls eine Ebene Kollektiv ist, müssen alle anderen Ebenen auch kollectiv sein.
  2. Die unterste Ebene benötigt einen Offset und eine Sprungweite.
  3. Der ++ operator muss in allen Ebenen, äußer der untersten synchronisiert werden.
Fettpet commented 7 years ago

nicht mehr relevant