2016-06-17 5 views
0

, 나는 이런 식으로 중첩 루프에서 각 for 문 사이에 몇 가지 코드를 추가해야한다OpenMP를 중첩 루프 몇 가지 이유에 대한

for (int i = 0; i < n; ++i) { 
    //i have to put some code here 
    do something_1 

    for (int j = 0; j < n; ++j) { 
     //i have to put some code here 
     do something_2 

     for (int k = 0; k < n; ++k) { 
      do something_3 
     } 

    } 
} 

------ 업데이트 20 : 11 6.17 2016 ----------------------

OpenMP 프로그램이 중첩 된 루프가 아닌 것으로 확인되었으므로 std::vectorpush_back() 메서드와 함께 사용합니다. OpenMP를 사용하면 정말 위험합니다.

+0

저는 OpenMP에 대한 전문가가 아니지만, 당신이 그것을 속이고 "무언가를하십시오"및 내부를 함수로 이동시킨 다음 for에 호출하는 것이 어떻습니까? – hauron

+0

'#pragma omp parallel for '을 사용해 보셨습니까? – hmatar

+1

일반적으로 반복 사이에 종속성이 없으면 루프를 parallized 할 수 있습니다. – kangshiyin

답변

1

원칙적으로 openmp를 사용하여이 코드를 병렬화 할 수 있습니다. 다음은 Visual Studio를 사용하여이를 수행하는 방법입니다. (다른 개발 환경의 경우 비슷한 설정을 찾을 수) :

Configuration Protperties->C/C++->Language->Open Mp support 

가 ompenmp 헤더 파일 포함 :

#include "omp.h" 

을 앞에 다음 줄을 넣어

속성 페이지에서

는, OpenMP를 활성화 첫 번째 for 루프 :

#pragma omp parallel for 

이렇게하면 외부 루프가 병렬 처리됩니다. whi ch는 코어 수가 많은 경우 대부분 필요합니다.

루프를 병렬로 실행하면 서로 다른 반복이 서로 독립적이어야한다는 점에 유의하십시오. 아직 병렬 처리에 익숙하지 않은 경우 일반적인 함정을 피하기 위해 일부 openmp 자습서를 살펴볼 수 있습니다. 나는 꽤 도움이 these slides 것을 알았다.