2011-05-02 3 views
0

저는 병렬 응용 프로그램을 만들고 있는데 혼란 스럽기 때문에 한 가지 질문을하고 싶습니다. 100 개의 커널 인스턴스가 있고 그 값을 팔고 싶습니다. 모든 커널이 동일 할 것입니다. 모든 커널에 대해 동일한 값 (각 커널에 대해 하나씩)을 배열해야합니다. 아니면 하나의 값으로 충분합니다. 단일 값을 사용하면이 값에 대한 동시 액세스가 유지됩니까? 값은 읽기 전용입니다.OpenCL 커널 매개 변수 값에 대한 동시 액세스

답변

0

이 같은 clEnqueueNDRangeKernel()를 통해 출시 커널에 읽기 전용 인수로 스칼라를 통과 할 수 있는지 여부를 묻는 경우 :

__kernel void kerncode(int cval,.....) { ... }; 
. 
. 
. 
int magiconstant = 1234567; 
clSetKernelArg(kerncode, 0, sizeof(int),(void*)&magiconstant); 
. 
. 
clEnqueueNDRangeKernel(queue, kerncode, ...); 

그 대답은 '예, 물론 당신이 할 수있는.

+0

내가 작성한 것처럼 값을 저장하면 개인 메모리에 저장됩니까? 그리고 이런 식으로 할 때 : ** 커널 무효 코드 (__ local int cval, .....) ** ** 은 작업 블록에서이 값을 읽을 때 동시 액세스를 유지합니다. 항목? –

+0

그런 __local 메모리를 사용할 수 있다고 생각하지 않습니다. 커널 외부에있는 __local 메모리를 초기화 할 수 없습니다. – talonmies

+2

로컬 메모리를 확실히 사용할 수 없습니다. 로컬 메모리는 외부에서만 할당 할 수 있지만 호스트에서는 쓸 수 없습니다. 스칼라를 사용하는 가장 좋은 방법은 탤런에 의해 언급되었습니다. 전체 메모리가 너무 느립니다. 상수 메모리는 많은 계산 중에 전역 성질을 갖는 한 적합 할 수 있습니다. –

관련 문제