Ist es möglich, OpenCL aber mit R-Code zu verwenden? Ich habe immer noch kein gutes Verständnis für OpenCL- und GPU-Programmierung. Angenommen, ich habe den folgenden R-Code:
%Vor% Ich mag, dass ich mclapply
als Tropfenersatz für lapply
verwenden kann. Gibt es eine Möglichkeit, dies für OpenCL zu tun? Oder um OpenCL als Backend für mclapply
zu verwenden? Ich schätze, das ist nicht möglich, weil ich kein Beispiel gefunden habe, also habe ich zwei Fragen:
aaa
oben geben? Ich beginne mit der Task-Ansicht für High Performance Computing CRAN , insbesondere der Parallele Berechnung: GPUs .
Es gibt eine Reihe von Paketen, die GPGPU für bestimmte Aufgaben nutzen, die sich für eine massive Parallelisierung eignen (zB gputools , HiPLARM ). Die meisten davon verwenden NVIDIAs eigene CUDA anstelle von OpenCL.
Es gibt auch ein generischeres OpenCL -Paket, aber Sie müssen lernen wie man OpenCL-Code selbst schreibt und lediglich eine Schnittstelle zu diesem Code von R bereitstellt.
Dies ist nicht möglich, weil GPUs anders arbeiten als CPUs, was bedeutet, dass Sie ihnen nicht dieselben Anweisungen geben können, die Sie einer CPU geben würden.
Nvidia zeigt eine gute Show mit diesem Video zur Beschreibung des Unterschieds zwischen CPU- und GPU-Verarbeitung. Im Wesentlichen ist der Unterschied, dass GPUs typischerweise um Größenordnungen mehr Kerne als CPUs haben.
Ihr Beispiel ist eines, das auf GPU-Code erweitert werden kann, da es sehr parallel ist.
Hier ist ein Code zum Erstellen von Zufallszahlen (obwohl sie normalerweise nicht verteilt sind) Ссылка
Sobald Sie die Zufallszahlen erstellt haben, können Sie sie in Blöcke zerlegen und dann jeden der Blöcke parallel summieren und dann die Summen der Blöcke addieren, um die Gesamtsumme zu erhalten. Ist es möglich, die Summenberechnung parallel in OpenCL auszuführen?
Ich verstehe, dass Ihr Code den Zufallszahlenvektor und seine Summe seriell und parallel zu dieser Operation 10-mal machen würde, aber mit GPU-Verarbeitung, mit nur 10 Aufgaben ist nicht sehr effizient, da Sie so viele Kerne im Leerlauf lassen würden.