Zugriffsvektortyp OpenCL

7

Ich habe eine Variable innerhalb eines Kernels wie:

%Vor%

Ich würde gerne wissen, ob es eine Möglichkeit gibt, das dritte int in element wie

zu adressieren

element[2] , so dass ich dasselbe wäre wie das Schreiben von element.s2

Also wie kann ich etwas tun wie:

%Vor%

So wie ich es gemacht habe:

%Vor%

Ich weiß, das ist schrecklich, aber es funktioniert,; -)

    
Caslu 20.03.2012, 14:33
quelle

6 Antworten

11

Nun, es gibt noch einen dreckigeren Weg :), ich hoffe OpenCL bietet eine bessere Möglichkeit, Vektorelemente zu durchlaufen.

Hier ist meine Art es zu tun.

%Vor%

Btw rand () Funktion ist nicht im OpenCL-Kernel verfügbar, wie hast du es gemacht ??

    
kiranputtur 21.03.2012 05:00
quelle
9

AMD empfiehlt , Vektorkomponenten auf diese Weise zu erhalten:

Platziere das Array von Masken in einen OpenCl-Konstantenpuffer:

%Vor%

Schreiben Sie im Kernel so etwas:

%Vor%     
aplavin 18.07.2012 20:12
quelle
6

Die Verwendung von Zeigern ist eine sehr einfache Lösung

%Vor%     
MindX 13.08.2012 22:35
quelle
4

Es ist möglich, aber nicht so effizient wie der direkte Zugriff auf Arrays.

%Vor%

Aber natürlich, wenn Sie auf diese Weise komponentenweise Zugriff benötigen, besteht die Möglichkeit, dass Sie besser keine Vektoren verwenden.

    
user1111929 26.03.2012 20:17
quelle
4

Ich verwende diese Problemumgehung, in der Hoffnung, dass Compiler schlau genug sind, um zu sehen, was ich meine (ich denke, dass der Zugriff auf Elemente eine ernsthafte Unterlassung des Standards ist):

%Vor%     
eudoxos 26.03.2012 20:40
quelle
2

Nein, das ist nicht möglich. Zumindest nicht dynamisch zur Laufzeit. Sie können aber einen "compile-time" -Index verwenden, um auf eine Komponente zuzugreifen:

%Vor%

Siehe Ссылка Abschnitt 6.1.7

    
Daniel 20.03.2012 22:30
quelle

Tags und Links