6

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

4

3 回答 3

10
#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 支持”。

于 2009-08-20T05:24:22.510 回答
1

您可以在 windows 上使用 windows taskmanager (CTRL-SHIFT-ESC) 来监视 CPU 使用率,或在 *nix 框上使用 top。

只需检查是否使用了许多核心

于 2009-08-19T20:15:24.420 回答
1

您可以使用调试器(如果您使用的是 Windows,则为 Visual Studio)来:

  • 查看线程如何运行
  • 查看他们每个人正在运行哪些代码
  • 暂停其中一些,让其他人继续
于 2009-08-19T20:47:26.337 回答