メニーコアと格闘ブログ:CUDAプログラム:デバイスの構成と、メモリアクセス

出典: トータル・ディスクロージャ・サイト(事実をありのままに)

今回実行したプログラムは、デバイス上の“グローバルメモリ”と呼ばれる所に、ホストからデータをコピーしました。カーネル関数により起動したスレッドは、このグローバルメモリ上にあるデータを使って計算を実行したことになります。

参考:CUDA_Programming_Model_jp.pdf P10

ファイル:CUDAを使ってプログラムとC言語プログラムの比較その3-01.jpg



さて、ここで、デバイスのソフト的な階層構造と、ハードウェア的な階層構造の対応付けについて見てみましょう。


参考:CUDA_Programming_Model_JP.pdf P.11

ファイル:CUDAを使ってプログラムとC言語プログラムの比較その3-03.jpg


この図は各行が組になって対応付けられています。

  • “スレッド”は“スレッドプロセッサ”によって処理されます。
  • “スレッドブロック”は“マルチプロセッサ”によって処理されます。
  • “グリッド”は“デバイス”で処理されます。


続いて、メモリアクセスについて見てみます。

参考:CUDA_Programming_Model_JP.pdf P.9

ファイル:CUDAを使ってプログラムとC言語プログラムの比較その3-04.jpg


  • スレッドを処理するスレッドプロセッサは、レジスタキャッシュをオンチップ、ローカルメモリをオフチップで持っています。


  • スレッドブロックを処理するマルチプロセッサは、小容量ですが、オンチップで高速な“シェアメモリ”を持っています。


  同一ブロック内のスレッドはシェアメモリの情報を共有できる(ブロック外のスレッドとは情報を共有できない)   オンチップであるため極めて高速


  • グリッドを処理するデバイスは、大容量な“グローバルメモリ”を持っています。

  同一グリッド内のスレッドブロックと、情報を共有できる



次回はスレッドブロック内のシェアメモリを使用して、メモリアクセスの時間を短縮したプログラムについて書きたいと思います。


この記事へのコメントをお寄せください

  • サイトへの書き込みに差し支えございましたら トータルディスクロージャーサイトサポート係へメールをお送りください
  • トータル・ディスクロージャ・サイトに投稿された文章と画像は、すべてその著作権がHPCシステムズ株式会社に帰属し、HPCシステムズ株式会社が著作権を所有することに同意してください。
  • あなたの文章が他人によって自由に編集、配布されることを望まない場合は、投稿を控えてください。
  • コメントを書き込む場合は名前にひらがなを織り交ぜてください。
  • あなたの投稿する文章と画像はあなた自身によって書かれたものであるか、パブリック・ドメインかそれに類する自由なリソースからの複製であることを約束してください。あなたが著作権を保持していない作品を許諾なしに投稿してはいけません!

<comments hideform="false" />


Comments

ノート:メニーコアと格闘ブログ:CUDAプログラム:デバイスの構成と、メモリアクセス

個人用ツール