2

我使用具有许多 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 有可能吗?

注意:这个多处理器 Boost::Thread? 尽管有标题,但在一个处理器上运行的所有线程都是关于多核系统的,而我的真正是关于多处理器系统的。

4

1 回答 1

2

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

几乎所有线程库中的多核和多 CPU 插槽看起来都是一样的。您必须竭尽全力才能分辨出差异,例如。库NUMA。

于 2013-09-28T04:28:10.090 回答