2017-02-06 1 views
0

저는 OpenCl로 행렬 곱셈을 시도하고 있습니다. A는 1000x1000이고 B는 1000x1000이므로 내 C = AxB도 1000x1000입니다. 내가 작업 그룹 크기가 내 문제의 크기이다 읽었습니다 (14)work_group_size를 올바르게 선택하는 방법은 무엇입니까?

size_t local_item_size[2] = { local_size, local_size }; 

내 local_size는, 예를 들면이다. C는 2 차원이기 때문에 설정하려고합니다.

size_t work_group_size[2] = 
    { N, N }; 

err = clEnqueueNDRangeKernel(dev.queue, kernel, 2, 0, 
          global_item_size, work_group_size, 
          0, NULL, &event); 

그러나 CL_INVALID_WORK_GROUP_SIZE이 표시됩니다. global_item_size를 올바르게 선택하는 방법 내 PC의 최대 작업 그룹 크기는 1024입니다. 더 큰 행렬을 사용할 수 없다는 뜻입니까? 고마워요

답변

1

로컬 크기는 전체 크기의 정확한 제수 여야합니다.

1000x1000 당신은 패드 전체 배열은 그래서하지만 정확히 패딩 패치에서 작동 1400x1400 같은 것을 가지고해야, 정확히 10 × 10 또는 20X5로 나누어과

로컬 크기 (14)을 주장하는 경우

유사하다. 이것은주기를 낭비했지만 적어도 1400x1400까지 (그리고 포함하여) 모든 크기에 호환됩니다.

장치의 최대 로컬 크기가 1024 인 경우 32x32 로컬 크기를 처리 할 수 ​​있습니다. 또는 1-D에서 1024

관련 문제