2016-10-19 2 views
2

저는 OpenCL에 대해 매우 새롭습니다 (오늘 시작됨). 다음과 같은 방식으로 배열 번호를 추가하는 커널 코드를 구현하는 데 어려움을 겪고 있습니다. A [] = [1,2,3,4,5,6,7,8,9,10]이면 합은 sum [] = [4,10,16]이어야합니다.OpenCl 커널 코드

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

다음 코드를 시도했지만 작동하지 않습니다.

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++;" 
     " } "; 

확실한 방법입니다. 이 점에 대한 제안은 인정 될 것이다.

답변

1

작업 항목이 세트에서 유일한 것 인 것처럼 i를 계산해야합니다. gid는 작업 항목의 전역 ID이며, 세 번 있어야합니다. gid 또는 i를 사용한 후에도 수정할 필요가 없습니다. 이것은 최적은 아니지만 정답을 얻을 것입니다.

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

감사합니다. 이 코드는 올바른 결과를 산출합니다. 약간의 읽기 후에 작업 항목의 전역 ID를 명시 적으로 수정할 필요가 없다는 것을 깨달았습니다. 귀하의 지원에 감사드립니다 :) – Ijjz