我开发了一个C ++程序用于研究目的。这需要几天时间才能完成。
现在我在我们的实验室8核服务器机器上执行它以快速获得结果,但是我看到机器只为我的程序分配了一个处理器,它仍处于13%的处理器使用率(即使我设置了高级别的进程优先级和8的亲和性)芯)。
(这是一个简单的面向对象的程序,没有任何并行或多线程)
如何从强大的服务器机器中获得真正的好处? 提前谢谢。
答案 0 :(得分:4)
答案 1 :(得分:3)
(这是一个简单的面向对象的程序,没有任何并行性或 多线程)
如何从强大的服务器机器中获得真正的好处?
使用更多线程。无论计算机有多强大,它都无法在一个以上的处理器上传播线程。找到程序的独立部分并同时运行它们。
我个人认为OpenMP是一个玩具。你可能应该选择另外两个中的一个。
答案 2 :(得分:1)
您必须通过将代码拆分为可以独立执行的多个任务,然后直接使用线程原语或更高级别的并行化框架(例如OpenMP)来明确地利用多并行性。
答案 3 :(得分:0)
如果您不想让您的程序本身使用多线程库或技术,您可以尝试将您的工作分解为几个独立的块。然后运行程序的多个副本...每个副本分配给不同的块,通过获取不同的命令行参数指定。
至于通常只是改善程序的性能......有一些分析工具可以帮助你加速或找到内存使用,I / O,CPU的瓶颈:
https://stackoverflow.com/questions/tagged/c%2b%2b%20profiling
无法帮助您跨核心分割您的工作,但是如果您可以在算法中获得8倍的加速,这可能比8核上的多线程更有帮助。还有别的东西需要考虑。