Как сказать, работает ли OpenMP в моей программе C ++

StackOverflow https://stackoverflow.com/questions/1302368

  •  19-09-2019
  •  | 
  •  

Вопрос

Я использую OpenMP для многопоточного чтения с моими вложенными петлями. Поскольку новичок в этом материале, я не уверен, что я использую OpenMP правильным образом, чтобы он мог сделать параллельное программирование. Поэтому мне нравится знать, могу ли я измерить производительность моей программы C ++, которая использует OpenMP, чтобы я мог сказать, что она действительно работает, и я на правильном пути? Например, сколько потоков работает параллельно и сколько времени нужно, чтобы каждый из них закончился. Спасибо и с уважением!

Это было полезно?

Решение

#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 ++ -ofopenmp. На Visual Studio перейдите в настройки проекта, C ++, язык и включите «поддержку OpenMP».

Другие советы

Вы можете использовать Windows TaskManager (CTRL-Shift-ESC) в Windows для мониторинга использования ЦП или вверх по коробкам NIX.

Просто проверьте, используются ли много ядер или нет

Вы можете использовать свой отладчик (Visual Studio, если вы в Windows), чтобы:

  • Посмотрите, как могут работать потоки
  • Посмотрите, какой код работает каждый из них
  • сделать паузу некоторых из них, позволяя другим продолжать
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top