【问题标题】:How to run boost::threads on many processors?如何在许多处理器上运行 boost::threads?
【发布时间】:2013-10-04 11:28:31
【问题描述】:

我使用具有许多 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 是关于多核系统的,而我的真正是关于多处理器系统的。

【问题讨论】:

  • 我假设您的意思是您有一个多插槽 SMP 系统。您的计算机使用 NUMA 吗?
  • @dai,这是一个虚拟机。我可以在其上并行执行 shell 脚本(使用 GNU Parallel)。我不知道 SMP 和 NUMA。

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


【解决方案1】:

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

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

【讨论】:

  • 是的,它们可能同时运行,但我不确定它们在单独的处理器上运行。
  • 有些程序可以告诉您每个 CPU 的 CPU 使用率。这里有一些例子:cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html
  • 您使用了集群这个词,但随后谈到了 SMP 线程。您是否有一个带有多个 CPU 插槽的主板或通过网络链接的多个主板?单个主板不是集群。这是两种完全不同的野兽。
  • 不可能,它们肯定是同时运行的。
  • 这是一台远程计算机,我通过 SSH 登录。我不知道它的实现细节,但那些构建它的人称它为集群类型的虚拟机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多