3

4 つの CPU を搭載したマザーボードがあるとします。Intelによると、各CPUには8コア/ 16スレッドがあります。

さて、完了するまでに数日かかる非常識な文字列操作タスクがあるとします。最高のパフォーマンスが得られるフォークとスレッドの数を計算する方法はありますか? 起動するフォークとスレッドの数がわかりません。さらに、スレッドを開始することが私に利益をもたらすかどうかはわかりませんか?

Ruby 2 スレッドが C++ スレッドなどと比べてどうなのかよくわからないので、特に Ruby に興味があります。

4

3 に答える 3

1

使用しているアルゴリズムの詳細によって異なります。一般的なルールは本当にありません。

次のようなタスクを検討してください。

  1. トラックを A 地点まで運転します。
  2. ローダーが車をウィジェットで満たすのを待ちます。
  3. トラックを B 地点まで運転します。
  4. アンローダーがトラックを空にするためのもの。
  5. 繰り返す。

ここで、このタスクが 1 時間あたり 1,000 個のウィジェットを移動するとします。2 台目のトラックを追加すると、1 時間あたり何個のウィジェットを移動できますか? 確かに、1 時間あたりのウィジェット数が 2,000 を超えることはないと推測できます。

なぜそれが少ないのでしょうか?では、運転にほんの少しの時間しかかからず、トラックがローダーまたはアンローダーが他のトラックで完了するのを待つのに多くの時間を費やしている場合はどうでしょうか? 道が狭くてトラック同士がすれ違ったらどうする?

したがって、知るためには、アルゴリズムが使用しているリソースと、それらをどのように使用しているかを理解する必要があります。一般に、唯一の現実的な選択肢が測定であると予測することは十分に困難です。アルゴリズムをより並列化できるアルゴリズムに変更できる場合があります。

于 2013-09-29T14:29:12.950 に答える
1

経験則: CPU スレッドごとに 1 つのプロセスまたは OS スレッド。

Ruby の場合、少なくとも MRI Ruby では、これは CPU スレッドごとに 1 つのフォークに変換されます。これは、MRI Ruby スレッドは実際には並列に実行できないためです。

于 2013-09-29T14:31:14.403 に答える