熊本大学学術リポジトリ Kumamoto University Repositor Title GPGPU による高速演算について Author(s) 榎本, 昌一 Citation Issue date Type URL Presentation

Similar documents
1. GPU コンピューティング GPU コンピューティング GPUによる 汎用コンピューティング GPU = Graphics Processing Unit CUDA Compute Unified Device Architecture NVIDIA の GPU コンピューティング環境 Lin

工学院大学建築系学科近藤研究室2000年度卒業論文梗概


07-二村幸孝・出口大輔.indd


( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I



Slide 1

1 GPU GPGPU GPU CPU 2 GPU 2007 NVIDIA GPGPU CUDA[3] GPGPU CUDA GPGPU CUDA GPGPU GPU GPU GPU Graphics Processing Unit LSI LSI CPU ( ) DRAM GPU LSI GPU








Slide 1

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx


Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments


GPU のアーキテクチャとプログラム構造 長岡技術科学大学電気電子情報工学専攻出川智啓

GPGPUイントロダクション

NUMAの構成

熊 本 大 学 学 術 リポジトリ Kumamoto University Repositor Title プロスタシンを 中 心 としたNa 再 吸 収 血 圧 調 節 の 分 子 基 盤 の 解 明 Author(s) 脇 田, 直 樹 Citation Issue date


GPGPUクラスタの性能評価

3次多項式パラメタ推定計算の CUDAを用いた実装 (CUDAプログラミングの練習として) Implementation of the Estimation of the parameters of 3rd-order-Polynomial with CUDA

GPU.....

GPUを用いたN体計算

main.dvi




研究報告用MS-Wordテンプレートファイル

TSUBAME2.0におけるGPUの 活用方法


ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014

Im~ ~xplanations (im~; 斎目 ) ~ng dü~

GPU GPU CPU CPU CPU GPU GPU N N CPU ( ) 1 GPU CPU GPU 2D 3D CPU GPU GPU GPGPU GPGPU 2 nvidia GPU CUDA 3 GPU 3.1 GPU Core 1



EnSightのご紹介





スライド 1

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx


CUDA 連携とライブラリの活用 2

~ ご 再 ~

情報処理学会研究報告 IPSJ SIG Technical Report Vol.2016-CSEC-75 No /12/1 ハッシュ関数 Keccak の GPU 実装 グェンダットトゥオン 1 1 岩井啓輔 1 黒川恭一 概要 : 次世代ハッシュ関数 SHA-3 の候補であった Ke

PowerPoint プレゼンテーション



23 Fig. 2: hwmodulev2 3. Reconfigurable HPC 3.1 hw/sw hw/sw hw/sw FPGA PC FPGA PC FPGA HPC FPGA FPGA hw/sw hw/sw hw- Module FPGA hwmodule hw/sw FPGA h




27_02.indd







Microsoft PowerPoint - GPUシンポジウム _d公開版.ppt [互換モード]









CUDA を用いた画像処理 画像処理を CUDA で並列化 基本的な並列化の考え方 目標 : 妥当な Naïve コードが書ける 最適化の初歩がわかる ブロックサイズ メモリアクセスパターン

本文ALL.indd

1. マシンビジョンにおける GPU の活用


第3部:プログラミング実習



スライド 1



GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 理化学研究所 共通コードプロジェクト



GPGPU










Transcription:

熊本大学学術リポジトリ Kumamoto University Repositor Title GPGPU による高速演算について Author(s) 榎本, 昌一 Citation Issue date 2011-03-17 Type URL Presentation http://hdl.handle.net/2298/23539 Right

GPGPU による高速演算について 榎本昌一 東京大学大学院工学系研究科システム創成学専攻 1. 概要パーソナルコンピュータ用 CPU の高速化は日進月歩で進んでいるが, より高速な演算をさせる為には CPU 独自の能力では限界がある. そこで, 海洋研究開発機構 (JAMSTEC) の地球シミュレータなどの高速計算機システムでは複数の計算機よる分散処理行うクラスタリングによる高速化を実現している. だがここ数年, クラスタリングとはちょっと違った手法による高速演算が提案され実際に使用され始めた. それは GPGPU(General Purpose Graphics Processing Unit) と言われるもので, パーソナルコンピュータのグラフィックボード上のプロセッサ (GPU) に演算を行わせ, 高速な演算処理を実現するものである. 本発表では,GPGPU プログラミングに必要な GPU とはどういうものか, また GPU による高速演算を実現するための開発環境, 実際のプログラミングについて説明し, 実際に高速演算が可能かを考察する. 2. GPU とは GPU(Graphics Processing Unit ) はパーソナルコンピュータやワークステーション等に於いて画像処理を担当する主要な部品のひとつで,CPU に負担を掛けずに3D の描画を行うソフトウェアルーチンがサポートされており, これにより高速な描画が可能となっている. 図 1( 左 ) の写真は NVIDIA 社製のグラフィックボードで GeForce 9500 GT と呼ばれる GPU と, 高速にアクセスが可能な VRAM(video RAM) を搭載している. ファンの下に GPU( 右 ) が実装されている. インターフェイスは PCI Express x16 である. 廉価なパーソナルコンピュータの場合, マザーボードに GPU を直接載せている場合が多く,VRAM をメインメモリから振り分けることがある. そのためメモリアクセスの時間がかかり, 描画速度が落ちることとなる. また, グラフィックボードはかなりの電力を必要とする. このボードでは最大消費電力は 59W であるが, この GPU の上位機種である GeForce G TX 285 を搭載したものでは 200W を超えるため, バススロットからの電力供給では追いつかず, 直接電源部から供給することになる. 図 2に NVIDIA 社製 GPU を使用したグラフィックボードのアーキテクチャを示す. グラフィックボード自体には GPU と VRAM が搭載されており,GPU は 30 個の Streaming Multiproc essor() で構成されている. さらにその は8 個の Streaming Processor(SP) と 16KB の Shared Memory で構成されている. つまり, 一つの GPU には 30 8=240 個のプロセッサが集積されている. グラフィックボードはこれらのリソースを駆使し,3D-CG オブジェクトの移動 回転時の 図 1 グラフィックボードと GPU

グラフィックボード GPU VRAM GPU 30 個の で構成 (Streaming Multiprocessor) 8 個の SP で構成 (Streaming processor) 各 SP には浮動小数点の積和算器 SP SP SP SP Shared Memory SP SP SP SP + 図 2 NVIDIA 社のグラフィックボードのアーキテクチャ座標変換を行う為の行列演算 ( アフィン座標変換 ),3D-CG オブジェクトを生成するポリゴンメッシュ,3D-CG オブジェクトの面に色や模様を貼り付けるテクスチャマッピング,3D-CG オブジェクトに陰影付けを行うシェーダ機能を高速で実現している. 3. GPGPU 開発環境 CUDA 240 個のプロセッサを持つ GPU をグラフィックだけではなく数値演算にも使えないか, つまり, グラフィックス専用のプログラムだけではなく, データ処理等の一般的なプログラムを動作できないかと考える研究者が現れ,2006 年 12 月, NVIDIA 社のチーフサイエンティストである David kirk 博士により開発環境 CUDA(Compute Unified Device Architecture) が発表された.CUDA は NVIDIA 社の GeForce に特化した開発環境である. 現在では同じグラフィックボードメーカーの AMD 社から ATI Stream という開発環境も出ており, こちらは同社の GPU である Radeon に特化している. 今回は, その熟成度, 世界での利用度を考慮し,CUDA を使用してみた. また,CUDA は基本的に C,C++ 言語であり, その上に GPGPU を実現する為の CUDA ランタイム API, ユーティリティ関数,GPU を実際に動かすカーネル関数が統合されている. 先頃 Fortran コンパイラも提供された. これは, 計算流体力学 ( 気候および海洋モデリングなど ), 有限要素分析, 分子力学, 量子化学などの高速計算の必要な分野では Fortran が使われている現状がある為である. 3-1. CUDA のインストール CUDA は Linux 版,Windows 版,MAC-OS 版が有り,NVIDIA 公式サイト (http:/ /www.nvidia.co.jp/object/cuda_get_jp.html) からダウンロードが出来る.OS 環境に合わせたファイルをダウンロードし, インストールすればよい. 3-2. CUDA プログラム CUDA のプログラムは,PC の CPU に関係した部分と GPU を搭載したグラフィックボードの部分に分かれて動作する. CPU 側を ホスト,GPU 側を デバイス と呼び, デバイス上で動作するプログラムをカーネルプログラムという. 図 3に CUDA プログラムの基本的な流れを示す.

ホスト側 デバイス側 プログラム開始 カーネルプログラムをロード 必要なデータを準備データをデバイス側へ転送カーネルプログラムを起動デバイス側から結果を転送 キック データ処理 図 3 CUDA プログラムの動作 1 通常のプログラムのようにホスト側でプログラムを起動し, カーネルプログラムをデバイス側にロードする 2 ホスト側で必要なデータを作成し, デバイス側のメモリに転送する 3 ホスト側からカーネルプログラムを起動させる ( キックする という) 4 カーネルプログラムでの処理が終わったら, 結果をホスト側へ転送するこれが一連の流れである. 図 4にプログラム例を示す. // ホスト側プログラム int main() { int n = 500; int nb = sizeof(float) * n; float *x = (float*) malloc(nb); float *y; cudamalloc( (void**) &y, nb); for(int i=0; i<n; i++) x[i] = i; cudamemcpy( y, x, nb, cudamemcpyhosttodevice); // データ転送 ( ホスト GPUメモリ ) calc_on_gpu <<<1, 500 >>> ( y ); // カーネル関数 (500 個のスレッドで処理 ) cudamemcpy(x, y, nb, cudamemcpydevicetohost); // データ転送 (GPU ホストメモリ ) return 0; } // デバイス側プログラム ( カーネルプログラム ) global // カーネルプログラム宣言 void calc_on_gpu (float *y) { int i = threadidx.x; // 各スレッド毎の番号 y[i] = sqrt(y[i]); // 各スレッドで計算 } 図 5 CUDA プログラム例 4. CUD A による高速演算 大量のプロセッサを使って並列データ処理が行える CUDA だが, 演算の高速化を行うには GPU のハードウェアを理解 し, 数学的なプログラミング手法を身につける必要がある. 4-1. プロセッサ群とメモリモデル CUDA では 240 個のプロセッサをマルチスレッドとして使用でき, 最大スレッド数は 65535 65535 512 個となっている. このように大量のスレッドを管理する為, グリッドとブロックという概念を導入している ( 図 5). スレッドはブ

ストグリッド block(0,0) block(0,1) block(0,2) block(1,0) block(1,1) block(1,2) ブロック シェアードメモリ レジスタ スレッド (0,0) ブロック ひとつがスレッド thread(i,j,k) グリッドホローカルメモリグローバルメモリコンスタントメモリテクスチャメモリ 図 5 グリッドとブロック 図 6 メモリモデル ロックでまとめられており,1 ブロックで最大 512 スレッドを管理できる. ブロック内のスレッドは,1 次元 (512 個 ), 2 次元 (16 16 個 ),3 次元 (8 8 8 個 ) で表現することが出来る. GPU のメモリモデルを図 6に示す. 特別な場合を除き CUDA で使用するメモリはグローバルメモリとシェアードメモリである. グローバルメモリはホスト側と入出力に使われ, シェアードメモリはレジスタ並みの高速内部メモリである. 4-2. プログラミングと実行 CUDA を使って 512 512 の行列積演算プログラムを作成した.1CPU のみの演算,2GPU のグローバルメモリを使った演算,3GPU のシェアードメモリを使った演算についてそれらの演算時間を出力した ( 表 1). 計算結果 3のように, CPU を使った演算に比べ,GPU を使った演算はかなりの高速化が期待できるが,2 のように,GPU のメモリの使用方法により, 高速化が期待できないこともあることがわかった. 表 1 計算時間 計算方法 計算時間 (msec) 1 CPU のみの演算 266.8 2 GPU のグローバルメモリを使った演算 212.0 3 GPU のシェアードメモリを使った演算 18.0 5. 終わりに GPGPU を実現する開発環境 CUDA を使ってみた. 条件判定等の制御系には向かないが, 大量の計算を並列で行うことが出来るため, 高速演算を実現できることがわかった. ただし, プログラミングには線形代数的なプロセッサ群の管理やメモリアクセスについてのかなりのスキルが必要である. 今後は,3 次元レーザスキャナの計測データのような,3 次元データを持つ数千万個の点群データの解析に応用したいと考えている. 参考文献はじめての CUDA プログラミング青木尊之 額田彰工学社 ISBN978-4-7775-1477-9 CUDA 高速 GPU プログラミング入門小山田耕二 岡田賢治秀和システム ISBN978-4-7980-2578-0 CUDA ZONE http://www.nvidia.co.jp/object/cuda_home_new_jp.html