1

毎回異なる数のスレッドで呼び出す必要がある関数があります (パフォーマンスの計算を行っているため、パフォーマンスがいつ低下し始めるかを知る必要があります)。以下に例を示します。

getTime() {
    return 0;
}

int main() {
    boost::threadpool::thread_pool<> threads(nThreads);

    for(int j = 0; j <= nLines; j++){
        threads.schedule(boost::bind(&getTime, nThreads, 1));
    }

    threads.wait();
}

ここで、nThreads: コマンド ラインで指定された値

私の質問は、プログラムが for ループにアクセスするたびに「nThreads」を使用して「getTime」関数を呼び出すので、これは望ましい結果をもたらすでしょうか? または、同じことを見つけるために他の方法が必要ですか?

私が本当にやりたいことはこれです:

boost::threadpool::thread_pool<> threads(nThreads); 
// start a new thread that calls the "getTime" function 
for(int j = 0; j <= nLines; j++){ 
    //threads.schedule(boost::bind(&getTime, nThreads, 1));
    threads.schedule(boost::bind(&getTime, 0, nLines, pc)); 
}

(上記のどれが正しいかはわかりません。)

getTime() 関数は、指定された行数で実行されます。これをテキスト ファイルから取得し、各行を API に渡します。API のパフォーマンスを計算します。しかし、これは私が持っている質問とは関係ありません。

毎回異なる数のスレッドで関数を呼び出し、各スレッドが完了するまでにかかった時間を計算したいと考えています。1 つのスレッドでかかった合計時間、2 つのスレッドが終了するのにかかった合計時間など。

4

2 に答える 2

1

OpenMPのようなものを使用するのはどうですか? スケーラビリティが目標である場合は、おそらくより良い選択です。

于 2009-04-26T10:53:50.037 に答える
1

私が正しく理解していれば、あなたが本当にやりたいことは次のようなものです:

int main() 
{
    int nbThreads = 20;
    boost::threadpool::thread_pool<> threads(nbThreads);

    for(int threadId = 0; threadId <= nbThreads ; ++threadId)
    {
        threads.schedule(getTime);
    }
    threads.wait();  
}

私が正しければ、ここで boost::bind を使用する必要はありません。

Boost.ThreadPool は Boost の一部ではないことに注意してください (まだ? it )。レビューされますが、レビュー日はまだ計画されていません。

于 2009-04-26T10:16:28.957 に答える