Diskussion zum Artikel "OpenCL: Vom naiven zum aufschlussreicheren Programmieren"

 

Neuer Artikel OpenCL: Vom naiven zum aufschlussreicheren Programmieren :

Dieser Beitrag konzentriert sich auf bestimmte Optimierungsmöglichkeiten, die sich eröffnen, wenn die zugrunde liegende Software, auf der das OpenCL-Kernel ausgeführt wird, zumindest ein bisschen berücksichtigt wird. Die Zahlen, die wir hier erhalten, sind alles andere als Spitzenwerte, doch auch sie lassen schon darauf schließen, dass mithilfe der hier und jetzt verfügbaren Ressourcen (die OpenCL-API in der Form, in der sie von den Entwicklern des Terminals implementiert wurde, erlaubt nicht die Steuerung bestimmter Parameter, die für die Optimierung wichtig sind, insbesondere die Größe von Arbeitsgruppen) der Performance-Gewinn über die Ausführung des Host-Programms beträchtlich ist.

Im Allgemeinen unterscheiden sich Speichermodelle je nach Computerplattform deutlich voneinander. Beispielsweise unterstützen alle modernen CPUs automatisches Daten-Caching im Gegensatz zu GPUs, bei denen das nicht immer der Fall ist.

Um die Übertragbarkeit des Codes zu gewährleisten, wird in OpenCL ein abstraktes Speichermodell umgesetzt, an dem sich Programmierer und Hersteller, die dieses Modell auf realer Hardware umsetzen müssen, richten können. Der Speicher, wie er in OpenCL definiert wird, wird in der nachfolgenden Abbildung beispielhaft illustriert:

Das Speichermodell von OpenCL

Abb. 1. Das Speichermodell von OpenCL

Sobald die Daten vom Host an das Device übertragen werden, werden sie im globalen Speicher des Devices gespeichert. Jegliche Daten, die in entgegengesetzter Richtung übertragen werden, werden ebenfalls im globalen Speicher gespeichert (diesmal allerdings im globalen Speicher des Hosts). Das Schlüsselwort __global (zwei Unterstriche!) ist ein Modifikator, der darauf hindeutet, dass Daten, die einem bestimmten Pointer entsprechen, im globalen Speicher gespeichert werden.

Autor: Sceptic Philozoff

[Gelöscht]  
Und können Sie die vollständige Liste der Artikel und die ungefähre Reihenfolge ihrer Veröffentlichung bekannt geben?
 
Interesting: Kann ich die vollständige Liste der Artikel und die ungefähre Reihenfolge ihrer Veröffentlichung bekannt geben?

Nein, das können Sie nicht - wenn Sie meinen, was ich noch schreiben werde. Ich weiß selbst nicht viel.

Und einige Funktionen der MQL5 OpenCL API fehlen noch. Aber sie werden kommen, es gibt keinen Weg ohne sie.

[Gelöscht]  
Mathemat:

Nein, das kannst du nicht - wenn du meinst, was ich noch schreiben werde. Ich weiß selbst nicht viel.

Und einige Funktionen der MQL5 OpenCL API fehlen noch. Aber sie werden kommen, wir können nicht ohne sie auskommen.

Ich verstehe, danke.
 

Vielen Dank, Alexey.

Der Artikel hat sich für mich als äußerst informativ erwiesen, was ich, offen gesagt, nicht erwartet hatte. Ich habe die Idee des kohärenten Zugangs zum Gedächtnis intuitiv gespürt, aber nie versucht, sie zu formalisieren. Aber hier wird alles wiedergekäut und dargelegt. Großartig!

Glücklicherweise hat die erneute Prüfung meines Codes unter dem Gesichtspunkt der Zugriffskohärenz gezeigt, dass er hinreichend optimal ist, was meinem Ego geschmeichelt hat, obwohl es in Wirklichkeit eine einfache Folge eines Zufalls ist (Besonderheiten meiner früheren Aufgaben) ;-) Aber für die Zukunft habe ich mir vorgenommen, die Kohärenz der Speicherzugriffe in allen Phasen des Kernel-Designs sorgfältig zu verfolgen.

--

