如何在许多处理器上运行boost :: threads?

时间:2013-09-28 03:58:33

标签: c++ multithreading boost parallel-processing boost-thread

我使用具有许多amd64处理器和Debian Squeeze的虚拟机计算机集群。以前,我已成功并行执行shell脚本(使用GNU Parallel)。现在,我想使用boost :: threads。我运行这个程序:

#include <boost/thread.hpp>

using namespace std;
boost::thread_group g;

void foo()
{
    for(int i = 0; i < 1000000000; ++i) 
        for(int i = 0; i < 1000000000; ++i);
}

int main(int argc, char* argv[])
{
    g.add_thread(new boost::thread(foo));
    g.add_thread(new boost::thread(foo));
    g.add_thread(new boost::thread(foo));

    g.join_all();
}

所有这些线程都在单个处理器上运行,使用率为300%(根据top命令)。如何让这三个线程在三个独立的处理器上运行?是否可以使用boost :: threads?

注意:这个Multiprocessor Boost::Thread? All threads running on one processor,尽管有标题,但是关于多核系统,而我的确是关于多处理器系统的。

1 个答案:

答案 0 :(得分:2)

它运行正常。你正在产生三个线程,并且所有三个线程同时运行。多线程应用程序中报告的CPU使用率是所有线程的CPU使用率的总和。你有三个线程,每个线程使用100%,因此你有300%的使用率。

几乎所有线程库中的多个内核和多个CPU套接字都是相同的。你必须尽力说出差异,例如。 libNUMA。