ストライドアクセス時のライン衝突 ストライドアクセス時のライン衝突

ベクトルの長さを64としたときの、ストライドの変化(128刻み)と性能

ストライドが8KBまでとそれ以降で、グラフの挙動が変化している。
8KBまでは、1024Bごとに大きく性能が落ちている。
8KB以降は、512Bごとに少し性能が落ち、1024Bごとに大きく性能が落ちている。
64×1024=4×16KB
64×512=2×16KB
1次キャッシュ容量の2倍と4倍の時点で性能が落ちていることになる。
1次キャッシュは4-way set associativeなので4倍の時点で性能が落ちる理由は分かるが、
2倍の時点で性能が落ちる理由は不明である。
さらにその現象がおこるのがストライドが、8KB以降に限定されてる。
これは、64×8KB=256KB
と、2次キャッシュ容量を超えた時点である。
また、2048Bおき、4096Bおきに、いっそう落ちていることが分かる。
4096B=16KB÷4(1次キャッシュ容量÷アソシアティビティ数)なので、
読み直しがすべて同じラインにあたるためであろう。
2048Bおきに落ちるの理由は不明である。

ベクトルの長さを64としたときの、ストライドの変化(128刻み)と性能

これは先のグラフを、ストライドが2の17乗付近でとったものである。
変わった点として、
ストライドが2^17−512Bの時点では性能が低下してない。
ストライドが2048Bおきのときの低下量が減った。
ストライドが2^17Bのとき、2^17+8192Bのときにいっそう低下した。
という点があげられる。
いずれも原因がつかめない。

ベクトルの長さを64としたときの、ストライドの変化(1024刻み)と性能

ストライドが32KBまでとそれ以降でグラフの性質が変化している。