0

次のように設計された関数があります。

int brutesearch(startNumber,endNumber);

この関数は、線形検索を実行して基準に一致する場合は正しい番号を返し、検索された番号に見つからない場合は null を返します。

と言う:

  • 6 桁の数字すべてを検索して、自分のやりたいことを実行できる数字を見つけたい
  • Brutesearch() 関数をマルチスレッドで実行できます
  • 4コアのラップトップを持っています

私の質問は次のとおりです。

この検索を最適化するための最善の策は何ですか? 数値空間を 4 つのセグメントに分割し、各コアで 1 つの関数の 4 つのインスタンスを実行しますか? または、たとえば 10 セグメントに分割してまとめて実行するか、12 セグメントに分割してキューを使用して 4 つのバッチで実行しますか?

何か案は?

4

2 に答える 2

0

一般的な答えはありません。より多くの情報を提供する必要があります。

それぞれの比較が他の比較から完全に独立しており、グローバル リソースに計算を保存する機会がなく、グローバル ハッシュ テーブルが含まれておらず、すべての操作が 1 つのステージで行われる場合、

最善の策は、問題空間を利用可能なコアの数 (この場合は 4) に分割し、データの 1/4 を各コアに送信することです。

たとえば、素数性をテストしたい 1,000 万の一意の数があるとします。または、1,000 万個のパスワードがあり、一致するものを見つけるためにハッシュしようとしていた場合は、4 で割ります。

現実世界の問題を抱えている場合、適切な解決策を得るには、基礎となる操作についてさらに多くのことを知る必要があります。たとえば、グローバル リソースが関係している場合、何らかの方法でグローバル リソースの操作を分離しない限り、並列処理による改善は得られません。

于 2013-05-31T13:18:18.337 に答える