次のようなグラフの問題があり、実行時間のパフォーマンスを最適化する必要があります。私はプログラミングテクニックを探していて、アルゴリズムの最適化ではなく、パフォーマンスを改善するためにを探しています。グラフG(V、E)が与えられた場合、各ノードuは、uの2ホップの隣接ノードがすべて隣接ノードであるようなマルチノードリレー(M_r(u))と呼ばれる隣接ノードN M_r(u)の少なくとも1つのノードに送信する。ノードuにおけるM_r(u)の構成は以下の通りである。分散グラフアルゴリズムのパフォーマンスをどのように高速化するには?
construct_mr(u)
1) M_r(u) is initially empty.
1') The set of non-covered 2-hop of neighbors of u is the set of all 2-hop neighbors of u.
// a covered 2-hop neighbor of u: is a 2-hop neighbor of u that is also a neighbor to at least one of the nodes of M_r(u).
2) while (M _r(u) is not a multiset relay set)
2a) update the set of non-covered 2-hop neighbors of u.
2b) add to M_r(u) a neighbor v that cover the most non-covered 2-hop neighbors of u.
さて、私がやったことは以下の通りであった:
for each node u \in V: construct_mr(u).
それはシリアル化された実装であり、グラフが大きく、緻密でひどい実行時間を持っている、本明細書の問題。私はそのようなアルゴリズムのパフォーマンスを加速するメソッドを探しています - できればjavaまたはC++を使用してください。私はマルチスレッドを使用していますが、良いパフォーマンスを得るためにスレッドスケジューリングを行うべきでしょうか? [メッセージを受け渡すプログラミングモデルは何の効果もありません。
スレッド/プロセスの優先順位で遊んでも、計算に集中するプログラムを魔法のように速くすることはできません。待ち時間の懸念から、通常はスレッドの優先度を上げます(タイムリーにイベントを処理するなど)。 –
すべての計算が独立していることを確認できますか? I.彼らは読書のためのリソースを共有するだけですか? –
at J.N:リソースは共有されていますが、変更はありません。 – AJed