如何判断OpenMP是否适用于我的C ++程序

时间:2009-08-19 20:11:34

标签: c++ performance openmp

我正在使用OpenMP与嵌套循环进行多线程处理。由于对这些东西不熟悉,我不确定我是否以正确的方式使用OpenMP,以便它实际上可以进行并行编程。所以我想知道我是否可以测量使用OpenMP的C ++程序的性能,所以我可以告诉它实际上有效并且我在正确的轨道上?就像并行运行的线程数以及每个线程完成所需的时间一样。 谢谢和问候!

3 个答案:

答案 0 :(得分:9)

#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 :(得分:1)

您可以在Windows上使用Windows任务管理器(CTRL-SHIFT-ESC)来监控CPU使用率,或者在* nix框上使用。

只检查是否使用了多个核心

答案 2 :(得分:1)

您可以使用调试器(如果您在Windows上使用Visual Studio):

  • 了解线程如何运行
  • 查看每个代码正在运行的代码
  • 暂停其中一些,让其他人继续