# HG changeset patch # User ikkun # Date 1487169402 -32400 # Node ID 5a6c8e4db5818dfce9e4ac9a2d164666117c28c2 # Parent 677bd89014b18a407524930e42a23ead0e4a2425 add worker diff -r 677bd89014b1 -r 5a6c8e4db581 prepaper/finalPre.tex~ --- a/prepaper/finalPre.tex~ Wed Feb 15 21:55:15 2017 +0900 +++ b/prepaper/finalPre.tex~ Wed Feb 15 23:36:42 2017 +0900 @@ -30,79 +30,43 @@ \thispagestyle{fancy} \section{Gears OS} -Code Segment は使用する Input Data Segment, Output Data Segment を指定することで処理とデータの依存関係を解決する。 Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear に細かく分割する。 -Gearで表現される計算はメタ計算により実行される。例えば、 -従来の OS が行う排他制御、メモリ管理、並列実行などは Meta Computation に相当する。 接続する Gear を変更することでプログラムの振る舞いを変更することを可能 にする柔軟性、メタ計算による並行制御,モデル検査を用いた信頼性の確保を目的とする。 -本研究では現状のGears OS のマルチCPUサポートに加えてGPGPUサポートを行 -う。 -GPGPUはCUDAまたはOpeCLで制御される。Gears OSからCide Gear Data Gearを -これらに正しく渡す必要がある。 - -Gears OS上のTaskはRed Black Tree上に格納される。rb\_treeはCbCで記述さ -れており、木をたどるためのStackを一つ持つ。 -アルゴリズム全体はCode Gearの有向グラフで表される。実際にこの有向グラ -フを作成した。これは一種のフローチャートになっている。木とStackに格納 -されるのはData Gearである。この木を用いて GPGPUを実行するエンジンに -Taskを渡す。 - - +本研究では現状のGears OS の GPGPU サポートを行う。 \section{Code Gear と Data Gear} -Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda} の kernel に相当する。 - Code Gear は処理の基本として、 Input Data Gear を参照し、一つまたは複数の Output Data Gear に書き込む。また、接続された Data Gear 以外には参照を行わない。 Input Data Gear と Output Data Gear の2つによって、Code Gear の Data に対す る依存関係を解決し、 Code Gear の並列実行を可能とする。 Code Gear はCbCを元に記述されており、処理の移行はfunction callではないので、呼び出し元に戻る概念はない。 その代わりに、次に実行する Code Gear を軽量継続の goto で指定する。 -Data Gear は、int や文字列などの Primitive Data Type の組み合わせ(struct)\ -である。 +Data Gear は、int や文字列などの Primitive Data Type の組み合わせ(struct)である。 Data Gearは様々な型を持つunionとして定義される。 Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることにある。 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。 -\lstinputlisting[label=code_Gear&Data_Gear, caption=code_Gear&Data_Gear]{sr -c/sample.c} -\section{Context} -ある Code Gear は次に実行する Code Gear を名前で指定する。これを継続と -いう。 -Meta Code Gear が名前を解釈して、処理を対応する Code Gear に引き渡す。 -これらは、従来の OS の Dynamic Loading Library や Command 呼び出しに対応する。 -名前と Code Gear へのポインタの対応は Meta Data Gear に格納される。 -この Meta Data Gear を Context と呼ぶことにする。 -これは従来の OS の Process や Thread を表す構造体に対応する。 +\lstinputlisting[label=CGDG, caption=CGDG]{src/sample.c} -Context には以下のようなものが格納される。 -\begin{itemize} - \item Code Gear の名前とポインタの対応表 - \item Data Gear の Allocation 用の情報 - \item Code Gear が参照する Data Gear へのポインタ - \item Data Gear に格納される Data Type の情報 -\end{itemize} - -\section{GPGPU} - GPGPUとは画像処理に使われるGPUを画像処理以外で利用する技術である。 -GPUはCPUに比べコア数が圧倒的に多く、単純な計算しかできないが並列処理において一度に大量の計算ができるため利用されている。 -Gears OS は Code Gear に分割され処理の依存関係が明確になるので、並列な処理を書きやすい。またData Gear へのアクセスは接続されたCode Gear からのみであるから、処理中に変数が書き変わる事がない。 -図\ref{fig:gpgpu}では以下の流れで処理が行われる。 -\begin{itemize} - \item Data Gear をPersistent Data Tree に挿入。 - \item TasMannagerで実行する Code Gear と実行に必要な Data Gear へのKeyを持つTask を生成。 - \item 生成したTaskをTaskQueueに挿入。 - \item Workerの起動。 - \item WorkerがTskQueueからTaskを取得。 - \item 取得した Task を元に必要なData Gear を Persistent Data Tree から取得。 - \item 並列処理される Code Gear を実行。 -\end{itemize} - +\section{GPGPUとは} +GPGPU とは、元々は画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術の事である。\\ +画像の編集はピクセル毎に行われるため多大な数の処理を行う必要があるが、 GPU は CPU に比べコア数が多数あり、多数のコアで同時に計算することによって CPU よりも多数の並列な処理を行う事が出来る。\\ +これによってGPUは画像処理のような多大な処理を並列処理することで、 CPU で処理するよりも高速に並列処理することが出来る。 +しかし、GPU のコアはCPUのコアに比べ複雑な計算は出来ない構造であるため単純計算しか出来ない、また一般的にユーザーから GPU 単体に直接命令を書き込むことも出来ないなどの問題点も存在する。 +GPGPU は CPU によって単純計算のTaskを GPU に振り分ける事によって、 GPU の問題点を解決しつつ、高速な並列処理を行うことである。 +また Data Gear へのアクセスは接続された Code Gear からのみであるから、処理中に変数が書き変わる事がない。 \begin{figure}[ht] \centering \includegraphics[width=90mm]{pic/gearsosgpgpu.pdf} \caption{Gears OS による GPGPU} \label{fig:gpgpu} \end{figure} + +\section{CUDAWoker の実装} +CUDAWorker CPUでは Task を queue から受け取り GPU 側で処理する CUDATwice に Task を渡す。さらに CUDATwice の処理が終わるまで sleep で待機し、CUDATwiceから Task を受け取る。 +\section{CUDATwiceの実装} +CUDATwice +\section{CMakeによるコンパイル} + \section{今後の課題} \begin{thebibliography}{10}