2.16. メモリレイテンシ

メモリアクセスには一定のレイテンシが発生します。レイテンシを計測する際にはclock cycle単位を使います。clock cycleの具体像をつかむために例として、1GHzのプロセッサを考えてください。プロセッサは1,000,000,000 clock cycle/秒の処理ができます。

多くの場合、プロセッサは一つ以上の命令を1clock cycleで処理することができます。しかしメモリへのアクセスは、この数百倍以上の遅延が発生します。

以下は筆者が想定するクロックサイクルです。遅延がどの程度かはデバイスや使用状況によって異なり集計が面倒なため、おおよそな値でも知りたい方向けのために掲載します。あくまでも経験上のものなので、正確な数値が欲しい方は無視してください。

ローカルメモリはグローバルメモリの10倍程度の速度があると考えると良いかと思います。

参考までにIntelのi7-Xeonプロセッサの場合は以下のような数値となっています。

表2.16 「Performance Analysis Guide for Intel」の遅延統計(遅延は1 clock cycleを0.5nsとして換算)

キャッシュ

Clock

遅延

L1 Cache

4 cycles

2ns

L2 Cache

10 cycles

5ns

L3 Cache

40 cycles

20ns

L3 Cache 共有ライン

65 cycles

32.5ns

L3 Cache 外部コア

75 cycles

37.5ns

リモートL3 Cache

100-300 cycles

50-150ns

ローカルDRAM

60ns

リモートDRAM

100ns


つまり単純なレイテンシとする場合、ローカルDRAM(内臓GPUがCPUと共有するメインメモリ)の遅延はローカルメモリ(L3 Cache)と差が2倍程度であり、あまり変わりません。

2.16.1. メモリ・キャッシュ帯域

ローカルメモリの帯域ですが、L3キャッシュの「cache bandwidth」は一般的に目安となるのが1000GB/秒程度ですので、だいたい同等と想定できます。

ではグローバルメモリ(DDR3/DDR4/GDDR5/HBM)の帯域はどれくらいになるのでしょうか?以下の表は各メーカーのGPU帯域の比較です。

機種

バス型

帯域(GB/秒)

Radeon R9 Fury X

HBM

512

Radeon R9 390X

GDDR5

384

GeForce GTX Titan X

GDDR5

336

GeForce GTX 980

GDDR5

224

GeForce GT 705

DDR3

14.4

HD Graphics 4000

DDR3

25.6

2014年モデルのGeForce GT 705が、14.4GB/sで、2015年モデルの最上位モデルである、GeForce GTX Titan Xが336GB/sとなり、メモリ帯域は大幅にアップしています。

さらにHBMバスを採用するRadeon R9 Fury Xでは、512GB/sとキャッシュ帯域に肉薄するほどのパフォーマンスの向上が見られます。HBM 2については、さらにローカルメモリ(L3 Cache)なみの帯域が可能となるとされています。

Intelの内蔵GPUボードはメインメモリをグローバルメモリとして使いますが、2016年時点で最新のSkylakeモデルも31GB/s(DDR4)程度であり旧式のHD Graphics 4000からそれほどの向上はありません。しかしメモリのチャンネルを増加させることで、100-200GBに帯域を増やすことが可能となります。

内臓GPUボードについては、CPUとメインメモリを共有するので、使用できるメモリ帯域は減りますが、メモリのコストは外部GPUのメモリよりも割安なので、GPUが使用できるメモリのサイズがスケールしやすいというメリットがあります。

最新の機種では、昔ほどにはグローバルメモリとローカルメモリのパフォーマンス差は存在せず、メモリレイテンシという現象を考慮する必要性は少なくなる傾向といって差し支えないかと思います。

Copyright 2018-2019, by Masaki Komatsu