2011-07-11 9 views
4

私は独立した攻撃の下で大規模なネットワークの頑強さを測定するためのアルゴリズムを書いています。ネットワークには約2,000のノードがあり、10^8の攻撃に直面しています。最初はMatlabで実装しましたが、あまりにも多くの繰り返し(10^8)がうまくいきませんでした。すべての端末は、堅牢性を向上させてネットワークを再配線しようとします。大規模なネットワーク反復 - 並列性?

単純な並列性の問題は、ネットワークが再配線されるたびに、新しい繰り返しが再配線されたネットワークで機能することです。

アルゴリズムを効率的に実行するために、ここで高度な並列性を達成する方法がわかりません。現在のところ、私はそれが約1477日間かかると考えています。

+1

再配線されたNetowrkを意味しますか? –

答えて

0

問題を定式化する方法は、反復を並列化する方法がないようです。また、1477日の見積もりが現実的であれば、並列化すると2コアマシンで約800日かかることがありますが、これはまだ受け入れられないと思います。

  1. が完了するまでに長い時間がかかり、コードの合理的な小片を特定します

    代わりに、あなたは典型的なプロファイリングのワークフローを行うことができます。

  2. コンパイルされた言語での再設計や再調整によって、そのコードを最適化します。これの何があなたに許容可能な結果を​​取得していない場合は1

から

  • Goが、あなたはより少ない反復を行うか、いくつかのパフォーマンスが重要な仮定をすることによって、あなたの問題を簡素化する必要があります。

  • +0

    私はいくつかのビットを最適化し、パフォーマンスを大幅に改善しました。私は自分のコードを並列化しようとしています。ありがとう! – Trivik

    1

    各反復は約1.25秒かかる。 (約40億クロックサイクル)それは長い時間のように聞こえる、あなたがやっていることを最適化し、ミリ秒にそれを減らす機会があるはずです。コードを最適化すると、並列化よりもパフォーマンスが向上することがあります。 (あなたが持っている無料のハードウェアの量と複数のCPU /システムを調整するオーバーヘッドによって、並列化コードが制限されるため)

    ハードウェアの量はどれくらいですか?あなたのプロセスがCPUバウンドの場合、N個のCPUを持っていれば、アプリケーションを最大でN倍高速化します。

    たとえば、十分なハードウェアがあるとします。 2048個のCPUを使用してプレイして1日かかることは許容されます。エンド・ツー・エンド・テストを完全に忠実に行う必要があると仮定するのではなく、異なるランダム/可能性のある構成でネットワークを開始することができます。独立して各ネットワーク上で10^5攻撃を実行し、終了状態が閉鎖して別の実行の開始状態に一致するかどうかを確認します。つまり、概念的にエンドツーエンドで結果を結合することができます。


    必要なメモリ量に応じて、タワー型サーバーが最もコスト効率がよいことがわかります。

    £354でXeon Quad 2.5 GHzと4 GBのメモリを搭載したサーバーを購入できます。それはお金のための多くの力です。

    しかし、既存のリソースにアクセスできる場合は、より良いことがあります。例えば夜間に使用されていないデスクトップが1,000台ある会社で働いていますか? ;)

    +0

    私はコードを最適化するあなたの助言に従った。パフォーマンスが大幅に向上します。私は私のシミュレーションのためにCPUを手に入れています。 – Trivik

    関連する問題