2016-05-06 6 views
3

これは私の最初の質問ですので、不適切であるかどうか教えてください。私はかなり一般的な質問をしましたが、具体的な問題は次のとおりです:1GHzプロセッサで10〜100兆兆ステップのアルゴリズムを実行するにはどのくらいの時間が必要ですか?

私は、選挙大学ネクタイ。可能な限り最短のリストには12の州が含まれ、最長のリストには38の州が含まれます。私はいくつかの(非常に)大まかな計算を行い、可能な組み合わせのすべてが(おそらく)10兆兆になる。私はまだアルゴリズムの計画段階にありますが、必要なステップ数の絶対値の下限が10兆であることを前提としています。実際の数値が大幅に高くなると思います。

私はかなりプログラミングが新しく、このコードを書いてみる価値があるかどうかを知りたがっています.1つの大まかな計算では、アルゴリズムが完了するまでに約30年かかります(!)。しかし、私はこの計算をWikipediaによって提案されたMIPs(百万命令/秒)値に基づいています。実際にはどれほど正確であるか(実際には、これらの目的のための「命令」としてカウントされます)

多くの読書のためのおかげで、および/または1 GHzのプロセッサが10億回秒を刻む時計を持っている:)

+6

最初の質問:リストを* *作成する予定はありますか? (明らかにメモリやディスクに収まらない...) –

+0

あなたがJavaで持っているステートメントは、実際にCPUのためのいくつかの命令(数サイクル)に終わるでしょう。どのように計算しましたか?どれくらいのCP​​Uサイクルが必要なのか、どのように分かりますか? –

+0

@JonSkeetこれは公正な質問であり、私がすでに考えていたものです。答えは、私がリストの10兆の長いリストを本当に望んでいないということです。実際に結果として出現する組み合わせネクタイで。 –

答えて

1

に答えます。クロックティッキングは、システムを通る信号の流れを可能にするために使用される。したがって、実行できる理論上の最大操作数は、1秒あたり10億回です。理論的な最小時間は10兆兆の演算を実行するために、10兆分の1を10億分の1とし、1000万(秒)を与えます。私の計算が正しければ、それは約116日になる。実際には、パフォーマンスはそれほど向上しませんが、パイプライン化された最新のプロセッサでは、最適化されたアセンブラでは、実際には50%以上の性能が得られるはずです。したがって、現代の1GHzプロセッサ1台では、組み合わせ演算で期待されるような整数演算の場合、200日は非常に合理的です。

ここで、「ステップ」は多くの機械命令です。これは十分に複雑な「ステップ」の可能性が高いと思われる。 1つの「ステップ」が100の機械命令(非常に頑丈な「ステップ」)であれば、実際には20,000日または54年のように話しています。

今、何ができますか?まあ、組み合わせを生成することは並列プログラミングによく適しています。スーパーコンピューティングセンターで時間を稼ぎ、それぞれ3GHzで動作する1000個のコアでこのジョブを実行した場合、実行には約7日かかります。

また、賢明なアルゴリズムを使って分岐を避けることができれば、いくつかのNVIDIA GTX 980を入手して自宅で実行することもできます。グラフィックカードごとに約1GHzの2,000コアを稼働させるので、これらの悪い少年のうちのいくつかは、あなたの仕事を非常に高速化します(グラフィックスカードで効率的な方法でプログラムを書くことができれば堅い部分)。

評決?あなたが実行可能なことをしたいと望んでいるものを作るために要求される大規模並列プログラムを書くことが快適でない場合、特に困難です。

+0

ありがとう!これは私が知りたいと思っていたすべてのものをカバーしています私はおそらく次の6ヶ月/ 54年のためにこのアルゴリズムを実行するつもりはないので、私はちょっと疑問に思うだろう:) –

1

基本的なロジックから計算すると、理論的には1GHzで10億回の計算が可能です。

10兆回の計算が意味するであろうための時間、10京/ 10億

だから、それを通じ計算し、あなたはそれが

10,000,000,000,000,000/1,000,000,000 = 10,000,000 seconds 
10,000,000 seconds = 166,667 minutes 
166,667 minutes = 2778 hours 
2778 hours = 115 days 

を完了するために、approximetly 115日かかりますことがわかります。しかし、これはすべての理論であります

関連する問題