Dieser Text ist sowohl Frei, als auch Falsch und kann gerne als Lerngrundlage verwendet, erweitert und kopiert werden. Ich selbst werde diesen Text wie einen Kernel weiter ausbauen und verfeinern mit der Zeit und den gelernten Erkenntnissen ueber SYCL.
1.) Laufzeit SYCL trennt strikt zwischen Host (CPU), Scheduler (Laufzeit) und Device (Beschleuniger).
2.) Compiler Device SYCL Der Compiler trennt den Code in Host-Code und Device-Code
3.) Kern Laden
4.) Laufzeit Scheduler Umgebungszuweisung queue::submit commands scheduler Ein queue.submit erstellt eine Command Group Der Scheduler entscheidet nicht nur wann, sondern durch den DAG (Directed Acyclic Graph) auch ob Daten bereit sind.
4.) a. CPU/GPU:quene, cg, sheduler, target device = Reihenfolge
5.) Daten Sucher Laufzeit
6.) Arbeitsgruppenbestimmung
7.) Speicher wird unter SYCL konstant gefuellt. Egal wo er ist. Speicher-Abstraktion: SYCL füllt den Speicher virtuell. Es ist egal, wo er physisch liegt, solange der Accessor den Zugriff regelt.
8.) SYCL SPEICHERSYNCHONISATION Adress Bereich plus Buffer mal Akzeptanzgeber plus USM Zeiger
9.) Privater Speicher = work item acess priv.mem. a work item cannot acess to priv.mem of another work item. Nur für das einzelne Work-Item (Register-Geschwindigkeit).
10.) Arbeitsgruppen fuer Arbeitsitem in lokalem Speicher fuer Arbeititems ist es erlaubt Zugang zum lokalem Speicher zu bekommen,
wenn alle Arbeitsgruppen in einem Arbeitsitem einer Arbeitsgruppe gleich sind. Gemeinsam für alle Work-Items einer Work-Group (schnelles Scratchpad).
11.) Ein Arbeitsitem kann Zugang zum lokalem Speicher einer anderen Arbeitgruppe haben.
12.) Jede Speicherregion hat ein unterschiedliche Groeße und Lage und dadurch Zeiverzoegerung! Private Memory: Nur für das einzelne Work-Item (Register-Geschwindigkeit). Local Memory: Gemeinsam für alle Work-Items einer Work-Group (schnelles Scratchpad). Global Memory: Langsam, aber groß. Für alle verfügbar.
13.) Die Generische Speicherschicht ueberlagert die Private Speicherschicht.
Diese wiederum sind Kleiner als lokaler Speicher und dieser ist Kleiner als globaler Speicher.
Unterschiedlicher Zugang und Groeße beachten bei Berechnunge auf dem Chip phyisch.
In Tabelle gruen mit meriadian links Oben, nach rechts Unten Mittig als schnellster und bester "Ort zum Rechnen auf einem chip."
Mandelbroteffekt bei unterschiedlicher Rechenschichtlage beachten.
Die goldene Regel des Local Memory: Ein Work-Item kann niemals direkt in den lokalen Speicher einer anderen Work-Group greifen. Synchronisation (barrier) funktioniert nur innerhalb der eigenen Gruppe.
14.) (Meine Erfindung) Kreuzberechnungen mit Puls im Tackt einmal Rechts nach Links unten
und einmal wieder andersrum entlastet den chip bei der Hitze und schafft mehr Spielraum fuer Berechnungen.
Diese als Wuerfel oder Eimer packen und dann erst als Fertig validieren.
Generic Address Space: Ein Zeiger, der alles "überlagert" und zur Laufzeit entscheidet, ob er auf privat, lokal oder global zeigt. Thermische Entlastung durch geschickte Verteilung innerhalb des schnellen Speichers, ohne die Latenz des großen globalen Speichers zu triggern.
15.) Buffer unter sycl kann mit zeiger auf speicher gebaut werden.
Host memory fuer die Lebenszeit des Buffers kann er die SYCL Laufzeit sein!
16.) Wenn ein buffer zwischenspeicher objekt Gebildet wird,
wird das Objekt nicht zuerst in den Hauptspeicher des Geraetes geschrieben.
17.) Das Objekt wird nur dann zuerst in den Hauptspeicher des Geraetes geschrieben,
wenn die Laufzeitumgebung weis, das Daten wieder Zugang benoetigen und wo dieser Zugang ist.
18.) Wir bauen fuer jeden buffer einen accessor liest zugang fuer die zwei eingang buffer und schreibt zugangserlaubnis fuer den ausgang buffer,
an addiditonal prperty is passed to the output acessor to specifiy that the prevouis data will not be used
19.) Wir definieren eine SYCL Kernfunktion fuer die Kommandogruppen indem wir paralelle API Abfragen mit dem erstem Argument
the first arguent specifiziert die iteration space and the second on, the device code
this lambda takes a parameter descriptiiong the current workitem
20.) Komando Gruppen: Bedingungen + Kern Funktionen
21.) ND-Ranges: nd-range number of work groups and subsequentyl a numer of work items work groups always have the same number of work items.