私は、空間的および時間的局所性の意味について少し混乱しています。私はそれをよりよく理解するのに役立つ配列の例でそれを見ることを望んでいます。
このような例:A [0] [1]、A [0] [2]、A [0] [3] ....など
これは一時的な局所性を示していますか?同じ行が何度もアクセスされますが、異なるオフセットで表示されます...これは異なるアドレスがアクセスされることを意味しますか?
また、このような例:A [1]、A [2]、A [3] ...など
空間的局所性を示していますか?
実際のコードで時間的および空間的な局所性がどのように機能するかについての明確化が、それらをよりよく理解するのに役立つことを願っています。
空間的および時間的局所性は、プログラムがデータ(または命令)にアクセスする方法の2つの異なる特性を表します。ウィキペディアには 参照の局所性 に関する良い記事があります。
近くで参照されるものも空間的に近い場合(近隣のメモリアドレス、ディスク上の近くのセクタなど)、参照シーケンスはspatial
局所性を持っていると言われます。同じものへのアクセスが時間内にクラスター化される場合、シーケンスはtemporal
局所性を持つと言われます。
プログラムが大きな配列のすべての要素にアクセスし、それを一度読み取った後、次の要素に移動し、他のすべての場所に触れるまで特定の場所へのアクセスを繰り返さない場合、spatiallocality、ただしtemporallocalityではありません。一方、プログラムが別のランダムサブセットに移動する前に、配列上の位置のランダムサブセットに繰り返しアクセスすることに時間を費やす場合、temporallocalityと呼ばれますが、spatial局所性。よく書かれたプログラムには、一緒にアクセスされるものをグループ化するデータ構造があり、spatial局所性を保証します。プログラムがアクセスする可能性がある場合[〜#〜] b [〜#〜]アクセス直後[ 〜#〜] a [〜#〜]その後両方[〜#〜] a [〜#〜]および[〜#〜] b [〜#〜]は互いに近くに割り当てる必要があります。
最初の例
A[0][1], A[0][2], A[0][3]
spatiallocalityを示しています。時間内にアクセスされるものは空間内にあります。同じものに複数回アクセスしたことがないため、temporal局所性は表示されません。
あなたの2番目の例
A[1], A[2], A[3]
また、spatial局所性を示しますが、temporal局所性は示しません。
以下は、temporal局所性を示す例です
A[1], A[2000], A[1], A[1], A[2000], A[30], A[30], A[2000], A[30], A[2000], A[30], A[4], A[4]
簡単に言えば、
時間的局所性:ある時点で参照されるリソースが近い将来再び参照されるという概念。
空間的局所性:近くのリソースが参照された場合に、リソースを参照する可能性が高くなるという概念。
ソース:ウィキペディア
以下は、局所性を備えたコードの例です。
var sum = 0;
for (i = 0; i < n; i++){
for(j=0; j < m ; j++){
sum += a[i][j];
}
}
return sum;
時間的局所性が存在するのは、ループ内でsumが頻繁にアクセスされるためです。一時的なローカリティは、最近使用した命令とデータの値をキャッシュメモリに保持し、キャッシュ階層を活用することにより活用されます。または、メモリ内ではなく、レジスタ内でも。
配列 'a'があり、配列の各要素に順番にアクセスするため、spatial localityが存在します。一般に、空間的局所性は、より大きなキャッシュブロックを使用し、プリフェッチメカニズム(使用が予想されるアイテムを取得する)をキャッシュ制御ロジックに組み込むことで活用されます。
時間的局所性は空間的局所性の特殊なケースです
時間的局所性:時間的局所性は、繰り返し参照されるリソースに基づいています。
空間的局所性:空間的局所性は、最近参照されたデータに隣接するデータが近い将来に要求されることを示します。
私は両方のタイプの地域を覚えていますが、私はそれらの違いを思い出すのが困難です。
空間的局所性「順次」副詞に留意することを覚えておいてください。
Temporal Localityソートアルゴリズムの学習の開始時に、スワップする「一時変数」が表示されることを思い出してください。例えばバブルソート。 2つのループがあり、スワップするにはint temp = .....
。
方法によって、どの定義が何に属するかを認識できます。