コードは次のようになります。 sum + = array [j] +配列[j + 1] +配列[j + 2] + ...配列[j + n]; タイミングを改善するためにブラケット内のj + nをどのように交換すればよいですか?配列計算の処理時間を改善する
1
A
答えて
3
7
あなたはではありませんこれを行います。脳死コンパイラがなければ、これを最適化することができるはずです。あなたはマイクロ最適化のこのレベルをやろうとしている場合は
は、あなたのコンパイラが盲目的に正確に相当アセンブリコードにコードを変換することを想定しない、根本的なアセンブリコードを見て開始する必要があります。
あなたはまた、私は高い最適化レベルでgcc
から見た非常識なコードに基づいて、より良い率直に言っているあなたのコンパイラを書く人よりもあなたのターゲットプラットフォームの複雑さを理解するためにそう:-)
アルゴリズム選択などの大きな画像の最適化に集中すれば、通常は投資収益率が向上します。すでに実行している何かを最適化するにはポイントがありません:あなたは(あなたがまだの場合)は行う必要があり、それは不採算だ場合はボトルネックがある(とのみ場所を確認するために、一度完成し、コードをプロファイルで何
十分に速い)。
これらのボトルネックに集中します。 測定、推測しないでください!
#include <stdio.h> int main(void) { int j, sum, array[50]; for (j = 0; j < 50; j++) array[j] = 999 - j * 2; j = 22; sum = array[j] + array[j+1] + array [j + 2] + array[j + 3]; return 0; }
が、gccの最適化レベル3の下で、それはなった:一例として
、私は実際にも、次のコードを最適化する方法をお見せするつもりだったとなっ
main:
pushl %ebp ; prolog
xorl %eax, %eax ; return value
movl %esp, %ebp ; epilog 1
popl %ebp ; epilog 2
ret
はい、そうです、スタックプロローグとエピローグコードと戻り値の設定です。計算は見通せません。 gcc
はどこの計算も使用されていないことを(正しい)把握しているため、それらを完全に無効にしています。
あなたがそれを使用すると、関連するコードが簡単になる:
movl 116(%esp), %eax
addl 112(%esp), %eax
addl 120(%esp), %eax
addl 124(%esp), %eax
、あなたは、ハード押されたよりも、はるかに最適化された取得すると思います。
0
int *aj
aj = &(array[j]);
が正しいこと、および合計は、あなたが、その後
aj = &(array[0]);
と
がちょうど をAJするために追加します聖霊降臨祭開始する場合それはdefenitlyあなたのコードを実行することになりsum += *aj + *(aj+1) + *(aj+2) ....
に等しく、
関連する問題
- 1. UDPメッセージの処理を改善する
- 2. Curlでサーバ処理時間を計算する
- 3. 並列計算用のメモリレイアウトを改善する
- 4. jQuery - XML処理時のセレクタのパフォーマンスを改善する
- 5. プリプロセッサ時間の配列サイズを計算するには?
- 6. 時間を加算して合計時間を計算する
- 7. boost :: program_optionsの欠落/間違ったキーの処理の改善
- 8. JPAでの例外処理の改善
- 9. プライマリキーの制約処理の改善?
- 10. android:画像処理のメモリ管理を改善する方法
- 11. AWS Dynamodbの応答時間を改善
- 12. AS3ソケットの接続時間を改善
- 13. 1つのjsonオブジェクトを別のJSONオブジェクトにマッピングするための処理時間を改善する
- 14. Powershell - スクリプト実行時間の改善
- 15. SQLで距離計算を改善する方法
- 16. 配列の統計を計算する
- 17. Rails - ajaxによるjson応答の処理を改善する
- 18. ポストグル時間計算
- 19. Mysqlの時間計算 - 時間のみ
- 20. 算術演算による非比例処理時間[C]
- 21. ボードゲームの回転処理を改善する
- 22. このアルゴリズムの時間計算量を計算する
- 23. リカバリーアルゴリズムの時間計算量を計算する
- 24. UIButtonの計算時間を計算する
- 25. Rの時間差を計算する
- 26. MySQLデータベース設計の改善
- 27. 通話時間を計算
- 28. PHPの夏時間計算
- 29. PHPでの時間計算
- 30. 時間外の計算
タイミングは?なぜ**? – pmg
これは理論的なEECSクラスの練習か現実の質問ですか?タイミングを「最適化されていない命令カウント」として測定していますか?特定の命令セット(MIPS、x86、?)を想定していますか? – smci