ブログパーツマイリスト

無料ブログはココログ

« CPU ロードマップ OpenCLのデータ構造を知る | トップページ | CPU ロードマップ OpenCLの苦手なこと »

2010年8月14日 (土)

CPU ロードマップ OpenCLのメモリ階層を知る

GPGPUの最大の課題は、メモリアクセスである。
OpenCLのメモリ構造のポイントを把握する。
これもATIを中心に。

メモリ階層
  • host(CPU) memory
  • CPUがアクセスする、いわゆるメインメモリ。現在、GPUは直接アクセスできない。

  • PCIe momory
  • host memoryを読み書きするために、CPUとGPUを仲介し、同期させるためのメモリ領域、というか、読み書き用のバッファ。物理的なPCIeメモリが存在するわけではない。
    clEnqueueMapBuffer/clEnqueueMapMemObjectで確保し、clEnqueueRaedBuffer/clEnqueueWriteBufferで操作する、というと、わかりやすいかも。

  • global memory
  • いわゆるVRAM。
    すべてのwork-itemが読み書きできる。
    ※ATIではglobal bufferとも言う

  • constant memory
  • DMAにおいて、CPUと同期を取るメモリ領域で、GPUの実行中は変更されない。物理的なメモリが存在するわけではなく、VRAMの一部。

  • local memory
  • VRAMと思いがちだが、OpenCLでは、個々のWork-groupの専用の領域で、VRAMではない。
    異なるWork-groupからはアクセスできない。CPUでいう共有L2キャッシュみたいなイメージ。
    ※ATIでは、Local Data Storeとも言う

  • private memory
  • 個々のWork-itemの専用の領域で、同じWork-groupであっても、異なるWork-itemは読み書きできない。
    CPUでいうL1キャッシュみたいなイメージ。
    ※ATIでは、scratch memoryとも言う

GPUとCPUとのデータのやり取りの手段
PCIe、DMA、processing API callsの3種類が存在するが、結局、PCIeを経由することには変わりない。
プログラミング方法は変わる。

PCIeを経由したGPUとCPUのデータのやり取り
global(VRAM)→PCIe→host(CPU)と、データを2回コピーする。
メモリコピーを2回行う上、PCIeの帯域の制限もあるので、CPUとGPUでデータのやり取りが発生すると、処理能力が大きく落ちる。
よって、GPUの処理能力と、システム全体の処理能力には、大きな差がある。
ただし、適切なメモリのマネージメントを行うと、PCIe→host(CPU)のコピーはスキップできる。

メモリへのアクセス
メモリへのアクセスはWork-item単位となる。
しかし、メモリアクセスの頻度が多くなりすぎるため、同じ命令を実行されるWork-itemをひとまとめにした、Wavefront(CUDAではWarp)というまとまりでアクセスし、レイテンシを隠蔽する。

« CPU ロードマップ OpenCLのデータ構造を知る | トップページ | CPU ロードマップ OpenCLの苦手なこと »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217868/49141233

この記事へのトラックバック一覧です: CPU ロードマップ OpenCLのメモリ階層を知る:

« CPU ロードマップ OpenCLのデータ構造を知る | トップページ | CPU ロードマップ OpenCLの苦手なこと »