나는 매우 빠르게 병렬 처리 될 수 있다고 믿는 이미지 처리 루틴을 가지고있다. 각 픽셀은 이웃에서 수행되는 작업에 의존하지 않는 방식으로 약 2k 작업을 수행해야하므로 작업을 여러 단위로 분할하는 것은 매우 간단합니다.
제 질문은이 변화에 접근하는 가장 좋은 방법은 무엇입니까? 그러니 내가 가장 빠른 스피드 업을 얻을 수 있습니다.
이상적으로 내가 찾고있는 라이브러리 / 접근 방식은 다음 기준을 충족해야합니다.
어떤 라이브러리 / 접근 방식 / 언어를보고해야합니까? OpenMP, CUDA, GCD 등과 같은 것들을 살펴 봤지만, 제가 놓친 다른 것들이 있는지 궁금합니다.
저는 셰이더와 OpenGL 2.0과 같은 것에 지금 기대고 있습니다. 그러나 그것은 적절한 호출이 아닐 수도 있습니다. 내가 얼마나 많은 메모리 액세스를 할 수 있는지 잘 모르겠습니다. 2k 작업은 이웃 픽셀을 모두 액세스해야합니다. 많은 방법.
가장 쉬운 방법은 그림을 병렬로 처리 할 수있는 부품 수 (코어에 따라 4, 8, 16)로 나누는 것입니다. 그런 다음 각 파트마다 다른 프로세스를 실행하십시오.
이 작업을 구체적으로 수행하는 측면에서 OpenCL을 살펴보십시오. 그것은 특정 업체가 아니기 때문에 희망적으로 오래있을 것입니다. 그리고 NVidia와 ATI는 그것을 지원하기를 원합니다.
일반적으로 너무 많은 데이터를 공유 할 필요가 없으므로 프로세스가 매우 간단합니다.
또한 스레딩 구성 요소를 권장합니다. 우리는 이것을인텔 ® 통합 성능 프리미티브내가 일하는 회사에서 이미지 분석을 위해.
TBB (Threading Building Blocks)는 OpenMP와 Cilk와 비슷합니다. 그리고 OpenMP를 사용하여 멀티 스레딩을 수행합니다. 더 단순한 인터페이스로 래핑됩니다. 이 도구를 사용하면 몇 개의 스레드를 만들지 걱정할 필요가 없으며 작업을 정의 할 수 있습니다. 가능한 경우 모든 작업을 유지하기 위해 작업을 분할하여 부하 분산을 수행합니다.
인텔 통합 성능 프리미티브 (Ipp)는 비전을위한 라이브러리를 최적화했습니다. 대부분은 멀티 스레드입니다. 우리가 필요로하는 함수가 IPP에 없기 때문에 우리는 TBB를 사용하여 스레드합니다.
이를 사용하여 IPP 방법을 사용하여 이미지를 만들 때 최상의 결과를 얻습니다. 그것이하는 일은 주어진 캐시 라인이 전체적으로 하나의 행에 포함되도록 각 행을 채 웁니다. 그런 다음 스레드에서 이미지의 행을 분할하지 않습니다. 그렇게하면 동일한 캐시 라인에 쓰려고하는 두 스레드에서 잘못된 공유가 발생하지 않습니다.
나는 그것을 사용하지 않았지만 한번 보아라.Cilk. 팀의 큰 가발 중 하나는 Charles E. Leiserson입니다. 그는 "L"이다.CLRS, 지구상에서 가장 광범위하게 존경받는 알고리즘 책. 나는 그것이 귀하의 요구 사항을 충족 시켜줄 것이라고 생각합니다.
나의 간단한 독서에서, 당신이 오직해야하는 것은 당신의 "꼬리표"이다기존의코드를 작성한 다음 컴파일러를 통해 자동으로 / 코드를 병렬 처리합니다. 이것은 큰 판매 포인트이기 때문에 다른 옵션 (예 : OpenMP)과 달리 처음부터 병렬 처리를 염두에두고 시작할 필요가 없습니다.
C, C ++, Fortran 중 하나에 이미 작동중인 시리얼 코드가 있다면 OpenMP를 심각하게 고려해야합니다. 다른 많은 병렬화 라이브러리 / 언어 / 시스템 / 무엇보다 큰 장점 중 하나는 루프를 한 번에 병렬 처리 할 수 있다는 것입니다. 다시 쓰기를하지 않고도 유용한 속도 향상을 얻을 수 있습니다. - 디자인, 당신의 프로그램.
요구 사항 측면에서 :
OpenMP는 고성능 컴퓨팅에 많이 사용되며, 그 뒤에 많은 '무게'가 있고 적극적인 개발 커뮤니티 인 www.openmp.org가 있습니다.
C, C ++ 또는 Fortran을 선택했을 정도로 충분히 빠르면 구현하기에 충분히 빠릅니다.
OpenMP는 병렬 컴퓨팅에 대한 공유 메모리 접근 방식을 구현하므로 '하드웨어를 이해할 필요가 없습니다.'인수에 큰 도움이됩니다. 런타임에 얼마나 많은 프로세서를 가지고 있는지 파악한 다음, 사용 가능한 모든 프로세서와 또 다른 프로세서에 계산을 배포 할 수 있습니다.
비싼 또는 값싼 추가 그래픽 카드가 필요없이 이미 가지고있는 하드웨어에서 실행됩니다.
네, Windows 시스템에 대한 구현이 있습니다.
물론 처음에 C, C ++ 또는 Fortran을 선택하지 않은 경우 현명하지 못한 경우이 조언 중 많은 부분이 해당 언어 중 하나에 다시 작성된 후에 만 적용됩니다!
문안 인사
표