5 ポイント 投稿者 GN⁺ 2023-10-22 | 1件のコメント | WhatsAppで共有
  • GPUコンピューティングの基本的な理解は、すべてのソフトウェアエンジニアにとって必須である
  • この記事は主にNvidia GPUに焦点を当てており、Nvidiaの用語を使用している
  • GPUは、グラフィックス、数値計算、ディープラーニングなどにおける大規模並列処理と高スループットのために設計されている

CPUとGPUの比較

  • CPUは逐次的な命令実行のために設計されており、命令実行レイテンシを減らすためのさまざまな機能が含まれている。
  • GPUは大規模並列処理と高スループットのために設計されており、中程度から高い命令実行レイテンシを持つ。
  • GPUはCPUよりはるかに多くの演算を、はるかに高速に処理できる。

# GPUアーキテクチャ

GPUコンピュートアーキテクチャ

  • GPUはストリーミングマルチプロセッサ(SM)の配列で構成されている。
  • 各SMは複数のストリーミングプロセッサ(コアまたはスレッド)を含む。
  • SMは限られた量のオンチップメモリ(共有メモリまたはスクラッチパッド)を持ち、すべてのコアで共有される。

GPUメモリアーキテクチャ

  • GPUは複数階層のさまざまな種類のメモリを備えている。
  • 各SMは大量のレジスタを持ち、これはコア間で共有される。
  • 定数キャッシュは、コード実行に使用される定数データをキャッシュするために使われる。
  • 共有メモリは高速かつ低レイテンシなオンチップのプログラマブルSRAMメモリである。
  • L1キャッシュは、L2キャッシュから頻繁にアクセスされるデータをキャッシュする。
  • L2キャッシュはすべてのSMで共有され、グローバルメモリから頻繁にアクセスされるデータをキャッシュする。
  • グローバルメモリは大容量・高帯域幅のDRAMであり、SMから離れているためレイテンシが高い。

# GPU実行モデルの理解

CUDAカーネルとスレッドブロックの簡単な紹介

  • CUDAはNvidia GPU向けのプログラムを書くためのプログラミングインターフェースである。
  • カーネルは、GPU上で並列に実行されるC/C++関数に似た形で表現される計算である。
  • カーネル実行のために、グリッドと呼ばれるスレッドの集合を起動する。

GPUでのカーネル実行の段階

  1. ホストからデバイスへデータをコピー
  2. SMへスレッドブロックをスケジューリング
  3. 単一命令・複数スレッド(SIMT)とワープ
  4. ワープスケジューリングとレイテンシ隠蔽
  5. 結果データをデバイスからホストメモリへコピー

# 資源分割と占有率の概念

  • GPUリソースの活用度は「占有率」という指標で測定され、SMがサポートできる最大ワープ数に対する、割り当てられたワープ数の比率を表す。
  • 占有率は、SMの実行リソース、レジスタ、共有メモリ、スレッドブロックスロット、スレッドスロットによって制限される。
  • 高い占有率を維持しつつ、コード最適化によってレイテンシを最小化することが重要である。

# 要約

  • GPUは複数のSMで構成され、各SMは複数の処理コアを持つ。
  • グローバルメモリはチップから離れており、レイテンシが高い。
  • L1およびL2キャッシュは、CPUのL1/L2キャッシュと同様に動作する。
  • 各SMには共有メモリがあり、これはコア間で共有される。
  • GPUでカーネルを実行するには、スレッドのグリッドを起動する。
  • GPUはSMで実行するブロックを割り当て、すべてのスレッドは同じSM上で実行される。
  • SMに割り当てられたスレッドは、ワープと呼ばれる32単位のグループにさらにまとめられる。
  • GPUはスレッドの要件とSMの制約に応じて、スレッド間で動的なリソース分割を行う。

# 締めくくり

  • GPUは今日広く使われており、そのアーキテクチャと実行モデルはCPUとは根本的に異なる。
  • この記事はGPUのさまざまな側面を扱い、GPUが広く使われる理由とその動作方法についての洞察を提供する。

GN⁺の意見

  • GPUはディープラーニングや複雑な数値計算に不可欠な技術であり、この記事はGPUの基本的なアーキテクチャと実行モデルを理解するのに役立つ。
  • 並列処理や高性能コンピューティングに関心のある初級ソフトウェアエンジニアにとって、特に重要な内容を含んでいる。
  • この記事はGPUプログラミングに関する基礎知識を提供し、この分野への好奇心を刺激する興味深い資料である。

1件のコメント

 
GN⁺ 2023-10-22
Hacker Newsの意見
  • この記事はNvidiaに特化しすぎており、Sycl、Sapphire Rapids、AMDのMI300のような他の有効な代替案を無視している、という批判がある。
  • データ転送中にGPUが遊休状態になるのを防ぐ非同期コピーへの言及が不足している、という指摘がある。
  • この記事はGPUプログラミングの良い入門として評価されている一方で、より高度な手法を掘り下げる必要があるという提案もある。
  • 一部の読者は、待ち行列理論のLittle’s lawがGPUに適用されるという記事の主張の正確性に疑問を呈している。
  • メモリアーキテクチャに関する記事の説明は、キャッシュがスレッド間の一貫性保証を提供しない点に触れていないとして批判されている。
  • GPUの機能をより適切に反映するため、GPUをPPU(Parallel Processing Units)に改名すべきだという提案がある。
  • この記事はGPUプログラミングに関するより優れた解説の1つとして評価されており、メンタリングに使うことが勧められている。
  • SIMDプログラミングは「野性的」と表現されており、すべてのピクセルに対する単純な計算は容易だが、分岐条件には難しさがある。
  • 特定の配列計算タスクでGPUを使う効率性について疑問が呈されており、GPUへデータを転送し、GPUからデータを取り出す必要性が考慮されている。