기글 하드웨어 위키는 일정 레벨을 충족하는 회원분들께서 직접 참여하실 수 있는 공간입니다. 컴퓨터, 하드웨어, 소프트웨어, 각종 디지털 기기, 즉 IT 관련 정보만 올릴 수 있습니다. 여기에 해당되지 않는 항목은 삭제하고 이용에 재재가 주어집니다.

OpenMP

조회 수 4315 추천 수 0 2009.12.28 00:53:17

Open Multi-Processing의 준말.

 

포트란과 C 컴파일러에서 멀티 플랫폼 공유 메모리 환경의 병렬 프로그램을 작성하기 위한 API이다.

 

- 컴파일러 지시자 (Compiler Directive)

- 라이브러리 루틴 (Library Routine)

- 환경변수 (Envirement Variable)

 

의 요소들로 구성된다.

 

컴파일러 지시자 기반이므로 OpenMP를 지원하지 않는 컴파일러에서는 저연히 OpenMP적용 부분이 무시되고 일반 코드로 컴파일된다.

이의 장점 중 하나는 기존 코드를 거의 그대로 병렬화 시킬 수 있을 뿐 아니라 이를 이용해 병렬화되어 있는 코드도 컴파일 옵션만 변경하면

거의 그대로 일반 코드로 컴파일할 수 있다는 것이다.

라이브러리 루틴들은 병렬 수행하고 있는 스레드의 개수나 스레드 번호등을 설정하고 조회할 수 있게 해주며,

환경변수는 스레드의 개수와 같이 병렬 실행 과정에서 필요한 여러 제반사항에 대한 설정을 가능하게 한다.

 

OpenMP는 비슷한 기능을 하는 병렬처리 방법들에 비해 많은 장점을 가지고 있는데,

병렬 코드를 이식성있고(Portable), 확장성있고(Scalable) 유연하게 (Flexible) 작성할 수 있으며,

표준적이면서도 (Standardized) 성능지향적인 코드를 생성하는 것이 가능하다.

기존에 유지보수되고 있는 코드라도, OpenMP를 사용할 수 있는 조건에 맞는 병렬처리가 필요한 부분이나 루프가 있다면,

지시자를 추가하는 것만으로 쉽게 이를 적용할 수 있다.

 

또한 거의 표준으로 자리잡고 있으므로, 어떤 환경이든지 OpenMP를 컴파일 할 수 있는 컴파일러만 있다면,

이기종 환경이나 운영체제 간의 서로 다른 복잡한 멀티 스레드 메커니즘의 차이를 모르더라도 적용이 가능하다.

 

스레드 팀의 생성이나 시작, 스레드가 사용하는 저장장소 등과 같은 멀티 스레드를 이용한 기존 병렬처리 방법에 있던

이러한 까다로운 구현 세부사항들을 지시자 형태로 간단히 숨길 수 있는 것도 장점이라 하겠다.

 

대부분 병렬시스템에서 하나의 머신에 여러개의 병렬처리 프로그램이 운용되는 경우가 많은데,

운용되다 보면 애플리케이션에서 생산한 스레드의 개수가 머신의 상황에 맞지 않을 때가 있다.

많은 병렬 처리 애플리케이션이 운용되고, 동시에 다수의 스레드가 생성되어 운용되면

병렬처리로 인해 프로세스의 사용이 오히려 비효율적으로 되어 전체적인 머신의 성능이 감소하게 되는데

OpenMP는 스레드의 생성개수 결정을 병렬영역에 들어가기 직전에 동적으로 실행하며,

다음 병렬 영역에 들어갈 때 머신의 상태에 따라 스레드의 개수가 변화하게 된다.

 

프로그래머의 재량과 자유도에 따라서 환경변수를 통해 최대 스레드 개수를 지정할 수도 있으며,

지정한 스레드만 생성하도록 조절할 수도 있다.

프로그래머들이 정교하게 작업해야하고 버그를 만들거나 미처 생각하지 못할 부분을 캡슐화해 주는 것 역시 장점이다.

 

OpenMP의 사용에 있어 가장 큰 단점은 C++가 아니라  C의 형태이므로

SRL이나 BCL과 같은 표준적인 라이브러리와 동작하지 않으면 간단한 배열 등의 루프에만 사용할 수 있으며,

C++에 특화된 부분을 지원하지 않기 때문에, 안정성및 제네릭(Generic) 프로그래밍에도 적합하지 않으며,

기존의 코드와 혼용 역시 불가하다.

 

 

 

 

 

 

 


기글하드웨어는 2006년 6월 28일에 개설된 해외 컴퓨터 하드웨어 뉴스와 정보, 유저들의 사용기를 주로 소개하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴 관련 문의는 이메일로 보내주세요. 관리자 이메일