ストライドアクセス時のTLBミス ストライドアクセス時のTLBミス

ベクトルの長さを8としたときの、ストライドの長さと性能

ストライドの長さを変化させても、性能にはまったく影響がでてない
これは最内ループ長(8)がTLBのエントリ数(32)以下であるためであろう
ただストライドが8192(64KBおき)のときに、ライン衝突が起きると思われるが、
このグラフにはその影響が見えてこない。

ベクトルの長さを16としたときの、ストライドの長さと性能

局所的に性能が落ちているものの、ストライドの長さによる性能の低下はあまり見えない
これは同様に最内ループ長がTLBのエントリ数以下であるためであろう
ストライドが4096の倍数のときに、ライン衝突が起きるはずだが、
実際は2048と8192のときに性能が落ちている。

ベクトルの長さを32としたときの、ストライドの長さと性能

ストライドの長さが一定の値を超えたときから段々と性能が低下している。
いつから性能が落ち始めているかを検討する最に、2つの見方がある。
一つはストライドの長さが2048のときに性能が低下し、
ストライドが4096のときは不思議と性能が戻っているという見方であり、
もう一つはストライドの長さが8192のときに性能が低下し、
ストライドが2048のときは不思議と性能が落ちているという見方である。
TLBミスがどこで発生していると推測されるが、
L1 DTLBとL2 DTLBと2種類あるため実際の挙動を追うのは困難である。
L1 DTLBは32エントリ、ページサイズは4KBなので128KBでTLBを使い果たす。
ベクトルの長さが32なので、ストライドの長さが、
128KB÷32÷8=512となるときにTLBを使い果たすはずである。
しかし実際にはストライドの長さが512のときは性能に低下が見られない。
おそらくL2 DTLBがうまく利用されているためであると思われる

ベクトルの長さを64としたときの、ストライドの長さと性能

同様にストライドの長さが一定値を超えたときから、性能が段々と低下している。
いつから性能が低下しているかを判断するのは難しい

ベクトルの長さを128としたときの、ストライドの長さと性能

ストライドの長さが2048になってから、性能が低下している。

ベクトルの長さを256としたときの、ストライドの長さと性能

ストライドの長さが1024になってから、性能が低下している。

ベクトルの長さを512としたときの、ストライドの長さと性能

ストライドの長さが512になってから、性能が低下している。

ベクトルの長さを1024としたときの、ストライドの長さと性能

ストライドの長さが256になってから、性能が低下している。
また、ストライドの長さが64の前後で性能が低下している。
ストライドの長さが64(64KBおき)のときはライン衝突が起きるはずなので、
その影響があるのだろうか。