저는 OpenCL을 사용하는 데있어서 아주 새로운 제품이며 매우 간단해야합니다.OpenCL을 사용하여 배열을 검색하고 플래그를 설정하십시오.
배열을 검사하고 특정 값을 찾기 위해 간단한 커널을 작성하고 있습니다. 그 값이 배열의 어디에서든지 발견되면 플래그를 설정하고 싶습니다. 값을 찾지 못하면 플래그는 0으로 유지됩니다.
은 현재 내가 커널 인수clSetKernelArg(mCLKernels[1],1, sizeof(cl_mem), &outputFlag);
로 설정하는 int
cl_mem outputFlag = clCreateBuffer(mCLContext, CL_MEM_WRITE_ONLY, sizeof(cl_int), NULL, NULL);
을 유지하기 위해 cl_mem 객체를 생성하고 보이는 내 커널을 실행하고있어 같은 :
__kernel void checkForHole(__global uchar *image , __global int found, uchar holeValue)
{
int i = get_global_id(0);
int j = get_global_id(1);
uchar sample = image[i*j];
if (sample == holeValue) {
found = 1;
}
}
내 배열은 2D이지만, 중요하지 않아야합니다.
발견 된 조건 안에 printf 문을 넣으면 호출됩니다 (값이 있음). 하지만 내 값을 다시 읽을 때 :
cl_int result;
errorCode = clEnqueueReadBuffer(mCLCommandQueue, outputFlag, CL_TRUE
, 0, sizeof(cl_int), &result, 0, NULL, NULL);
나는 0을 얻습니다. openCL에 플래그를 설정하는 적절한 방법이 있습니까? 전체 실행을 중단하고 발견 된 경우 내 값을 반환하는 방법이 있다면 또한 좋을 것입니다.
bool 반환 유형 커널을 작성하고 true를 반환 할 수 있습니까?
감사합니다.
각 스레드가 배열의 한 요소 만 검색하는 경우 GPU로 보내면 실행을 중지 할 수 없습니다. – KLee1
@ KLee1 왜? 더 복잡한 커널의 실행을 중지 할 수 있다면 간단한 커널의 실행을 중지하는 것이 왜 불가능합니까? –