2013-06-22 3 views
0

저는 해결하기 어려운 문제가 있습니다. 필자는 두 개의 배열을 가지고 있는데, 하나는 모든 커널 호출에 대해 고정 크기이고 1D 배열에 매핑 된 일반 3D 그리드입니다. 이 배열을 호출 할 수 있습니다. meshData 두 번째 배열은 x, y, z 좌표와 meshData 배열에 정렬되지 않은 점의 값을 저장합니다. 이 pointData를 호출 할 수 있습니다.opencl 커널의 배열을 반복합니다.

이제 OpenCL을 사용하여 meshData 배열을 실행해야하며 두 배열을 커널에 전달하고 pointData 배열에 저장된 점의 수를 전달합니다. 커널 내에서 x, y, z 좌표를 meshData의 현재 요소의 좌표 값으로 계산 한 다음 for 좌표를 사용하여 pointData 배열의 모든 점을 찾는 좌표를 사용합니다. 루프의 내부에서 나는

for (l = 0; l < points; l++) { 
    if(x1Cell <=pointdata[l*indexOffset] && x2Cell >= pointData[l*indexOffset && 
     y1Cell <=pointdata[l*indexOffset + 1] && y2Cell >=pointdata[l*indexOffset + 1] && 
     z1Cell <=pointdata[l*indexOffset + 2] && z2Cell >=pointdata[l*indexOffset + 2]){ 

    } 
} 

문제가 나는 등 x1Cell, x2Cell에 대한 값을 하드 코딩하는 경우 다음 코드는 if 문 안에 얻을 수 있다는 것을 말하는 경우 문을 가지고,하지만 난에 대한 계산 된 값을 사용하는 경우 x1Cell 등 다음 조건은 결코 y1Cell을 지나치지 않습니다.

나는 전체 코드를 OpenCL이 아닌 코드로 사용하기 때문에 작동한다는 것을 알고 있습니다. OpenCL에 위와 같이 놓친 것이 있습니까?

+0

"pointData [l * indexOffset &&"]에 "]"이 (가) 없습니다. – chippies

+0

지적 해 주셔서 고맙습니다. 포스트에 대해 위의 내용을 작성 했으므로 실제로 문제가되지 않았습니다. 그러나이 문제는 완전히 무관합니다. 대답은 다음과 같습니다. – airtruk

답변

0

위의 설명은 if 문과 관련이 없지만 1D 배열의 x, y 및 z 오프셋을 계산 한 코드 부분보다 원본 3D 좌표와 관련 될 수 있습니다. 그것은 귀하의 변수 계산을 철저히 점검하는 데 드는 돈입니다!

modulus를 사용하여 get_global_id()에서 x, y 및 z를 계산해야했고 실제로 검사 할 조건을 채우고 실제로 존재하지 않는 오프셋을 얻었으므로 위의 긴 if 문은 결코 될 수 없었습니다. 참된!