문제

OpenMP를 사용하여 중첩 루프로 멀티 스레딩을 수행하고 있습니다. 이 물건을 처음 접했기 때문에 실제로 병렬 프로그래밍을 수행 할 수 있도록 OpenMP를 올바른 방식으로 사용하고 있는지 확실하지 않습니다. 그래서 나는 OpenMP를 사용하는 C ++ 프로그램의 성능을 측정 할 수 있는지 알고 싶어서 실제로 작동하고 올바른 길을 가고 있습니까? 얼마나 많은 스레드가 병렬로 실행되는지와 각 스레드가 끝나는 데 걸리는 시간과 마찬가지로. 감사합니다.

도움이 되었습니까?

해결책

#include <omp.h>

...
int target_thread_num = 4;
omp_set_num_threads(target_thread_num);
unsigned long times[target_thread_num];

// Initialize all the times
#pragma omp parallel
{
   int thread_id = omp_get_thread_num();
   times[thread_id] = start_time();

   std::cout << "Thread number: " << omp_get_thread_num() << endl;

   times[thread_id] = end_time();
}
...

분명히 두 개의 타이머 기능을 제공해야하지만 이것이 요점입니다. OMP 함수는 매우 자명합니다. 또한 환경이 올바르게 설정되고 적절한 메커니즘으로 컴파일하는지 확인하십시오. g ++ 옵션은 -fopenmp입니다. Visual Studio에서는 프로젝트 설정, C ++, 언어 및 "OpenMP 지원"을 활성화합니다.

다른 팁

Windows에서 Windows Taskmanager (Ctrl-Shift-ESC)를 사용하여 CPU 사용량을 모니터링하거나 *Nix 상자 상단을 사용할 수 있습니다.

많은 코어가 사용되는지 확인하십시오

디버거 (Windows에있는 경우 Visual Studio)를 사용할 수 있습니다.

  • 스레드가 어떻게 실행되고 있는지 확인하십시오
  • 각각이 실행중인 코드를 확인하십시오
  • 다른 사람들을 계속할 수 있도록 그들 중 일부를 잠시 멈추십시오
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top