Einfaches OpenCL-Beispiel in R mit R-Code?

8

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:

  1. Ist das möglich und wenn ja, können Sie ein vollständiges Beispiel mit meiner Funktion aaa oben geben?
  2. Wenn das nicht möglich ist, können Sie bitte erklären warum? Ich weiß nicht viel über GPU-Programmierung. Ich sehe GPU genau wie CPUs, also warum kann ich R-Code nicht parallel laufen lassen?
Xu Wang 19.07.2015, 01:32
quelle

2 Antworten

3

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.

    
Nick Kennedy 22.07.2015 16:56
quelle
2

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.

    
Dean MacGregor 22.07.2015 16:04
quelle

Tags und Links