データの局所性の例とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > データの局所性の例の意味・解説 

データの局所性の例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/05/14 14:36 UTC 版)

参照の局所性」の記事における「データの局所性の例」の解説

以下は行列 A と B の積を求め擬似プログラムの例である。 for i in 0..n for j in 0..m for k in 0..p C[i][j] = C[i][j] + A[i][k] * B[k][j]; 大きなキャッシュ入りきらない行列を扱うとき、このアルゴリズムではメモリへのアクセスはかなり不連続的になる。C言語では同じ行の要素連続してメモリ上に配置されるので、なるべく同じ行の要素続けてアクセスした方が使用するメモリアドレス連続的になり、空間的局所性が高い。つまり行のインデックスよりも列のインデックスの方が頻繁に変わるようにすると効率上がる。j は2つ行列 B,C の列のインデックスなので、頻繁に変化する最も内側ループカウンタにするとよい。このようにjとkのループ入れ替えることで、数学的に同値アルゴリズムだが効率上がり、特に行列大きいと性能の向上は劇的なものとなる。 さらに時間的局所性利用するには「ブロック化」と呼ばれる技法を使う。大きな行列等しサイズ部分行列分け、短い時間に同じ部分行列複数参照する。 for (ii = 0; ii < SIZE; ii += BLOCK_SIZE) for (kk = 0; kk < SIZE; kk += BLOCK_SIZE) for (jj = 0; jj < SIZE; jj += BLOCK_SIZE) for (i = ii; i < ii + BLOCK_SIZE; i++) for (k = kk; k < kk + BLOCK_SIZE; k++) for (j = jj; j < jj + BLOCK_SIZE; j++) C[i][j] = C[i][j] + A[i][k] * B[k][j]; この方法ではii,jj,kk変化しない間、つまり内側3つの繰り返しの間に同じメモリ何度もアクセスされ、キャッシュ残り易くなっている(時間的局所性)。また、jを最も内側変化させて空間的局所性考慮している。なお、以上はメモリ上で配列の同じ行の要素連続している Row-major order英語版)の場合であり、FORTRANなどでは逆に Column-major order になっているため注意が必要である。

※この「データの局所性の例」の解説は、「参照の局所性」の解説の一部です。
「データの局所性の例」を含む「参照の局所性」の記事については、「参照の局所性」の概要を参照ください。

ウィキペディア小見出し辞書の「データの局所性の例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「データの局所性の例」の関連用語

データの局所性の例のお隣キーワード
検索ランキング

   

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



データの局所性の例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの参照の局所性 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS