2017-11-13 7 views
0

내 CPU (localhost 호스트)와 연결된 일부 휴대용 장치 (예 : USB)에서 일부 스레드를 실행하고 싶습니다.다른 장치에 병렬 스레드를 생성하려면 어떻게합니까?

OpenCL은 병렬 처리를 지원하지만 OpenCL을 사용하여 휴대용 장치에 작업을 배포하려면 어떻게해야합니까?

OpenCL 이외의 다른 방법으로도 도움이 될 것입니다.

+1

"휴대용 장치"는 무엇을 의미합니까? 어떤 종류의 장치입니까? OpenCL 구현이 있습니까? – pmdj

+1

시스템의 모든 OpenCL 플랫폼과 각 플랫폼의 모든 장치를 나열한 다음 사용하려는 장치에 대해 커널 (가능하면 다른 버전)을 컴파일 한 다음 해당 장치에 작업을 대기열에 넣습니다. 프로그램은 작업 부하를 사용하는 모든 장치에 배포하기위한 논리를 명시 적으로 구현해야합니다. –

답변

0

OpenCL 작업을 실행할 수있는 장치에는 해당 컴퓨터의 OpenCL 드라이버에서 선택할 수있는 설치 가능한 클라이언트 드라이버가 있어야합니다. 그래픽 카드는 (특히 50 년이 넘지 않은 경우) 드라이버가 최신 상태 인 경우 유효한 ICD가 거의 보장되며 많은 소비자 수준의 CPU에는 드라이버가 제공하는 ICD가 있습니다.

그러나 네트워크 장치 또는 USB 장치와 같은 다른 장치는 Heterogeneous Compute 시스템에서 사용하도록 특별히 설계된 경우가 아니면 유효한 ICD를 갖지 못할 수도 있습니다.

//C++ OpenCL API 
cl::Platform target_platform; 
std::vector<cl::Platform> platforms; 
cl::Platform::get(&platforms); 
for(cl::Platform & platform : platforms) { 
    std::string name = platform.getInfo<CL_PLATFORM_NAME>(); 
    if(name == /*Whatever the Name of the platform is*/) { 
     target_platform = platform; 
     break; 
    } 
} 
std::vector<cl::Device> devices; 
target_platform.getDevices(CL_DEVICE_TYPE_ALL, &devices); 
cl::Device target_device; 
for(cl::Device & device : devices) { 
    if(device.getInfo</*...*/>() == /*...*/) {//Whatever properties you need 
     target_device = device; 
     break; 
    } 
} 
을 : 그들은 유효한 ICD이있는 경우 는, 다음 실행시에 자신의 플랫폼에 대한 쿼리와 OpenCL을 컨텍스트를 구성 할 때 사용하도록 선택, 당신은 보통의 OpenCL을 사용하십시오 그것을 같은 방식을 사용하는 단순한 문제입니다
+0

유효한 ICD가없는 경우에는 어떻게해야합니까? 이 경우에 해당 장치에 유효한 ICD를 작성하려면 어떻게합니까? – Jatin

+0

@Jatin 그건 장치 제조사가 만들 것입니다. 몇 천 시간을 보내서 장치의 데이터 시트를 연구하고이를위한 드라이버를 만드는 방법을 배우고 싶지 않은 경우. ;) 사용중인 드라이버가 최신 버전이 아닐 수도 있습니다. 최신 버전을 사용하고 있는지 확인하십시오. – Xirema