2016-10-19 1 views
2

Ich bin sehr neu zu OpenCL (heute gestartet). Ich habe es schwer, den Kernel-Code zum Hinzufügen von Zahlen eines Arrays wie folgt zu realisieren: Wenn A [] = [1,2,3,4,5,6,7,8,9,10], dann sollte die Summe sein [] = [4,10,16];OpenCl Kernel Code

i.e, sum[i]=A[i]+A[i+2]; 
    i=i+3; 

Ich habe den folgenden Code versucht, aber es scheint nicht zu funktionieren.

std::string kernel_code = 
     " void kernel simple_add(global const int* A, global const int* B, global int* C){ " 
     " int x =0;" 
     " int i =get_global_id(0);" 
     " SUM[x]=A[i]+A[i+2];" 
     " i=i+3; 
     " x++;" 
     " } "; 

Ich bin sicher, das ist nicht der Weg, es zu tun. Vorschläge in dieser Hinsicht würden geschätzt werden.

Antwort

1

Sie sollten ich so berechnen, als ob die Arbeitsaufgabe die einzige in der Menge wäre. GID ist die globale ID des Workitems, und ich muss das Dreifache davon haben. Sie müssen GID oder I nach der Verwendung auch nicht ändern. Dies ist nicht optimal, aber es wird Ihnen die richtige Antwort geben.

void kernel simple_add(global const int* A, global const int* SUM){ 
    int gid = get_global_id(0); 
    int i = gid * 3; 
    SUM[gid]=A[i]+A[i+2]; 
} 
+0

Vielen Dank !! Der Code liefert korrekte Ergebnisse. Nach ein wenig Lesen habe ich festgestellt, dass die globale ID des Workitems nicht explizit geändert werden muss. Danke für deine Unterstützung :) – Ijjz

Verwandte Themen