2014-12-15 5 views
1

속도 향상을 테스트하기 위해 GPU 코어 수를 제어하고 싶습니다. OpenCL에서 어떻게 할 수 있습니까? 동기화를 제어하기 위해 그룹 크기를 제어 할 수 있다는 것을 알았지 만 그룹 크기가 백 개가 될 수 있기 때문에 혼란 스럽습니다. 이는 GPU 코어 수보다 훨씬 큽니다.OpenCL 사용하는 프로세서 수를 제어하는 ​​방법

+2

장치 분열 장치를 사용하십시오 (OpenCL> = 1.2). –

+1

@ 박영배 (Pat Young-Bae) 답변이없는 탭에서 질문을 지우려면 답을 써주세요. –

답변

3

당신이 찾고있는 것은 장치 핵분열입니다. 이것은 OpenCL 1.1의 확장이며 OpenCL 1.2의 핵심 사양입니다.

시작 지점을 알려면 clCreateSubDevices을 사용해야합니다. 예를 들어, 하나의 컴퓨팅 장치에서 실행되는 커널을 제한하기 위해, 당신은 같은 properties을 통과 할 수 있습니다 :

{ 
    CL_DEVICE_PARTITION_BY_COUNTS, 
    1, // Use only one compute unit 
    CL_DEVICE_PARTITION_BY_COUNTS_LIST_END 
} 

이 하나 개의 컴퓨팅 장치로 구성된 하나의 서브 장치를 생성하여 드라이버를 알려줍니다. 그런 다음 해당 하위 장치에서 커널을 실행할 수 있습니다.이 하위 장치는 하나의 계산 장치에서만 예약됩니다.

+0

기본적으로 모든 코어가 사용됩니까? – ethanjyx

+1

* 물리적 장치 ('clGetDevices'에 의해 반환 된 장치)에서 커널을 실행하면, 모든 계산 단위가 사용됩니다 ("코어"라는 용어는 모호한 의미를가집니다). 논리 장치 * (하위 장치)에서 커널을 실행하면 지정한 계산 단위 수만 사용됩니다. –

+0

내가 fx8150의 nbody 알고리즘을 사용하여 8 대신 7 코어 만 선택하면 성능이 % 50- % 70까지 올라갔습니다. 아마도 opencl에 대한 모든 코어를 사용하여 다른 스레드에 실행할 기회를 허용 할 수있었습니다. –

관련 문제