Как сказать, работает ли OpenMP в моей программе C ++
-
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), чтобы:
- Посмотрите, как могут работать потоки
- Посмотрите, какой код работает каждый из них
- сделать паузу некоторых из них, позволяя другим продолжать