opencl을 사용하는 법을 배우고 있습니다. 이제는 하나의 큰 배열을 다른 배열로 복사하는 작업이 매우 간단합니다. a [301] [300] [300] [b] [301] [300] [300]. 그것은 제가 글로벌 워크 사이즈와 로컬 워크 사이즈가 무엇인지 이해하게하는 시험 일뿐입니다. 그리고 SVM을 사용하여 float8 벡터 배열을 커널에 전달합니다.OpenCL 전역/로컬 작업 크기 선택
__global float8* dts,
__global float8* dts_from_file
1 그것은 내가 내 테스트 케이스에서 글로벌 작업 크기> 배열의 크기를 선택해야 할 것 같다
size_t globalWorkSize[3] = { 128, 128, 256 };
(128 * 128 * 256 * 8)> 301 * 300 * 300 그렇지 않으면 잘린 출력이 나옵니다. 세계 작업 규모의 정의에 대해 옳은가 아니면 혼란 스럽습니까? FYI,
CL_DEVICE_ADDRESS_BITS=64
CL_DEVICE_MAX_WORK_GROUP_SIZE=256
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS=3
CL_DEVICE_MAX_WORK_ITEM_SIZES[0,1,2]=256, 256, 256
2는 CL_KERNEL_WORK_GROUP_SIZE = 256에 의해 한정되는 로컬 워크 크기는?
size_t localWorkSize[3] = { 4,8,8 };
늘어나는만큼 큰 값 4로 변경, clEnqueueNDRangeKernel 에러 CL_INVALID_WORK_GROUP_SIZE 때문에 4 * 8 * 8 = 256이 될 것인가?
3. 여러 장치 (CPU + GPU)의 글로벌/로컬 작업 크기는 어떻습니까? 각 장치마다 다른 작업 크기를 지정해야합니까?
미리 감사드립니다.
어떤 종류의 장치가 CL_DEVICE_MAX_WORK_ITEM_SIZES을 256 x 256 x 256으로 제한합니까? 내가 본 대부분의 사람들은 적어도 8192 x 8192 x (무언가) 이상을 가지고 있습니다. – Dithermaster