2014-04-12 4 views
2

내 응용 프로그램에서 사용자에게 다양한 OpenCL 장치를 표시하려고합니다. 장치에 코어 수를 표시하는 방법을 결정할 수 없습니다. 이것은 얼마나 많은 스레드가 동시에 병렬로 실행될 수 있는지에 대한 아이디어를 제공하기위한 것입니다.OpenCL 장치의 코어 수를 얻는 방법은 무엇입니까?

계산 단위는 우리에게 멀티 프로세서의 수를 말해줍니다. 이것은 CL_DEVICE_MAX_COMPUTE_UNITS으로 얻을 수 있습니다. 각 다중 프로세서에서 지원되는 스레드 수를 확인하려면 CL_DEVICE_MAX_WORK_GROUP_SIZE 올바른 매개 변수는 무엇입니까?

다음 결과

내 노트북에 얻을 수있다 :

ATI 7670m GPU 
CL_DEVICE_MAX_COMPUTE_UNITS = 6 
CL_DEVICE_MAX_WORK_GROUP_SIZE = 256 

Intel 3rd gen i5 
CL_DEVICE_MAX_COMPUTE_UNITS = 4 
CL_DEVICE_MAX_WORK_GROUP_SIZE = 1024 

그래서 내 GPU가 가지고 1536 스레드 지원 CPU는 4096 개 스레드에 대한 지원을하고있는 동안? 이것은 분명히 사실이 아니므로 이에 대한 도움이 필요합니다.

답변

1

CL_DEVICE_MAX_WORK_GROUP_SIZE는 작업 그룹에서 허용되는 최대 요소 수입니다. 이것은 병렬 처리의 양과 관련이 없습니다. 즉, 작업 그룹의 모든 작업 항목이 병렬로 실행된다는 규칙은 없으며, 그렇지 않은 구현을 알고 있습니다. (장벽과 같은 작업 그룹 동기화 구조를 다루는 방법이 있습니다.)

불행히도 다른 값 CL_DEVICE_MAX_COMPUTE_UNITS도 막연하게 정의됩니다. Intel의 경우 적어도 "계산 단위"의 수는 일반적으로 프로세서이지만 하나의 HW 스레드 인 CPU와 여러 개의 실행 레인이있는 GPU의 경우 하나의 EU입니다. 나는 ATI도 모르지만, 6 개 유닛은 아마도 CPU 구현에서 4 개 유닛보다 훨씬 더 많은 병렬 처리를 제공 할 것입니다. 즉, "단위"는 사과와 오렌지입니다. 최대 작업 그룹 크기의 1024 및 256은 계산과 관련이 없습니다.

0

컴퓨팅 유닛 수는 순진한 "핵심"정의에 더 가깝습니다. 그러나, 그것은 임의의 하드웨어 아키텍처를 가지고 있을지도 모른다고 생각하고, 내 생각에는 사용자를 혼란스럽게 할뿐입니다.

OpenCL 에센스 & 하드웨어 간의 매핑은 매우 불안정합니다.

관련 문제