2011-07-21 18 views
1

私はチェスの動きジェネレーターをしていますが、私はwhile/forループを多くの 'if文'と置き換える機会があります。それらの3000行を追加すると理論的に性能が向上するのだろうかと思いましたあるいは単にアルゴリズムは、CPUのキャッシュに保存することには大きすぎることにするキャッシュに格納するアルゴリズムはどれくらい小さくする必要がありますか? (手がかりが必要です)

私はそれが(私はAMDのPhenom 8650トリプルコア2.3を得た)キャッシュサイズに依存知っているが、私は本当にIDEA

+0

早すぎる最適化はすべての悪(c)クヌスの根源です。そして、CPUのキャッシュとそれが何のために使用されているかを読んでください –

+0

コードについての情報がないと推測するのは無意味です。 –

答えて

2

まず、数MBのキャッシュがあるので、キャッシュ全体がいっぱいになるとは思えません。

さらに、CPUはコードのそばでたくさんのことをしているので、キャッシュ全体がコードのために使用されるのではないかと疑います。

これ以外にも、RAMへの移動(おそらく数GBのキャッシュ)はかなり無視できます。

したがって、ループを削除して(一定の長さのループの場合)、それを明示的な行に置き換えると、改善が得られます。
改善の量または割合は、この場合はハードウェアよりも言語とコンパイラによって大きく異なります。それはあまり向上しない主な理由
この種の最適化は、あまり使用されません(:これはさらに長い(例えば解釈の言語)

免責がかかる場合があります言語や状況があること
注意通常)。
改善するために他の場所(または他の方法)を見てみてください。

+0

お返事ありがとうございます!私は改善すべきことがたくさんあることを知っていますが、巻き戻し/巻き戻しは移動ジェネレータ戦略を変更しません。また、テクニックなので、多くの脳サイクルを無駄にしません。= P – matias

0

を持っていないことあなたのコードを大きくし、より大きなメモリフットプリントを持たせることを期待してはいけません。たとえば、最後のifが使用される場合は、whileループの最後の反復と似ています....しかし、条件が満たされた場合にもbreakやterminateなどの何かを使用できます。これは似ています複数のifループを持つことになります。

他の部分とプロファイリングを最適化することでコードを高速化します。

関連する問題