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