2009-04-26 16 views
1

私は、毎回異なる数のスレッドで呼び出す必要がある関数をいくつか持っています(いくつかのパフォーマンス計算を行っているので、パフォーマンスが悪化し始める時を知る必要があります)。 、 nthreadsの値アプリケーションに渡されるスレッドの数が異なる関数を呼び出す

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(); 
} 

:この「getTime」関数を呼び出すとすると値が

私の質問があり、コマンドラインで与えられたが、これは、私に望ましい結果を与えるだろう例を以下に示します。プログラムがforループにアクセスするたびに 'nThreads'と表示されますか?それとも同じことを見つけるために他の方法が必要なのですか?

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

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を割り当てます。そのパフォーマンスは計算したいものです。これは私が持っている質問とは無関係です。

毎回異なるスレッド数で関数を呼び出し、各スレッドが完了するまでに要した時間を計算します。など、完了するために2つのスレッドで撮影した総時間だったものを、1つのスレッドで撮影した総時間だったもの

答えて

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の一部ではありません(まだですか?)。 reviewedになりますが、レビュー日はまだ計画されていません。

+0

ごめんなさい。私はその行変数に格納され、getTime()で初期化された複数の異なる値に対してプロセスを実行させたいと述べていませんでした。したがって、FORループの要件。あなたが与えたものは私が与えたものの中に別のFORループを意味するでしょう。間違っていれば私を正す? – gagneet

+0

申し訳ありませんが、私はまだ正しいとは思いません。私が理解していることは、**いくつかの仕事**(私は正確に何がわからないのですか)を行い、与えられた数のスレッドの下でそれを配布したいということです。この作業はnbLinesがgetTime関数を呼び出すようですが、わかりません。そして、私はどのようにnbLinesをこのすべてで使用したいのか分かりません。もっと正確にお試しください! –

+0

私は主な質問を編集しました。要件がまだ不明な場合は通知してください。 – gagneet

1

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

関連する問題