2012-07-17 4 views
0

pthread를 만들 수 있고 각 pthread 내부에서 opencl 환경을 만들고 동일한 커널을 호출 할 수 있습니까? 내가하려고하는 일은 동일한 장치에서 opencl 커널을 병렬로 실행하는 것입니다. 이것이 가능한가?pthreads와 opencl

답변 해 주셔서 감사합니다.

답변

6

첫눈에이 솔기는 불필요합니다.

clEnqueueNDRange() API 호출을 사용하여 OpenCL 커널을 시작하면 필요한만큼의 커널을 시작할 수 있습니다. 각각은 동일한 장치의 자체 스레드로 사용됩니다. OpenCL 모델은 하나의 컨텍스트/명령 대기열이 GPU에서 100 - 1000s의 경량 커널 스레드를 실행할 수 있다는 것입니다.

+0

감사합니다. – user1459175

1

Tim이 지적했듯이 OpenCL이 많은 스레드/커널을 지원할 때 opencl을 사용하여 pthreads로 들어가기를 원할 것입니다. GPU의 추가 스레드는 pthread와 비교하여 매우 가볍습니다. Pthread는 문맥 전환에 많은 비용이 소요되며 실제로 성능을 크게 떨어 뜨릴 수 있습니다.

그러나 동일한 명령 대기열로 많은 커널을 시작하면 커널이 순차적으로 실행됩니다. 커널마다 다른 명령 대기열이 있어야합니다. 나는 커널을 병렬로 실행하는 데있어 단일 컨텍스트가 문제가되어서는 안된다고 믿습니다 ...

+0

6970에서 지원되는 병렬로 여러 커널을 시작할 수 있습니까? 내가 사용 해야하는 opencl 버전이 있습니까, 내가 묻는 이유는 두 개의 명령 대기열을 만들었고 속도 향상을 보지 못했지만 선형 속도 향상을 기대하지는 않지만 다시 .... 나는 opencl 버전 1.1을 사용하고 있습니다. . – user1459175

+0

글쎄, 왜 여러 커널이 6970에서 지원되어서는 안되는 지 알지 못합니다.이 질문에 대답하기는 다소 어려울 지 모르지만 입력 데이터 크기가 다양하고 성능이 좋지는 않을 것입니다. – Nike

+0

감사합니다. 더 큰 매트릭스를 시도해보십시오. 1024 * 1024 크기의 매트릭스 전치를 시도했습니다. – user1459175