Visual C++ 2015에서 OpenMP 적용

1553 단어 C++VisualStudioOpenMP
Visual C++ 2015의 기존 앱에 OpenMP를 적용하는 방법을 설명합니다.
Qiita에는 연습이 테라의 첫 투고입니다.
Hello World적인 간단한 내용입니다 죄송합니다. 적절히 확장 할 수 있다고 생각합니다.

1.OpenMP란?



OpenMP는 C/C++/Fortran에서 멀티 프로세스 프로그램을 지원하는 API입니다.

복잡한 사전 준비 없이 Visual Studio에 대한 간편한 설정과 프로그램상의 병렬화하고 싶은 부분에 OpenMP 적용의 엄격함을 기재함으로써 실행 프로그램에 고속화의 혜택을 받을 수 있습니다. (논리적으로는 적용 개소에 N코어로 N배의 고속화를 기대할 수 있습니다만, 실제로는 프로그램의 의존관계, 메모리 대역폭, 파일 기입등의 병렬화할 수 없는 자원 등의 제약에 의해 N배로 하는 것은 거의 없습니다)

2. Visual Studio 2015 환경 설정



Visual Studuio 2015에서 C++ 앱 프로젝트를 만든 후

프로젝트 속성에서
-> 구성 속성
-> C/C++
-> 언어
-> [OpenMP 지원]을 "예"로 설정



3. 프로그램에 OpenMP 적용



for 문에 OpenMP를 적용하는 방법

변경 전



이하와 같은 for문이 있었을 경우에, for문의 직전에 일행 대충 없는 것을 넣는 것으로 실행시의 병렬화가 가능합니다.
int a[100000];

for (int i = 0; i < 100000; i++) {
    a[i] = 2 * i;
}

변경 후



for문 앞에 "#pragma omp parallel for"의 한 줄을 더하는 것만으로 병렬화가 가능합니다.
int a[100000];

#pragma omp parallel for
for (int i = 0; i < 100000; i++) {
    a[i] = 2 * i;
}

이 때,
- for 문의 카운터 i는 부호있는 정수입니다.
- 카운터 i 의 증분은 정수의 가산 or 감산이다
- 루프내는 continue 이외의 점프(break, exit, goto)는 허용되지 않는다
등의 제약이 있습니다. 만족하지 않으면 컴파일시 오류가 발생합니다.

이상, 첫 투고에 의해 간단합니다만, 수시로 확충하고 싶습니다.

좋은 웹페이지 즐겨찾기