2011-10-05 41 views
2

你能告诉我如何设置一个线程来运行我的cpu的所有核心?我做了一个线程: CreateThread(0,0,线程,(LPVOID)1,0,0);但它只能以我CPU的25%的速度运行,因为它只需要1个核心来计算。我如何将它设置为全速使用全部4个?用于quadcore的C++线程

+0

如果您展示了代码和目标,我们可能实际上可以提供帮助。现在你要求一个不可能的事情,所以-1从我 – sehe

+1

使用多线程(如一些答案中的建议)将使用所有的核心,但要意识到将程序更改为多线程确实会使其更复杂,尤其是取决于在程序员的经验和技能水平上。 – Joe

回答

2

线程将在任何时候在单个内核上运行,尽管它可能会在OS之间在内核之间切换。要让您的应用程序利用多个核心,那么您将需要多个线程。

您可以使用CreateThread来启动这些线程或其周围的包装,例如boost::thread或新的C++ 11 std::thread。如果您有四个线程(包括第一个线程),那么您的应用程序可以一次运行4个内核。

但是,向应用程序添加线程并不是轻而易举的事情。多线程是一个复杂的话题,很难正确。多线程应用程序中可能遇到的问题比单线程应用程序还要多。因此,有关多线程编程主题的许多文章和书籍(包括mine)。

慢慢阅读有关多线程编程的内容,然后看看这是否是您的应用程序的最佳方法,以及如何最好地利用这些内核。

1

要使用4核的所有功能,您必须同时为这4个内核做些工作。

当你创建一个线程时,你为1个核心做了一些工作。一个线程的执行按顺序执行,按指令执行,一个指令只能由1个内核执行。

要能够使用4个内核,请创建4个线程。

0

单线程不能在4个内核上并行运行,应该怎么做?相反,创建更多线程(可能是4个)来利用所有内核。然后这些线程将在它们各自的核心上相互平行运行(在完美的情况下)。