GPUコンピューティングの歴史とCUDAの誕生
2010年7月2日(金)
CUDAによるプログラミング
図9は、CUDAによるプログラミングの例です。CUDAがサポートする言語の1つである"CUDA C"では、いくつかのCUDA特有のユニークな記述が必要にはなるものの、元のC言語に近い、シンプルで分かりやすいものになっています。
図9: CUDA Cによるプログラミング例(サブルーチン) |
ただ、これは、あくまでもGPUが計算を行うサブルーチンの部分だけであり、CPUからこのルーチンを起動するためには、以下のような、いくつかの前設定や手続きが必要になります。
- GPUメモリー領域の確保
- DMA転送によるCPUからGPUへの元データのコピー
- GPUのサブルーチンを呼び出し、GPU上で計算を実行
- DMA転送により、計算結果をGPUからCPUに戻す
図10: CUDA Cによるプログラミング例(メインルーチン) |
GPUコンピューティングでは、CPUのマルチコアを有効に並列的に使用する場合と同じようなレベルでアルゴリズムを考える必要があります。GPUの構造やCUDAの機能を理解したうえでアルゴリズムを考えることが、GPUプログラミングの前提条件になります。
GPUプログラムのコンパイル方法の一例として、Linux上でCUDA C言語を使用する場合について簡単に説明します。以下のようなプロセスを経て、自動的にコンパイルされます。
- "nvcc"(NVIDIA C compiler)によるGPUコードとCPUコードの分離
- GPUコード、CPUコードそれぞれのコンパイル
- GPUコードは、"nvcc"によっていったん中間言語PTX(Parallel Thread Execution)コードになり、最終的にターゲットのバイナリ・コードを生成
- CPUコードは、標準GCC(GNU Compiler Collection)によりコンパイル
- GPUとCPUそれぞれのバイナリ・コードがリンクされ最終実行ファイルを生成
図11: CUDA CコンパイラによるGPU/CPU混在コードのコンパイル |
CUDAによる複合並列計算プログラミング
CUDAによるGPUコンピューティングは、CPUとGPUの共存の上に成り立つものであり、GPUがCPUを置き換えるといった類のものではありません。
かつて、コンピュータの画面出力はCPUが主役でしたが、GPUの登場によってCPUの大幅な負荷軽減と高品質リアルタイム3Dグラフィックスが実現しました。このように、CUDA GPUコンピューティングも、CPUとGPUがそれぞれの得意分野を受け持ちます。こうした連携によって、ハイ・パフォーマンスな複合並列計算環境の実現を目指しています。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- 複合並列コンピューティングの必要性とFermiの登場
- CUDAとGPUコンピューティングの広がり
- GPUコンピューティングのNVIDIA、OpenStackでの利用拡大を狙う
- “もはやSFではない” すべての産業界にAIコンピューティングを―NVIDIA GTC Japan 2016レポート
- エルザジャパン、NVIDIA TEGRA 3を搭載したGPUコンピューティング開発キットの取り扱いを開始
- GPUとOpenStackのホットな関係が紹介された日本仮想化技術(株)の技術セミナー
- インテルがAIにフォーカスしたイベント「インテルAI Day」でPreferred Networksとの協業を発表
- 「GPU」×「PG-Storm」で爆速PostgreSQLを体験してみよう
- GTC 2019ではFacebook、Google、Walmartなどによる人工知能関連のセッションが満載
- ハイプサイクルに登場する技術②ー エッジAIや組み込みAI、AIチップ