2014-10-09 5 views
0

내 커널에서 장벽을 사용하면 (CLK_LOCAL_MEM_FENCE 또는 CLK_GLOBAL_MEM_FENCE) CL_INVALID_WORK_GROUP_SIZE 오류가 발생합니다. 전역 작업 크기는 512이고 로컬 작업 크기는 128이며 65536 항목을 계산해야하며 장치의 최대 작업 그룹 크기는 1024이며 한 차원 만 사용하고 있습니다. Java 바인딩의 경우 JOCL을 사용합니다. 커널은 매우 간단합니다 :장벽을 사용하면 CL_INVALID_WORK_GROUP_SIZE 오류가 발생합니다.

kernel void sum(global float *input, global float *output, const int numElements, local float *localCopy 
{ 
    localCopy[get_local_id(0)] = grid[get_global_id(0)]; 
    barrier(CLK_LOCAL_MEM_FENCE); // or barrier(CLK_GLOBAL_MEM_FENCE) 
} 

나는 Intel(R) Xeon(R) CPU X5570 @ 2.93GHz에 커널을 실행하고 오픈 CL 1.2을 사용할 수 있습니다. 호출하는 방법은

kernel.putArg(aCLBuffer).putArg(bCLBuffer).putArg(elementCount).putNullArg(localWorkSize); 
queue.put1DRangeKernel(kernel, 0, globalWorkSize, localWorkSize); 

처럼 보이지만 오류가 항상 동일합니다 : 내가 잘못 뭐하는 거지

[...]can not enqueue 1DRange CLKernel [...] with gwo: null gws: {512} lws: {128} 
cond.: null events: null [error: CL_INVALID_WORK_GROUP_SIZE] 

?

+0

JOCL 바인딩에 익숙하지 않지만 putNullArg (localWorkSize) 호출은 로컬 메모리의 바이트를 할당하는 것으로 보입니다. 당신이 시도해야 할 것 : putNullArg (localWorkSize * 4), 또는 putNullArg (localWorkSize * sizeof (float)) – mfa

+0

에 해당하는 것이 아니라면 localWorkSize가 이미 곱 해져서는 안된다고 생각해. – mfa

+0

의견을 보내 주셔서 감사합니다. 그러나 불행히도 해결하지 못합니다. 문제. JOCL 문서는 바이트 크기 (http://goo.gl/ALkBLw)에 대해서는 단지 '크기'라고 말하지 않기 때문에 문제가 아님을 가정합니다. –

답변

6

일부 OpenCL 플랫폼에서 예상되는 동작입니다. 예를 들어 Apple 시스템에서 CPU 장치의 최대 작업 그룹 크기는 1024입니다. 그러나 커널에 장벽이있는 경우 해당 특정 커널의 최대 작업 그룹 크기는 1로 줄어 듭니다.

CL_KERNEL_WORK_GROUP_SIZE 매개 변수와 함께 clGetKernelWorkGroupInfo 함수를 사용하여 특정 커널의 최대 작업 그룹 크기를 쿼리 할 수 ​​있습니다. 반환 된 값은 clGetDeviceInfoCL_DEVICE_MAX_WORK_GROUP_SIZE에 의해 반환 된 값을 넘지 않지만이 경우처럼 작게 허용됩니다.

+1

"예상 된 동작"입니까? 표준 견적을 가지고 있습니까? 내가 뭔가를 놓치지 않는다면, 그런 행동은'장벽'을 완전히 쓸모 없게 만들 것입니다. –

+3

@ Cicada OpenCL 사양은 특정 커널이 장치의 최대 크기보다 작은 최대 작업 그룹 크기를 가질 수 있도록합니다. 이것은 다른 이유로 너무 자주 발생합니다 - 커널이 GPU에서 많은 레지스터를 사용하면 최대 작업 그룹 크기를 줄일 수 있습니다. '예상되는 동작'은 동작이 허용됨을 의미하며 일부 플랫폼에서는이를 수행하는 것으로 알려져 있습니다. 나는 이것이 당신이 어떤 유용한 동기화도 할 수 없다는 것을 의미하기 때문에 이것이 개발자들에게는 고통이라는 것에 동의한다. – jprice

+0

맞습니다. 커널 작업 그룹 크기는 1입니다. 감사합니다. –