Как определить, работает ли OpenMP в моей программе на C ++ - PullRequest
5 голосов
/ 20 августа 2009

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

Ответы [ 3 ]

9 голосов
/ 20 августа 2009
#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».

1 голос
/ 20 августа 2009

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

  • посмотрите, как могут работать потоки
  • посмотрите, какой код работает каждый из них
  • приостановить некоторые из них, продолжая другим
1 голос
/ 20 августа 2009

Вы можете использовать диспетчер задач Windows (CTRL-SHIFT-ESC) в окнах для контроля загрузки ЦП или сверху * nix.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...