2011-05-30 10 views
2

私は非常にうまく動作するpthreadsプログラムを実行していますが、私は期待していたスピードアップを見ていません。私はスレッドを作成して破壊するのに多くの時間を費やしていると思う。静的なワークプールまたは(スレッドの)動的ワークプールを使用する必要がありますか?

私はCPUを搭載しているスレッドよりも多くのスレッドを実行していません。

20分かけて、私は約5000スレッドを作成しています。

私は静的な数の作業者しか割り当てないように、適切な静的作業プールを実装する価値があるのか​​どうかです。

答えて

1

まず、アプリがそのすべての時間を費やしている場所を測定する必要があります。これは1秒あたり約4〜5回のスレッド作成になりますが、これは大変ですが、おそらく時間を費やしている場所ではないでしょう。

しかし、N個のスレッド(NはCPUの数)に常に自分自身を限定している場合は、N個のスレッドを前面に作成して、各スレッドで実行するスケジュールをいくつかのアルゴリズムあなたがやっている計算を意味するのです。

+0

スレッドの作成はボトルネックではありません。ローエンドのシステムでは、スレッドの作成に約30マイクロ秒かかります。 20分のうち150000マイクロ秒は何もありません。 –

+0

あなたのスレッドが何をしているかを確かめてください。 CPUが一度に複数の命令を処理できるかもしれませんが、あなたのコードが話している他のハードウェア/ソフトウェアについてはどうでしょうか?たとえば、シングルスレッドのHDDに書き込んだ場合、パフォーマンスは向上しません。 – SlappyTheFish

+0

はい、@ SlappyTheFishは良い点です。私たちは問題空間について何も知らないので、アドバイスをするのは難しいです。しかし、一般に、マルチスレッド・プログラムでのリソース競合のチェックは、ボトルネックを見つけるのに適しています。 –

関連する問題