私はチェスの動きのジェネレーターを実行しています。「while/forloops」を多くの「ifステートメント」に置き換える機会があります。これらの〜3000行を追加すると、理論どおりにパフォーマンスが向上するのか、それともアルゴリズムも向上するのか疑問に思いました。 CPUキャッシュに保存される大きな
キャッシュサイズによって異なりますが(AMD Phenom 8650 Triple Core 2.3を入手しました)、実際にはIDEAを持っていません。
私はチェスの動きのジェネレーターを実行しています。「while/forloops」を多くの「ifステートメント」に置き換える機会があります。これらの〜3000行を追加すると、理論どおりにパフォーマンスが向上するのか、それともアルゴリズムも向上するのか疑問に思いました。 CPUキャッシュに保存される大きな
キャッシュサイズによって異なりますが(AMD Phenom 8650 Triple Core 2.3を入手しました)、実際にはIDEAを持っていません。
まず、おそらく数MBのキャッシュがあるので、キャッシュ全体がいっぱいになるとは思えません。
それに加えて、CPUはコード以外にも多くのことを実行するのに忙しいので、キャッシュ全体がコードだけに使用されるとは思えません。
それに加えて、RAM(おそらく数GB)からキャッシュへの移動はかなり無視できます。
したがって、ループを削除して(一定の長さのループの場合)、明示的な行に置き換えると、改善されるはずです。
この場合、改善の量または割合は、ハードウェアよりも言語とコンパイラに大きく依存します。
これにはさらに時間がかかる可能性のある言語や状況があることに注意してください(たとえば、解釈言語)
免責事項:
このタイプの最適化は、主に(通常は)あまり改善されないため、あまり使用されません。
改善するために他の場所(または他の方法)を見てみてください。
コードを大きくし、メモリフットプリントを大きくすることで、違いが生じることはありません。たとえば、lastif
を使用する場合は、whileループの最後の反復に似ています。ただし、条件が満たされた場合は、ループの中断や終了などを使用できます。これは、次のようになります。複数のifループがあります。
他の部分とプロファイリングを最適化することにより、コードを高速化します。