ループ分割とループ融合とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > ループ分割とループ融合の意味・解説 

ループ分割とループ融合

(Loop_fissionとloop_fusion から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/21 18:33 UTC 版)

ナビゲーションに移動 検索に移動

コンピュータ科学の分野において、ループ分割英語: loop fission, loop distribution)は、コンパイラ最適化手法の1つであり、1つのループを、同じインデックスの範囲を持つ複数のループに分解し、各ループでは元のループ本体の一部だけをもたせる、という手法である[1]。大きなループ本体を小さなループに分割することで、参照の局所性をよりよく活用することが目的である。この最適化が最も効率よく実行できるのは、1つのタスクを複数のタスクに分割して、各タスクをそれぞれのコアで並列に実行できるマルチコアプロセッサである。

逆に、ループ融合英語: loop fusion, loop jamming)は、複数のループを1つのループに置換するという、コンパイラ最適化およびループ変換英語版の手法である。2つのループが同じ範囲でイテレートしており、互いにデータの参照が存在しない場合に適用可能である。ループ融合は、必ずしもランタイムの速度向上に寄与するとは限らない。実際、一部のアーキテクチャでは、たとえば、各ループ内でのデータの局所性が高まるため、2つのループの方が1つのループより性能が良いことがある。

ループ分割

C言語での例

int a[100], b[100];
for (int i = 0; i < 100; i++) {
  a[i] = 1; 
  b[i] = 2;
}

上記のコードのfor文を以下のように分解する。

int a[100], b[100];
for (int i = 0; i < 100; i++) {
  a[i] = 1;                     
}
for (int i = 0; i < 100; i++) {
  b[i] = 2;
}

ループ融合

C言語での例

int a[100], b[100];
for (int i = 0; i < 100; i++) {
  a[i] = 1;
}
for (int i = 0; i < 100; i++) {
  b[i] = 2;
}

上記のコードのfor文を以下のように融合する。

int a[100], b[100];
for (int i = 0; i < 100; i++) {
  a[i] = 1; 
  b[i] = 2;
}

関連項目

参考文献

  1. ^ Kennedy, Ken; Allen, Randy. (2001). Optimizing Compilers for Modern Architectures: A Dependence-based Approach. Morgan Kaufmann. ISBN 1-55860-286-0 



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  
  •  ループ分割とループ融合のページへのリンク

辞書ショートカット

すべての辞書の索引

「ループ分割とループ融合」の関連用語

ループ分割とループ融合のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ループ分割とループ融合のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのループ分割とループ融合 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2025 GRAS Group, Inc.RSS