# HG changeset patch # User ikkun # Date 1487216429 -32400 # Node ID 4d204f37fc8ac724f520e16239e40aecdb00f6cc # Parent 5ef03a4e2fd6e1a6773ef5f1eca3495490a81d32 fix diff -r 5ef03a4e2fd6 -r 4d204f37fc8a presen/slide.md --- a/presen/slide.md Thu Feb 16 11:35:04 2017 +0900 +++ b/presen/slide.md Thu Feb 16 12:40:29 2017 +0900 @@ -14,38 +14,39 @@ # GPUの特徴 - GPU は画像処理に使われる演算処理ユニットである。 - GPU は CPU よりも多数のコアを持ちます。 -- GPU は CPU と違い単純な計算しか出来ない。 -- GPUを画像処理以外の演算処理に利用することをGPGPU (General Purpose computing on GPU)と言います。 +- GPU は小さいTask を大量のデータに対して高並列実行を行うことができる +- データは前もってGPUに転送し結果をGPUから転送する必要がある +- GPUの処理終了やデータ転送時のstream制御などの複雑な問題がある +- Task自体は入力から出力を得る単純な関数型だが、vector処理などの工夫が入ることがある +- Task以外の複雑なのでプログラムの正当性を調べることが難しい -# Code Gear Data Gear とは -- Code Gear Data Gear とはプログラムを分解し、処理の部分を Code Gear、int や文字列などの部分を Data Gear という 単位で分けます。 -- Code Gear の処理は、その処理に必要な Data Gear が揃ってから行われます。 -- Code Gear の処理の移行は goto を用いて行い、この移行の仕方を継続と言う。 -- goto による移行は戻り値を持たないためスタックを詰む必要がない、スタックに積まない継続を軽量継続と呼ぶ。 +# Code Gear/Data Gear とは +- プログラムを分解し、処理の部分を Code Gear、int や文字列などの構造体を Data Gear という 単位で分ける。 +- Code Gear の処理は、その処理に必要な Data Gear がそろってから行われる +- Code Gear 間の移動は goto を用いて行い、この移行先を継続と言う +- goto による移行は関数呼び出しと違いスタックを詰む必要がない軽量継続となる # Gears OS -- Gears OS は Code Gear、Data Gear という Gear で構成されています。 +- Code Gear、Data Gear という Gear で構成されている - Code Gear と Input /Output Data Gear の対応から依存関係を解決し、Code Gear の並列実行を行う - +- 対応する Meta Code Gear と Meta Data Geaer があり、メモリ管理、依存関係、並列処理を担当する +- interface という Code Gear/Data Gear の集合が用意されおり、実装とAPIの分離やコードの再利用を可能にしている -# Meta Computation -- Meta Computation は通常の Computation のComputation である。 -- 並列処理の依存関係の解決 GPU などのアーキテクチャ実行のために行う処理などを行う。 -- Gears OSでは Meta Computation を Meta Code Gear、 Meta Data Gear で表現される。 - -# 並列性 -- Code Gear が処理するのに必要なInput Data Gaer と処理実行後に出力される Iutput Data Gaer の組を Task と呼ぶ。 -- Code Gear は Task 以外とは依存関係がない。 -- 依存関係が明確化されている Code Gear Data Gear で記述することで並列化し易い。 +# Gears OSの並列性 +- Code Gear が処理するのに必要なInput Data Gaer と処理実行後に出力される Output Data Gaer の組を Task と呼ぶ。 +- Data Gearの入出力関係が自然にTaskの依存関係を明確にする +- 依存関係のないCode Gearは自動で並列に実行される +- 並列実行はTaskをMeta Code Gear で記述されたWorker に投げることで行われる
message
-# 柔軟性 -- Gears OS は Meta Computation を使用することで - - データ拡張や機能の追加 - - GPU 等のさまざまなアーキテクチャでも同じプログラムの動作 -- Meta Computation は 通常の Computaiton と階層を分けて処理を行う +# Meta computationの柔軟性 +- Gears OS は Meta Computation を使用することで以下のことが可能になる + - 元の計算を保存したデータ拡張や機能の追加 + - GPU 等のさまざまなアーキテクチャでの動作 + - 並列処理や分散処理の細かいチューニングや信頼性の制御 +- Meta Computation は 通常の Computaiton の間に挟まれる
message @@ -54,21 +55,38 @@ # GPGPU - Gears OS のGPU処理実装は CUDA を用いて行う - CUDA とは NVIDIA が提供する並列コンピューティング用の統合開発環境 -- プログラムの記述から、コンパイラ、ライブラリ、GPUユニット などを提供している +- コンパイラ、ライブラリなどを提供している +- Task(kernel)は.ptxというGPU用のアセンブラに変換される +- プログラム内部から直接kernelを呼び出す構文を持つAPI +- メモリ転送とkernel呼び出しを自分で制御するDriverAPIの2種類がある + +# CPUWorker +- Worker thread で動くTAskスケジューラー +- synchronized queue からTaskのListを読み込み実行する +- Data Gear の待ち合わせの管理を行う +- CPUWorkerはreceive Task というAPIを持ち、Taskがなくなるまで繰り返す + +# CUDAWorker +- CPUWorkerを再利用して作成するTaskスケジューラー +- CUDAライブラリの初期化を行う +- 以下の動作はCUDAWorker と全く同じになる +- GPUへのデータ転送及びGPU側でのTaskの実行はTaskのMeta Code Gear で行う + +# CUDA 用のTask のMeta computation +- CUDAWorkerからTaskのstubとして呼び出される +- 計算に必要なData Gear をGPUに転送する +- GPUにCode Gearに対応するkernelを必要ならロードする +- 計算をGPU上で実行し、Output Data Gearをhost側に転送する + # CMake - ビルド自動化ツールでプログラムのコンパイルの際に必要な環境設定を自動で行う - 同時に一つのコンパイラしか扱えない -- CUDA専用コンパイラと Code Gear Data Gear をコンパイルを両立させるたるためにマクロを用いる事で同時にコンパイルさせることが出来た。 - -# CUDAWorker CUDATwice -- CUDAWorkerによってCUDAの起動する -- CUDA で行われる処理に必要な Task をまとめ、CUDATwiceに送る。 -- CUDAWorker から受け取った Task を元にGPU処理を行う。 -- GPU での処理は値を2倍ずつしていくプログラム -- GPU の処理を、処理の終了を待つ、処理の終了後 Worker に返す。 -- CUDATwiceから終了の受け取り、CUDAを終了させる。 +- add_custom_commandを使い手動でCUDAのコンパイラnvccを呼び出す +- CUDA専用コンパイラと Code Gear Data Gear をコンパイルを両立させるたるためにマクロを用いる # まとめ - Code Gear Data Gear を用いてCUDAを利用した並列処理プログラムを記述した。 -- CUDA専用のコンパイラの nvcc と Code Gear Data Gear のコンパイラをCMakeを用いる事で両立させた。 \ No newline at end of file +- CUDA専用のコンパイラの nvcc と Code Gear Data Gear のコンパイラをCMakeを用いる事で両立させた。 +- Gears OSでのGPUの基本的な実行を確認することができた +- 今後はMeta computation部分の自動生成、GPGPUのMeta computationによるチューニングなどを行う \ No newline at end of file