OpenCL에서 커널 선언시 커널 개체의 주소 나 다른 인수를 커널에서 (커널 인수를 설정하면서) 보낼 수 있습니까? 어떻게 주소는 다음 예에서와 같이 포인터가 아닌 데이터 유형에 할당 할 수 있습니다 :OpenCL 커널에서 전달 된 메모리 개체 및 기타 인수
// 호스트 코드에서 커널 인수를 설정 :
errNum = clSetKernelArg(kernel, 0, sizeof(cl_mem), &imageObjects[0]);
errNum |= clSetKernelArg(kernel, 1, sizeof(cl_mem), &imageObjects[1]);
errNum |= clSetKernelArg(kernel, 2, sizeof(cl_sampler), &sampler);
errNum |= clSetKernelArg(kernel, 3, sizeof(cl_int), &width);
errNum |= clSetKernelArg(kernel, 4, sizeof(cl_int), &height);
// 커널 선언 :
__kernel 무효 gaussian_filter (__read_only image2d_t srcImg, __write_only image2d_t dstImg, sampler_t 샘플러 int width, int height)를
코드 "의 일부이다 I mageFilter "코드는 Google Code의 OpenCl Book Sample에 있습니다.
나는 두 가지 의문이 있습니다 여기에
1) imageObjects [0] 이미 입력 영상의 주소를 포함을, 왜 커널에 & imageObjects [0]을 통과 할 필요가있다? 또한 주소가 전달 된 경우 왜 그들은 포인터로 받아 들여지지 않습니까?
2) args 높이와 너비의 주소는 전달되지만 포인터로 받아 들여지지 않는 args는 없습니다. 컴파일 시간에 주어진다. 왜 그러한 일이 일어나는가?
실제로 문제가 있습니까? 아니면 API의 기술에 대한 설명을 요청하고 계십니까? – Thomas
문제가 있으며 API의 기술적 인 부분인지 여부를 알지 못합니다. OpenCL API와 관련이있다 할지라도 나의 의심을 해결하십시오. 나는 인수가 어떻게 통과해야하는지 알지만, 왜 이런 식으로 전달 될지 모르겠다 ...! – shunya