Die Stilistik des Artikels im Allgemeinen hat mich zu Bewunderung veranlasst. Es ist selten, dass Artikel über mql-Ressourcen (und nicht nur!) Details und Respekt vor dem Intellekt des Lesers verbinden. Um einen solchen Stil zu verwirklichen, braucht man ein feines Gespür für Proportionen und ein genaues, realistisches Gespür für die Grenzen der Wahrnehmung des Publikums (am Rande des telepathischen Kontakts). Das ist wirklich cool. Nochmals vielen Dank!

 

Welchen Dank ich dir zu sagen habe, Vladimir, weißt nur du. Echte Hilfe von dir war nicht nur, wenn es notwendig war, etwas auf deiner Karte laufen zu lassen, sondern auch bei der Programmierung im Allgemeinen. Die Erfahrung und das Wissen eines Profis ist viel wert!

P.S. Irgendwie erinnert mich dieses Bild an die Karte von Russland...

 

Mathemat, ich danke Ihnen und Ihrem Partner MetaDriver für den Artikel. Ich habe mich schon lange nicht mehr so gefreut, nachdem ich ihn gelesen habe :-))))

Natürlich sind noch viele Dinge unklar... Ich werde sägen...

 
denkir: Natürlich sind noch viele Dinge unklar... Ich werde schreiben...

Fang mit dem ersten an, der Link ist im ersten Satz des zweiten Artikels. Bei der Bewältigung eines solchen Stoffes braucht man Langsamkeit und etwas Zeit, um das ganze Durcheinander in seinem Kopf zu verarbeiten.

Danach wird es noch schwieriger werden.

 
Mathemat:
Beginnen Sie mit dem ersten Artikel, der Link befindet sich im ersten Satz des zweiten Artikels. Bei der Bewältigung eines solchen Stoffes braucht man Langsamkeit und etwas Zeit, um den ganzen Brei in den Kopf zu bekommen und zu verdauen.

Ja, genau das habe ich getan...

Imho werden mehr einfache Beispiele benötigt... und irgendwie mit dem Handel verbunden... dies ist der erste Eindruck....

 
denkir: Imho brauchst du einfachere Beispiele... und irgendwie mit dem Handel verbunden... so ein erster Eindruck....

Sie könnten gleich mit nervoset beginnen. Es hat eindeutig mit dem Handel zu tun. Allerdings verstehe ich selbst nichts von Nervosets, aber nach ein paar Tagen würde ich die Grundlagen verstehen.

Glaubst du, es wäre einfacher als eine einfache Berechnung von Pi - auch ohne Eingabepuffer?

Ich bezweifle es.

Ja, das habe ich auch gemacht...

Jeder hat seine eigene Art, sich neue Informationen anzueignen. Ich selbst ziehe es vor, nicht nur zu lesen, sondern gleich mit dem Programmieren zu beginnen. Ohne Übung werden diese Informationen auf jeden Fall ungelernt bleiben.

 
Mathemat:

Sie könnten gleich mit der Nervosität beginnen. Sie hängt offensichtlich mit dem Handel zusammen. Allerdings verstehe ich selbst nichts von Nervengittern, aber nach ein paar Tagen würde ich die Grundlagen verstehen.

Glauben Sie, dass es einfacher wäre als eine einfache Berechnung von Pi - auch ohne Eingabepuffer?

Ich bezweifle es...

Mathematisch gesehen halte ich ein neuronales Netzwerk nicht für ein einfaches Beispiel :-))))

Das PI-Beispiel ist sehr gut, imho ...

Man könnte z.B. einige statistische Berechnungen hinzufügen. Zum Beispiel. Nehmen Sie den Verlauf der Kurse für alle Instrumente im Terminal. Sagen wir mal eine Minute, synchronisieren Sie die Kurse. Es wird ein zweidimensionales Array sein. Es wird wahrscheinlich mehrere tausend Strings geben.... Berechnen Sie die Bewegungen der verschiedenen Perioden für jedes Instrument. Das Array wird bereits mehrere Male wachsen. Und sehen Sie, wie schnell OpenCL mit der Berechnung fertig wird.... das ist der Gedanke für jetzt...