3

为了研究目的,我用 C++ 开发了一个程序。需要几天时间才能完成。

现在我在我们的实验室 8 核服务器机器上执行它以快速获得结果,但我看到机器只为我的程序分配了一个处理器,并且它保持在 13% 的处理器使用率(即使我将进程优先级设置为高级别和对 8 核的亲和力)。

(它是一个简单的面向对象程序,没有任何并行性或多线程)

我如何才能从强大的服务器机器中获得真正的好处?提前致谢。

4

4 回答 4

5

将您的代码分成可以并行执行的块。

您需要阅读有关数据并行性任务并行性的信息。

然后你可以使用OpenMPMPI 来分解你的程序。

于 2011-10-20T09:06:03.487 回答
3

(它是一个简单的面向对象程序,没有任何并行性或多线程)

我如何才能从强大的服务器机器中获得真正的好处?

通过使用更多线程。无论计算机多么强大,它都无法将线程分布在多个处理器上。找到程序的独立部分并并行运行它们。

  • C++0x 线程
  • 提升线程
  • 开放式MP

我个人认为 OpenMP 是一个玩具。您可能应该选择其他两个中的一个。

于 2011-10-20T09:04:36.940 回答
1

您必须通过将代码拆分为可以独立执行的多个任务来显式利用多并行性,然后直接使用线程原语或更高级别的并行化框架,例如OpenMP

于 2011-10-20T09:06:19.147 回答
0

如果您不想让程序本身使用多线程库或技术,您可以尝试将您的工作分成几个独立的块。然后运行程序的多个副本...每个都被分配到不同的块,通过获取不同的命令行参数来指定。

至于只是一般地提高程序的性能......有一些分析工具可以帮助您加速或找到内存使用、I/O、CPU 的瓶颈:

https://stackoverflow.com/questions/tagged/c%2b%2b%20profiling

将无助于将您的工作分散到内核之间,但是如果您可以在算法中获得 8 倍的加速,那么它可能比多线程在 8 个内核上提供的帮助更多。只是要考虑其他事情。

于 2011-10-20T09:09:40.893 回答