2012-04-19 4 views
0

우리는 메인 태스크를 그들에게 분배하는 멀티 디바이스 시스템을 가지고 있습니다.호스트의 CPU를 결정하는 방법은 무엇입니까?

  1. 엔큐 쓰기 버퍼
  2. 대기열 커널
  3. 대기열 버퍼

모든 대기열에 비동기이고 명령 대기열에 차있는 읽기 : 각 하위이 구성되어 있습니다. 우리는 cl_event에 대한 콜백을 큐 삽입 읽기 버퍼에 지정합니다. 여기에서 주 작업이 완료되었는지 여부를 결정합니다. 그렇지 않은 경우 대기열에 하나 이상의 하위 작업을 예약합니다.

불행히도 호스트의 CPU를 사용 중이므로 다른 장치 (GPU)의 콜백을 처리하지 못하고 대부분 작업에 관여하지 않는 것으로 나타났습니다. 아이디어는 주요 작업을 완료하는 데 사용하는 장치 목록에서 호스트의 CPU를 제외하는 것입니다.

+0

CPU가 아닌 장치 만 폴링하면 안되는 이유는 무엇입니까? – KLee1

+0

호스트에 여러 CPU가있을 수 있으므로 – Kentzo

답변

2

당신은 장치 핵분열을 조사해야합니다. 사용중인 플랫폼이이 기능을 지원하면 cpu 코어 조합으로 opencl 장치를 만들 수 있습니다. Look here for details.이 확장을 통해 호스트 응용 프로그램에 사용할 코어의 수를 줄일 수 있습니다.

나는 다양한 수준의 캐시 메모리를 공유하는 하위 장치를 만드는 방법을 좋아합니다. CL_DEVICE_PARTITION_BY_NAMES_EXT에 관심이있을 수 있습니다 (페이지에서 "CL_DEVICE_PARTITION_BY NAMES_EXT"검색).

+0

다른 CPU에 영향을 미치지 않는 주 CPU인지 어떻게 확인할 수 있습니까? – Kentzo

+0

나는 여전히 호스트가 나머지 코어에서 실행될 것이라고 확신한다. 그렇지 않은 경우 응용 프로그램의 선호도를 설정할 수 있습니다. 이것에 대한 창 "시작"명령을 확인하십시오. 비록 이것이 opencl 장치 쿼리에 대한 CPU 코어 카운트를 제한하는지 확신 할 수 없습니다. – mfa

+0

호스트 CPU에는 정확히 하나의 코어가있을 수 있습니다. 스케줄러가 사용하는 장치 목록에서 제거하고 싶습니다. cl_device_id를 시스템 장치 ID에 매핑하는 방법이 있습니까? – Kentzo

관련 문제