掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ループ展開の必要性はありますか? (ID:70439)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
単純にループ展開 (unroll loop) というと、たとえば for (i=0; i<N; ++i) func(i); のような呼び出しを func(0); func(1); func(2); ... func(N-1); に置換するということ。 メリット:比較1個N回がいらない デメリット:コードがでかくなる 通常は unroll だけしてもあまりおいしくないことが多く、 この例では unroll + func をインライン展開できてはじめて高い効果が得られる。 (関数呼び出し1回のコストに対し、比較1回のコストなど無視できるほど小さい) 効果のほど/実用状況は、どうなんだろう・・・ 少なくとも組み込み系ではまず使わない(メモリ量の節約のほうが大事) Pentium 以後の「内蔵高速キャッシュがヒットしないと性能が出ない」 CPU では ・比較回数が減る効果 ・コードがでかくなってキャッシュヒット率が下がる効果 のどっちが顕著に出るか、実測して何ぼな部分があるわけだ。 gcc などでは -funroll-loops や -funroll-all-loops など手指定ができるようになっている。 ってことはやはり効果を実測して使い分けるべき、ってことだと思うぞ。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.