Open MP라고 있습니다.
포트란을 사용하시는 분께서는 익숙하시겠지만 멀티 프로세서(multi-thread )를 위한 라이브러리입니다. 점차 유용성을 인정받아 C/C++에서도 지원하게 되었습니다.
Visual C++ 2005에서 지원하기 시작했으며 /openmp 라는 컴파일러 지시어가 지원됩니다. Visual C++ 2008에서는 2.0 버전을 지원합니다. (Static link 비지원)
물론 gcc에서 당연히 지원합니다.
Open MP는 매우 중요한 라이브러리 중 하나입니다. 그 유명한 X-Box 360(여기서만 static link 지원)에서 제대로 멀티 프로세서를 지원하기 위해 필요한 라이브러리입니다.
요상한 것은 VC 2005에서 debugging에 이상스러운 스탭을 보이고 있습니다. 아직 완벽한 통합이 되지 않은 이유가 있습니다.
VC 2008에서는 2.0을 지원하며, 그 전보다 디버깅이 쉬워지는 점이 장점으로 부각되고 있습니다. 아무래도 X-BOX360에서 멀티 프로세서 지원 때문에 강력 지원한 흔적이 보입니다. 쿼드 코어가 일반화되고 있는 현실에서 OpenMP를 통해서 어플리케이션의 최적화가 필요하다고 판단한 것 같습니다.
특히 Win32 API로 지원하는 Thread에 비해서 멀티 프로세스 지원하는 방식이 다양한 것이 장점입니다.
공유 데이터와 프라이비트 데이터, 페러럴 처리 등에서 Thread보다 선명하고 쉽게 코딩이 됩니다. lock / unlock 등이 간단합니다.
그리고 루프 이외의 함수 단위의 병렬처리가 되기 때문에 여러모로 사용이 편리합니다.
아무래도 코드 기어쪽에서 MP를 지원한다고 했을 때 Open MP로 지원하지 않을까싶습니다. 지금 MP를 코드 기어에서 대대적으로 적용한다고 했을 때는 그 만한 이유가 있는 것이 바로 금융권에서 BCB / Delphi가 최적화 되지 않기 때문입니다. 그런 시대적이 이유인 듯 싶습니다.
아, 역시 주의할 것은 VC 2008입니다. Open MP의 효율 테스트를 꼭 해야 합니다. 그냥 gcc처럼 막 적용하면 효율이 올라가는 것이 아닙니다. 도리어 효율이 떨어지는 루틴이 있는데 플레이 시나리오를 제대로 짜서 비교 테스트해야 합니다. 사람의 머리는 싱글 task인데 MP를 지원하려니 사람의 머리에서 에러 내는 경우가 많습니다.
http://openmp.org
예제로는 역시 인텔이 잘 되어 있습니다.
http://software.intel.com/en-us/articles/getting-started-with-openmp
강좌 치고 소스가 없군요...
아직까지 win32에서 제대로 지원하는 버전인 인텔 컴파일러와 gcc 정도입니다. 앞으로 멀티 코어에서 주시해야할 프로그래밍 파트입니다.
testcode~
|