changeset 31:8793903e4a0d

Update
author Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp>
date Fri, 02 Feb 2018 04:14:20 +0900
parents 9fa82713bd5c
children ebcf093795f3
files paper/gpu.tex paper/master_paper.pdf paper/parallelism_gears.tex
diffstat 3 files changed, 12 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/paper/gpu.tex	Fri Feb 02 03:42:23 2018 +0900
+++ b/paper/gpu.tex	Fri Feb 02 04:14:20 2018 +0900
@@ -47,7 +47,7 @@
 受け取ったデータ並列用の Task は Code Gear のメタレベルで kernel の実行を行う。
 
 \section{CUDAExectuor}
-CUDAExectuor は \coderef{executorInterface} を実装しており、 Host から Device へのデータの送信、 kernel の実行、 Device から Host への データの書き出しを行う。
+CUDAExectuor は \coderef{executorInterface} を実装しており、 Host から Device へのデータの送信(read)、 kernel の実行(exec)、 Device から Host への データの書き出しを行う(write)。
 
 \lstinputlisting[caption=executor Inteface, label=code:executorInterface]{./src/executorInterface.h}
 
@@ -62,7 +62,7 @@
 この問題を解決するために、CUDABuffer という CUDA データ送信用の Data Gear を用意した.
 CUDABuffer には Data Gear の内部にポインタを持たない Data Gear まで展開した Input/Output Data Gear を格納される。
 Data Gear を CUDABuffer に格納する処理は CUDAExectuor では行わず、実行される Task の stub Code Gear で行われる。
-CUDABuffer に格納されている Data Gear のサイズを参照し、 cuMemAlloc 関数で Device のデータ領域を確保する。
+CUDABuffer に格納されている Data Gear のサイズを参照し、cuMemAlloc 関数で Device のデータ領域を確保する。
 
 Host、Device、CUDABuffer 間の関係を\figref{cudaDataArchitecture} に示す。
 
@@ -76,7 +76,9 @@
 
 Host から Device にデータをコピーするには cuMemcpyHtoD 関数を使用して行う。
 この際に Host で指定するデータは CUDABuffer に格納されている Data Gear となる。
+
 kernel の実行後、結果を Device から Host にコピーする際は cuMemcpyDtoH 関数で行われる。
+Host のコピーされたデータは Output Data Gear も含んでいるため、 コピー後は Output Data Gear への書き
 
 kernel の実行はcuLaunchKernel 関数で行われる。
 cuLaunchKernel 関数には引数として各次元のblockサイズ、thread サイズ、kernel への引数等を渡す。
@@ -87,8 +89,13 @@
 
 Gears OS ではデータ並列 Task の際は Iterator Interface を持っており、 そこで指定した長さ、次元数に応じて cuLaunchKernel の引数を決定する(\coderef{cuLaunchKernel} 11-18行目)。
 
+% 少ないけどコードはなるべく載せたくない(メタ部分 + 複雑)
 \section{stub Code Gear による kernel の実行}
 Gears OS では stub Code Gear で CUDA による実行の切り替える。
 
-stub Code Gear での切り替えの際は CUDABuffer への Data の格納、 実行される kernel の読み込みを行う。
-実際にGPU で実行される
+stub Code Gear での切り替えの際は CUDABuffer への Data の格納、実行される kernel の読み込みを行う。
+実際に GPU で実行されるプログラムは \coderef{cudaTwice} のように記述する。
+
+\lstinputlisting[caption=配列の要素を二倍にする例題, label=code:cudaTwice]{./src/cudaTwice.cu}
+
+stub Code Gear は通常はその stub に対応した Code Gear に継続するが、 CUDA で実行する際は CUDAExectuor の Code Gear に継続する。
Binary file paper/master_paper.pdf has changed
--- a/paper/parallelism_gears.tex	Fri Feb 02 03:42:23 2018 +0900
+++ b/paper/parallelism_gears.tex	Fri Feb 02 04:14:20 2018 +0900
@@ -8,8 +8,6 @@
 
 本章では、Gears OS の並列処理の構成、機能について説明する。
 
-\section{並列処理の構成}
-
 \section{Task}
 Gears OS では 並列実行する Task を Context で表現する。
 Context には Task 用の情報として、実行される Code Gear、Input/Output Data Gear の格納場所、待っている Input Data Gear のカウンタ等を持っている。
@@ -186,7 +184,7 @@
 この Queue にはその Data Gear を Input Data Gear として使用する Task(Context)が入っている。
 
 依存関係の解決の流れを\figref{dependency} に示す。
-Worker は Task の Code Gear を実行後、Output Data Gear の 書き出し処理を行う。
+Worker は Task の Code Gear を実行後、Output Data Gear の 書き出し処理(Commit)を行う。
 書き出し処理は Data Gear の Queue から、依存関係にある Task を参照する。
 参照した Task には実行に必要な Input Data Gear のカウンタをもっているので、そのカウンタのデクリメントを行う。
 カウンタが $0$ になったら Task が待っている Input Data Gear が揃ったことになるので、その Task を TaskManager 経由で 実行される Worker に送信する。