2

多くの amd64 プロセッサと Debian Squeeze を備えた仮想マシン コンピューター クラスターで作業しています。以前は、(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コマンドによると) 使用されます。これら 3 つのスレッドを 3 つの別々のプロセッサで実行するにはどうすればよいでしょうか? ブースト::スレッドで可能ですか?

: このマルチプロセッサ Boost::Thread? タイトルにかかわらず、 1 つのプロセッサで実行されるすべてのスレッドはマルチコア システムに関するものですが、私のスレッドは真にマルチプロセッサ システムに関するものです。

4

1 に答える 1

2

正しく動作しています。3 つのスレッドを生成しており、3 つすべてが同時に実行されています。マルチスレッド アプリケーションで報告される CPU 使用率は、すべてのスレッドの CPU 使用率の合計です。それぞれ 100% を使用する 3 つのスレッドがあるため、使用率は 300% になります。

複数のコアと複数の CPU ソケットは、ほぼすべてのスレッド ライブラリで同じように見えます。違いを伝えるためには、あなたの邪魔にならないようにする必要があります。libNUMA。

于 2013-09-28T04:28:10.090 に答える