Visual C++ 2015에서 OpenMP 적용
1553 단어 C++VisualStudioOpenMP
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)는 허용되지 않는다
등의 제약이 있습니다. 만족하지 않으면 컴파일시 오류가 발생합니다.
이상, 첫 투고에 의해 간단합니다만, 수시로 확충하고 싶습니다.
Reference
이 문제에 관하여(Visual C++ 2015에서 OpenMP 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t_aoyama514/items/b155e36571e036fbaef9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)는 허용되지 않는다
등의 제약이 있습니다. 만족하지 않으면 컴파일시 오류가 발생합니다.
이상, 첫 투고에 의해 간단합니다만, 수시로 확충하고 싶습니다.
Reference
이 문제에 관하여(Visual C++ 2015에서 OpenMP 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t_aoyama514/items/b155e36571e036fbaef9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
int a[100000];
for (int i = 0; i < 100000; i++) {
a[i] = 2 * i;
}
int a[100000];
#pragma omp parallel for
for (int i = 0; i < 100000; i++) {
a[i] = 2 * i;
}
Reference
이 문제에 관하여(Visual C++ 2015에서 OpenMP 적용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t_aoyama514/items/b155e36571e036fbaef9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)