我做一些与绘图软件和数学建模相关的c++编程。有些程序需要一到五个小时来执行和输出结果;然而,它们只占用我核心duo的50%。我在另一台基于双处理器的机器上测试了代码,得到了相同的结果。
有没有办法强制程序使用所有可用的处理器资源和内存?
注意:我使用的是ubuntu和g++
发布于 2009-07-22 14:32:25
一个线程一次只能在一个核心上运行。如果你想同时使用两个内核,你需要找到一种方法在另一个线程中完成一半的工作。
这是否可能,如果是的话,如何在线程之间分配工作,完全取决于您正在做的具体工作。
要实际创建新线程,请参阅Boost.Thread docs、pthreads docs或Win32 API docs。
编辑:其他人建议使用库来为您处理线程。我没有提到这些的原因是因为我没有经验,而不是因为我认为它们不是一个好主意。它们可能是,但这完全取决于您的算法和您的平台。线程几乎是通用的,但要注意多线程编程通常是困难的:您自己制造了很多问题。
发布于 2009-07-22 14:34:47
最快的方法是阅读有关openMP的知识,并使用它来并行化您的程序。
如果您的g++版本是>=4,则使用命令g++ -fopenmp进行编译
发布于 2009-07-22 14:34:42
为了能够潜在地使用所有处理器时间,您需要运行与可用CPU核心一样多的线程。(不过,您仍然可以被其他任务抢先一步。)
有很多方法可以做到这一点,这完全取决于您正在处理的是什么。但是,您可以使用OpenMP或像TBB这样的库来几乎透明地完成此操作。
https://stackoverflow.com/questions/1165707
复制相似问题