掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ループ展開の必要性はありますか? (ID:70441)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
解決後に蛇足 最近の Pentium 互換 CPU は内部挙動が難しすぎて机上評価できない。 ウチで使っている組み込み系 CPU であるところの SH2/3/4 なら見積もったことがあって (パイプラインが乱れない場合に限り、1命令の実行時間が1クロックとしてよい) 関数呼び出しにかかるコスト= 呼び出し側命令コスト (引数を用意し返却値を受け取る) 5−10命令 呼び出され側命令コスト (レジスタ退避復帰など) 2−20命令 パイプラインが乱れるコスト 最悪40クロック程度 見えないコスト(呼び出し側での最適化が制約されるコスト:見積もり不能) の合計だったりするので、最小でも7クロック、最大だと60クロック程度が必要。 # レジスタ復帰・退避の際にパイプラインが乱れるコストが意外に大きく無視できない 比較にかかるコスト= 比較する数値を持ってくるコスト 2−3命令 比較しジャンプするコスト 2−3命令 パイプラインが乱れるコスト 最小0クロック、最悪でも数クロック ということで、最小なら4クロック程度、最大でも10クロックいかない程度。 昔々その昔の話をするなら、MZ-80 の画面消去するのに ・LD+DJNZ でループ組むと、画面消してる様子が見える ・スタックを一時的に VRAM 上に移して PUSH を unroll すると超高速 なんて話があったわけで、有効に unroll できれば効果絶大だったりする。 ・だ・け・ど・ この手の小手先チューンに時間を割く暇があったらアルゴリズムの改善を検討するべき。 バブルソートを unroll しても、クイックソートやヒープソートには勝てない。 改善効果の桁が違う。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.