在多处理器机器上执行C ++程序

时间:2011-10-20 09:03:03

标签: c++ multiprocess

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

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

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

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

4 个答案:

答案 0 :(得分:4)

将代码分区为可以并行执行的块。

您需要了解data parallelismtask parallelism

然后你可以使用OpenMPMPI 打破你的计划。

答案 1 :(得分:3)

  

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

     

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

使用更多线程。无论计算机有多强大,它都无法在一个以上的处理器上传播线程。找到程序的独立部分并同时运行它们。

  • C ++ 0x threads
  • 提升线程
  • OpenMP的

我个人认为OpenMP是一个玩具。你可能应该选择另外两个中的一个。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

至于通常只是改善程序的性能......有一些分析工具可以帮助你加速或找到内存使用,I / O,CPU的瓶颈:

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

无法帮助您跨核心分割您的工作,但是如果您可以在算法中获得8倍的加速,这可能比8核上的多线程更有帮助。还有别的东西需要考虑。