1

同時に実行する 180 の SVM モデルがあります。現在、最初にモデルを配列にロードします。次に、モデルを実行する必要があるときは、pthread を使用して 180 のスレッドを作成し、各スレッドが各モデルへのポインターを取得して計算を行います。

私の懸念は、何らかの計算を行うたびに 180 のスレッドを作成すると、深刻なオーバーヘッドが発生する可能性があることです (そして、実行する計算がたくさんあります)。そこで私が考えていたのは、最初に SVM モデルを 180 のスレッドにロードし、計算を行うたびにそれらを再利用するということです。

私のアイデアは実現可能ですか?各スレッドに異なるモデルをロードし、すべてのスレッドを同時に使用しますか? スレッド プールについて考えましたが、これは典型的なスレッド プールのユース ケースではないと思います。アドバイスをいただければ幸いです。ありがとう。

4

1 に答える 1

0

180 個の CPU を使用しない限り、それらを同時に実行することはできません。そうしないと、スレッドが前進するために互いに戦っている間に、スレッド間の切り替えに多くのエネルギーを浪費することになります。

より良いアプローチは、使用可能な CPU またはコアの数に近い数のスレッドを作成し、個々のモデルをキューからスレッドに配布することです。

これに使用するコアが 8 つあるとします。8 つの「ワーカー」スレッドを作成し、それぞれに 180 のキューから 1 つを選択して処理させます。いずれかのワーカー スレッドが終了すると、上記の 180 スレッド シナリオの結果に対して行うことは何でも行い、キューから次の SVM モデルを取得します。これを 180 個のモデルすべてが処理されるまで続けます。

一度に 180 のスレッドを実行するよりも、完了までにかかる時間はおそらく少なく、システムにかかるリソースの負荷はほぼ確実に少なくなります。この設定が完了したら、実行するワーカー スレッドの数を試して、プール サイズのスイート スポットを決定できます。

于 2013-03-12T08:52:40.023 に答える