Mercurial > hg > Papers > 2017 > ikkun-thesis
changeset 9:7c79cd6dae0a
add
author | ikkun |
---|---|
date | Wed, 15 Feb 2017 23:42:26 +0900 |
parents | 5a6c8e4db581 |
children | 87e0b63676a4 |
files | paper/#main.tex# paper/.#main.tex paper/main_00.tex paper/pic/CG_ Flexibility.bb paper/pic/CG_ Flexibility.xbb paper/pic/CG_Flexibility.pdf paper/src/sample.c prepaper/dummy.tex prepaper/finalpre.aux prepaper/finalpre.dvi prepaper/finalpre.log prepaper/finalpre.pdf prepaper/finalpre.tex prepaper/pic/emblem-bitmap.pdf prepaper/pic/gearsosgpgpu.bb prepaper/pic/gearsosgpgpu.pdf prepaper/src/sample.c |
diffstat | 17 files changed, 992 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/#main.tex# Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,294 @@ +\documentclass[a4j,12pt]{jreport} +\usepackage[dvipdfmx]{graphicx} +\usepackage{mythesis} +\usepackage{multirow} +\usepackage{here} +\usepackage{url} +\usepackage{listings, jlisting} + +\lstset{ + language=java, + tabsize=2, + frame=single, + basicstyle={\ttfamily\footnotesize},% + identifierstyle={\footnotesize},% + commentstyle={\footnotesize\itshape},% + keywordstyle={\footnotesize\bfseries},% + ndkeywordstyle={\footnotesize},% + stringstyle={\footnotesize\ttfamily}, + breaklines=true, + captionpos=b, + columns=[l]{fullflexible},% + xrightmargin=0zw,% + xleftmargin=1zw,% + aboveskip=1zw, + numberstyle={\scriptsize},% + stepnumber=1, + numbersep=0.5zw,% + lineskip=-0.5ex, + numbers=left +} +\renewcommand{\lstlistingname}{Code} + +\setlength{\itemsep}{-1zh} + +\title{Code Gear Data Gear によるGPGPU処理実装} +%\title{Supporting NAT in Screen Sharing System TreeVNC} +\icon{ + \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842 +} +\year{平成27年度 卒業論文} +\belongto{琉球大学工学部情報工学科} +\author{135704C 東恩納 琢偉 \\ 指導教員 {河野 真治} } + +%% TreeVNC のNATへの対応 +%% マルチスクリーン TreeVNC +%% プリアンブルに記述 +%% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要 +%% +\makeatletter +\newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}} +\newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}} +\makeatother +\setlength\abovecaptionskip{0pt} + +\begin{document} +%%% \input{./future.tex} +% タイトル +\maketitle +\baselineskip 17pt plus 1pt minus 1pt + +\pagenumbering{roman} +\setcounter{page}{0} + +\tableofcontents % 目次 +\listoffigures % 図目次 +\listoftables % 表目次 + +%以下のように、章ごとに個別の tex ファイルを作成して、 +% main.tex をコンパイルして確認する。 +%章分けは個人で違うので下のフォーマットを参考にして下さい。 + +% はじめに + +\chapter{GearsOSでのGPU実行} +CPU の処理速度の向上のためクロック周波数の増加は発熱や消費電力の増大により難しくなっている。\\ +そのため、クロック周波数を上げる代わりに CPU のコア数を増やす傾向にある。 +マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。 +また、PC の処理性能を上げるためにマルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。 +並列処理を行う上でこれらのリソースを無視することができない。\\ +しかし、これらのプロセッサで性能を出すためにはこれらのアーキテクチャに合わせた並列プログラミングが必要になる。\\ +並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。\\ +そのためには並列処理を行うプログラムの依存関係を解決する必要がある。 + +本研究室で開発しているGears OS は Code Gear と Data Gear によって構成される。 +Code Gear は処理の単位、Data Gear はデータの単位となる。 +Gears OS では Code/Data Gear を用いて記述することでプログラム全体の並列度を高めて、効率的に並列処理することが可能になることを目的とする。\\ +また、Gears OS の実装自体が Code/Data Gear を用いたプログラミングの指針となるように実装する。\\ +Gears OS における Task は実行する Code Gear と実行に必要な Input Data Gear, 出力される Output Data Gear の組で表現される。 +Input/Output Data Gear によって依存関係が決定し、それに沿って並列実行する。\\ +依存関係の解決などの Meta Computation の実行は Meta Code Gear で行われる。 +Meta Code Gear は Code Gear に対応しており、 Code Gear が実行した後にそれに対応した Meta Code Gear が実行される。 +これらのことから、並列プログラミングで必要とされる GPU やマルチコア CPU をCPUと同等に扱うためには依存関係を明確に出来る Gears OS でCUDAによるGPU実装を行い、CbCによるGPU処理での有用性を発見することが本研究の目的である。 + +\label{chap:introduction} +\pagenumbering{arabic} + +%序論の目安としては1枚半ぐらい. +%英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも. +\chapter{GearsOS} + +\section{Continuation Based C} +Gears OS の実装は本研究室で開発している CbC(Continuation based C)\cite{cbc-lola}を用いて行われている。\\ +CbC は処理を Code Segment を用いて分割して記述することを基本としている。 +Gears OS の Code Gear はCbCを元に記述されている。 +CbC のプログラムでは C の関数の単位で Code Segment を用いて分割し、処理を記述している。\\ +Code Segment は C の関数と異なり戻り値を持たない。 +Code Segment の宣言は C の関数の構文と同様に行い、 型に \_\_code を使い宣言している。 +Code Segment から Code Segment への移動は goto の後に移動先の Code Segment 名と引数を並べた記述する構文を用いて行う。 +この goto による処理の遷移を継続と呼び、C での関数呼び出しにあたり、C では関数の引数の値がスタックに積まれていくが、Code Segment の goto では戻り値を持たないため、スタックに値を積んでいく必要がなくスタックを変更する必要がない。 +このようなスタックに積まない継続を軽量継続と呼び、呼び出し元の環境を持たない。 +図\ref{fig:cbc_goto} は Code Segment 間の接続関係を表している。 + +\begin{figure}[ht] + \begin{center} + \includegraphics[width=120mm]{./pic/cbc_goto.pdf} + \end{center} + \caption{gotoによる Code Segment 間の接続} + \label{fig:cbc_goto} +\end{figure} +\newpage +\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は様々な型を持つunionとして定義される。 + +Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることにある。 +これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。 +\lstinputlisting[label=code_Gear&Data_Gear, caption=code_Gear&Data_Gear]{src/sample.c} +\section{並列性} + +%Gearsの特性を活かせての並列性とは? +%Code Gear Data Gear にわけられることによって依存関係が解決されていること +%並列性と柔軟性は2つともSegment毎に分けられていることで成り立つわけだから、説明する際に2つでSegmentによって分けられるって事説明するのか?同じ事説明してるけど + +% 並列処理するの問題、並列化刷ることによって依存関係のあるプログラムがあると並列化出来ない、ということだけど、依存関係ってもっとわかりやすく言うとなに?->要するに、Aの処理を行うにはBの処理を施した値を使わないといけないとかそういうこと、逆に依存関係が無い処理は同時に並列処理していいわけだけど、ソレはつまりここでいう並列性とは、並列化し易いとかそういうことでいいんだろうか、 依存関係の無い形、Gearという分けられた単位にはほかとの依存関係は無い、わけではなくて、あるけど、 処理毎に分けることによって、依存している物を明確にしているって言うところが強みである。 +Code Gear が処理するのに必要な Input Data Gear と処理の実行後に出力される Output Data Gear の組を Task と呼び、Code Gear は接続する Task 以外とは依存関係がなく、1つの Code Gear の中で処理の依存関係が解決しているため、変更なしに並列処理の Thread に乗せることが出来る。 +%Code Gear を複数Threadに分けて並列処理刷る図を入れてもいいかも + +\newpage +\section{柔軟性} +%プログラムの処理が Gearという単位で分けられて記述されているって言うけど、プログラムの処理ってなに?という疑問を持つのが一般的だと思われ +Code Gear Data Gear はCbCを用いて記述されており、処理の遷移には goto を用いた軽量継続によって移行している。 +また Code Gear は C の関数と同じ単位で分割されており、処理の遷移に用いられている goto の遷移先を変更することで、容易に処理の順番を変更や新しい処理を追加することが出来る +図\ref{fig:CG_Flexibility}は Code Gear B の処理を Code Gear D を入れ替えたものであり、この入れ替えを行う場合 Code Gear B を指していた goto の先を Code Gear D に書き換えるだけで済む。 +\begin{figure}[ht] + \begin{center} + \includegraphics[width=120mm]{./pic/CG_Flexibility.pdf} + \end{center} + \caption{gotoによる Code Segment 間の接続} + \label{fig:cbc_goto} +\end{figure} + + +\newpage +%図で言うよりも goto の説明をしたほうがわかりやすいかも、gotoがどういったものでどういう事に使われているのか、これがわかればわかるのでは? +\section{Gears でのMeta computation の実行} +Gears OS では通常の処理を Computation、 Computation のための Computation を Meta Computation として扱う。 +例として、 Code Gear が次に実行する Code Gear を goto で名前指定する。 +この継続処理に対してMeta Code Gear が名前を解釈して、処理を対応する Code Gear に引き渡す。 +これらは、従来の OS の Dynamic Loading Library や Command 呼び出しに対応する。 +名前と Code Gear へのポインタの対応は Meta Data Gear に格納される。 +この Meta Data Gear を Context と呼ぶことにする。 +これは従来の OS の Process や Thread を表す構造体に対応する。 + +\chapter{Gears OSの構成} + +\section{TaskManager} +Gears OS の TaskManager は WaitTaskQueue に入っている Task の依存関係を解決する。 +Task には Input/Output Data Gear の情報が格納されている。 +Input Data Gear は Task に必要な Data Gear で揃ったら Task は実行可能な状態になる。 +Output Data Gear は Task が Persistent Data Tree に書き出す Data Gear である。 +この Input と Output の関係が依存関係となる。 +TaskManager は Persistent Data Tree を監視しており、WaitTaskQueue に入っている Task の Input Data Gear が揃っているのを確認したら実行可能な Task として AcitiveTaskQueue へ移動させる。 +\section{Worker} +Worker は TaskQueue から Task を取得し、実行する。 +Task には実行する Code Gear と実行に必要な Code Gear の key が格納されている。 +実行に必要な Code Gear は Persistent Data Tree から key を使って取得する。 + +各 Worker は個別の Context を参照しており、 メモリ空間も独立しているのでメモリを確保する処理で他の Thread を止めることはない。 +ただし、Persistent Data Tree への書き出しは競合する可能性があるので CAS を利用してデータの一貫性を保証する必要がある。 + +Worker が TaskQueue から Task の取得を行う Code Gear を Code \ref{src:sync_dequeue} に示す。 +Task Queue から取得した Task から実行する Code Gear と必要な Data Gear の key を Worker Context に書き込むことで実行される。 + +\lstinputlisting[label=src:sync_dequeue, caption=GetTask]{./src/sync_dequeue.c} + +Worker から取得された Task の Code Gear は並列実行される。 +並列実行される Code Gear と言っても他の Code Gear と同じである。 +これは Gears OS 自体が Code Gear によって構成されていることに起因する。 +つまり、 Gears OS を利用して書かれたプログラムで定義されている Code Gear に依存関係がないとき、全て並列に実行することができる。 + + +\chapter{GPGPU} + +\section{GPGPUとは} +GPGPU とは、元々は画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術の事である。\\ +画像の編集はピクセル毎に行われるため多大な数の処理を行う必要があるが、 GPU は CPU に比べコア数が多数あり、多数のコアで同時に計算することによって CPU よりも多数の並列な処理を行う事が出来る。\\ +これによってGPUは画像処理のような多大な処理を並列処理することで、 CPU で処理するよりも高速に並列処理することが出来る。 +しかし、GPU のコアはCPUのコアに比べ複雑な計算は出来ない構造であるため単純計算しか出来ない、また一般的にユーザーから GPU 単体に直接命令を書き込むことも出来ないなどの問題点も存在する。 +GPGPU は CPU によって単純計算のTaskを GPU に振り分ける事によって、 GPU の問題点を解決しつつ、高速な並列処理を行うことである。 +また Data Gear へのアクセスは接続された Code Gear からのみであるから、処理中に変数が書き変わる事がない。 +図\ref{fig:gpgpu}では以下の流れで処理が行われる。 +\begin{itemize} + \item Data Gear をPersistent Data Tree に挿入。 + \item TasMannagerで実行する Code Gear と実行に必要な Data Gear へのKeyを持つTas\ +k を生成。 + \item 生成したTaskをTaskQueueに挿入。 + \item Workerの起動。 + \item WorkerがTskQueueからTaskを取得。 + \item 取得した Task を元に必要なData Gear を Persistent Data Tree から取得。 + \item 並列処理される Code Gear を実行。 +\end{itemize} + +\begin{figure}[ht] + \centering + \includegraphics[width=120mm]{pic/gearsos.pdf} + \caption{Gears OS による GPGPU} + \label{fig:gpgpu} +\end{figure} +\newpage + + % CPUからGPUにTaskを振り分ける図があってもいい +\section{CUDAとは} +%CUDAの説明 +CUDA とは NVIDIA 社が提供している並列コンピューティング用の統合開発環境で、並列プログラムの記述や、コンパイラ、ライブラリなど、また GPU といった並列コンピューティングを行うのに必要なサポートを提供しており、一般的にも広く使われているGPUの開発環境です。 + +%helper_cuda.h cmakeは一つの言語のコンパイルしか出来ない、CbCはC言語としてコンパイル出来るが、C++の言語がCUDAのhelper_cuda.hなどには含まれる。 + +\chapter{GPU 実装} + +\section{CUDAWoker の実装} +%そもそも実装してない? +%実装したって言えるのはtwiceとかのCudaExsampleをGPUで動かすことが出来るってだけで、WorkerによってTaskManagmentしてるとは言えないのでは? + +\section{CUDATwiceの実装} + +\section{CMake} +CMake はビルド自動化ツールであり、プログラムをコンパイル行う際にライブラリや動作環境によって様々な設定を行う必要がありますが、 CMake にはそれらのファイルやライブラリを探し出して実行することが出来ます。\\ +CMake のビルドは2段階からなり、 CMake の制御ファイルの CMakeList.txt によってビルドするファイルを指定でき、指定されたファイルをビルドする際にはまずビルドに必要なライブラリやファイルを探し、通常のビルド環境用のビルドファイルを作成し、次にビルドするファイルにあったビルドを行います。 +CMake は Windows や Linux 等、複数のOS の環境に対応している他、様々なコンパイルオプションがあり、クロスコンパイルや、ユーザーがコンパイルのルールを追加することで特殊なコンパイラや OS にも対応することが出来る。 +\section{性能評価} + +\section{比較} + + +\chapter{今後の課題} +\section{GPU並列実行} + +% 今後の課題 + +\chapter{結論} + +\section{まとめ} + +\section{今後の課題} + + + +% 参考文献 +\def\line{−\hspace*{-.7zw}−} +\nocite{*} +\bibliographystyle{junsrt} +\bibliography{reference} + + +\chapter*{謝辞} +\thispagestyle{empty} + +%基本的な内容は以下の通り.参考にしてみて下さい. +%厳密な決まりは無いので,個々人の文体でも構わない. +%GISゼミや英語ゼミに参加した人はその分も入れておく. +%順番は重要なので気を付けるように.(提出前に周りの人に確認してもらう.) +\hspace{1zw}本研究の遂行,また本論文の作成にあたり、御多忙にも関わらず終始懇切なる\\ +御指導と御教授を賜わりました河野真治准教授に深く感謝致します。 + +最後に、有意義な時間を共に過ごした情報工学科の学友、並びに物心両面で支えてくれた両\\ +親に深く感謝致します。 + + +\begin{flushright} + 2017年 3月 \\ +\end{flushright} + +% 付録 + +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/.#main.tex Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,1 @@ +e135704@Higasionna-no-MacBook-Pro.local.44399 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/main_00.tex Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,259 @@ +\documentclass[a4j,12pt]{jreport} +\usepackage[dvipdfmx]{graphicx} +\usepackage{mythesis} +\usepackage{multirow} +\usepackage{here} +\usepackage{url} +\usepackage{listings, jlisting} + +\lstset{ + language=java, + tabsize=2, + frame=single, + basicstyle={\ttfamily\footnotesize},% + identifierstyle={\footnotesize},% + commentstyle={\footnotesize\itshape},% + keywordstyle={\footnotesize\bfseries},% + ndkeywordstyle={\footnotesize},% + stringstyle={\footnotesize\ttfamily}, + breaklines=true, + captionpos=b, + columns=[l]{fullflexible},% + xrightmargin=0zw,% + xleftmargin=1zw,% + aboveskip=1zw, + numberstyle={\scriptsize},% + stepnumber=1, + numbersep=0.5zw,% + lineskip=-0.5ex, + numbers=left +} +\renewcommand{\lstlistingname}{Code} + +\setlength{\itemsep}{-1zh} + +\title{Code Gear Data Gear によるGPGPU処理実装} +%\title{Supporting NAT in Screen Sharing System TreeVNC} +\icon{ + \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842 +} +\year{平成27年度 卒業論文} +\belongto{琉球大学工学部情報工学科} +\author{135704C 東恩納 琢偉 \\ 指導教員 {河野 真治} } + +%% TreeVNC のNATへの対応 +%% マルチスクリーン TreeVNC +%% プリアンブルに記述 +%% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要 +%% +\makeatletter +\newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}} +\newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}} +\makeatother +\setlength\abovecaptionskip{0pt} + +\begin{document} +%%% \input{./future.tex} +% タイトル +\maketitle +\baselineskip 17pt plus 1pt minus 1pt + +\pagenumbering{roman} +\setcounter{page}{0} + +\tableofcontents % 目次 +\listoffigures % 図目次 +\listoftables % 表目次 + +%以下のように、章ごとに個別の tex ファイルを作成して、 +% main.tex をコンパイルして確認する。 +%章分けは個人で違うので下のフォーマットを参考にして下さい。 + +% はじめに + +\chapter{GearsOSでのGPU実行} +CPU の処理速度の向上のためクロック周波数の増加は発熱や消費電力の増大により難しくなっている。\\ +そのため、クロック周波数を上げる代わりに CPU のコア数を増やす傾向にある。 +マルチコア CPU の性能を発揮するには、処理をできるだけ並列化しなければならない。 +また、PC の処理性能を上げるためにマルチコア CPU 以外にも GPU や CPU と GPU を複合したヘテロジニアスなプロセッサが登場している。 +並列処理を行う上でこれらのリソースを無視することができない。\\ +しかし、これらのプロセッサで性能を出すためにはこれらのアーキテクチャに合わせた並列プログラミングが必要になる。\\ +並列プログラミングフレームワークではこれらのプロセッサを抽象化し、CPU と同等に扱えるようにすることも求められる。\\ +そのためには並列処理を行うプログラムの依存関係を解決することや、 +%Gearsの強みは依存関係の解決以外に何がある? +本研究室で開発しているGears OS は Code Gear と Data Gear によって構成される。 +Code Gear は処理の単位、Data Gear はデータの単位となる。 +Gears OS では Code/Data Gear を用いて記述することでプログラム全体の並列度を高めて、効率的に並列処理することが可能になることを目的とする。\\ +また、Gears OS の実装自体が Code/Data Gear を用いたプログラミングの指針となるように実装する。\\ +Gears OS における Task は実行する Code Gear と実行に必要な Input Data Gear, 出力される Output Data Gear の組で表現される。 +Input/Output Data Gear によって依存関係が決定し、それに沿って並列実行する。\\ +依存関係の解決などの Meta Computation の実行は Meta Code Gear で行われる。 +Meta Code Gear は Code Gear に対応しており、 Code Gear が実行した後にそれに対応した Meta Code Gear が実行される。 +これらのことから、並列プログラミングで必要とされる GPU やマルチコア CPU をCPUと同等に扱うためには依存関係を明確に出来る Gears OS でCUDAによるGPU実装を行い、CbCによるGPU処理での有用性を発見することが本研究の目的である。 + +\label{chap:introduction} +\pagenumbering{arabic} + +%序論の目安としては1枚半ぐらい. +%英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも. +\chapter{GearsOS} + +\section{Continuation Baseed C} +Gears OS の実装は本研究室で開発している CbC(Continuation based C)\cite{cbc-lola}を用いて行う。\\ +CbC は処理を Code Segment を用いて記述することを基本としているため、 Gears OS の Code Gear を記述するのに適している。 +CbC のプログラムでは C の関数の代わりに Code Segment を用いてい処理を記述している。 + Code Segment は C の関数と異なり戻り値を持たない。 +Code Segment の宣言は C の関数の構文と同様に行い、 型に \_\_code を使うことで宣言できる。 +Code Segment から Code Segment への移動は goto の後に Code Segment 名と引数を並べた記述するという構文を用いて行う。 +この goto による処理の遷移を継続と呼ぶ。 図\ref{fig:cbc_goto} は Code Segment 間の継続関係を表している。 +C では関数呼び出しを行うたび、関数の引数の値がスタックに積まれていくが、Code Segment では戻り値を持たないため、スタックに値を積んでいく必要がなくスタックを変更する必要が無い。 +このようなスタックに値を積まない継続、つまり呼び出し元の環境を持たない継続を軽量継続と呼ぶ。 +軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。 +\begin{figure}[ht] + \begin{center} + \includegraphics[width=70mm]{./pic/cbc_goto.pdf} + \end{center} + \caption{gotoによる Code Segment 間の接続} + \label{fig:cbc_goto} +\end{figure} +\section{並列性} +%Gearsの特性を活かせての並列性とは? +%Code Gear Data Gear にわけられることによって依存関係が解決されていること +%並列性と柔軟性は2つともSegment毎に分けられていることで成り立つわけだから、説明する際に2つでSegmentによって分けられるって事説明するのか?同じ事説明してるけど + +% 並列処理するの問題、並列化刷ることによって依存関係のあるプログラムがあると並列化出来ない、ということだけど、依存関係ってもっとわかりやすく言うとなに?->要するに、Aの処理を行うにはBの処理を施した値を使わないといけないとかそういうこと、逆に依存関係が無い処理は同時に並列処理していいわけだけど、ソレはつまりここでいう並列性とは、並列化し易いとかそういうことでいいんだろうか、 依存関係の無い形、Gearという分けられた単位にはほかとの依存関係は無い、わけではなくて、あるけど、 処理毎に分けることによって、依存している物を明確にしているって言うところが強みである。 +Gears OS はCode Gear Data Gear によってプログラムを Gear という単位によって分けられ、Gear 毎に依存関係が明確化されている。そのため並列化を行う場合、並列処理を行う Gear の依存関係に沿って容易に並列化することが出来る。 +\section{柔軟性} +%プログラムの処理が Gearという単位で分けられて記述されているって言うけど、プログラムの処理ってなに?という疑問を持つのが一般的だと思われ +Code Gear Data Gear はCbCを用いて記述されており、その特徴としてプログラムの処理が Gear という単位で分けられて記述されていることである。\\ +また Gear の処理の遷移には goto を用いており、この goto 先を変更することで容易に処理の順番を変更、もしくは新しい処理を追加することが出来る。図\ref{fig:CG_Flexibility}は Code Gear C と Code Gear D を入れ替えたものであり、この入れ替えを行う場合 Code Gear C を指していた goto の先を Code Gear D に書き換えるだけで済む。 + +%図で言うよりも goto の説明をしたほうがわかりやすいかも、gotoがどういったものでどういう事に使われているのか、これがわかればわかるのでは? +\section{Gears でのMeta computation の実行} +Gears OS では通常の処理を Computation、 Computation のための Computation を Meta Computation として扱う。 +Meta Computation の例として並列処理の依存関係の解決や、 OS が行うネットワーク管理、メモリ管理等の資源制御などが挙げられる。 +Gears OS では Meta Computation を Meta Code Gear、 Meta Data Gear で表現する。 +Meta Code Gear は通常の Code Gear 直後に遷移され、 Meta Computation を実行する。 +Meta Computation の実行後は通常の Code Gear で指定した Code Gear を実行する。 +つまり Code Gear の実行後は何かしらの Meta Code Gear を実行する。 + +\chapter{Gears OSの構成} + + + +Code \ref{src:sync_enqueue} に CAS を使用した Task 挿入を示している。 +Code \ref{src:sync_enqueue} は 2つのCode Gear を定義しており、 putQueue3 は Queue に要素がある場合、 putQueue4 は Queue に要素がない場合の Task 挿入を示している。 + +\lstinputlisting[label=src:sync_enqueue, caption=Enqueue]{./src/sync_enqueue.c} + +\section{TaskManager} +Gears OS の TaskManager は WaitTaskQueue に入っている Task の依存関係を解決する。 +Task には Input/Output Data Gear の情報が格納されている。 +Input Data Gear は Task に必要な Data Gear で揃ったら Task は実行可能な状態になる。 +Output Data Gear は Task が Persistent Data Tree に書き出す Data Gear である。 +この Input と Output の関係が依存関係となる。 +TaskManager は Persistent Data Tree を監視しており、WaitTaskQueue に入っている Task の Input Data Gear が揃っているのを確認したら実行可能な Task として AcitiveTaskQueue へ移動させる。 +\section{Worker} +Worker は TaskQueue から Task を取得し、実行する。 +Task には実行する Code Gear と実行に必要な Code Gear の key が格納されている。 +実行に必要な Code Gear は Persistent Data Tree から key を使って取得する。 + +各 Worker は個別の Context を参照しており、 メモリ空間も独立しているのでメモリを確保する処理で他の Thread を止めることはない。 +ただし、Persistent Data Tree への書き出しは競合する可能性があるので CAS を利用してデータの一貫性を保証する必要がある。 + +Worker が TaskQueue から Task の取得を行う Code Gear を Code \ref{src:sync_dequeue} に示す。 +Task Queue から取得した Task から実行する Code Gear と必要な Data Gear の key を Worker Context に書き込むことで実行される。 + +\lstinputlisting[label=src:sync_dequeue, caption=GetTask]{./src/sync_dequeue.c} + +Worker から取得された Task の Code Gear は並列実行される。 +並列実行される Code Gear と言っても他の Code Gear と同じである。 +これは Gears OS 自体が Code Gear によって構成されていることに起因する。 +つまり、 Gears OS を利用して書かれたプログラムで定義されている Code Gear に依存関係がないとき、全て並列に実行することができる。 + + +\chapter{GPGPU} + +\section{GPGPUとは} +GPGPU とは、元々は画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術の事である。\\ +画像の編集はピクセル毎に行われるため多大な数の処理を行う必要があるが、 GPU は CPU に比べコア数が多数あり、多数のコアで同時に計算することによって CPU よりも多数の並列な処理を行う事が出来る。\\ +これによってGPUは画像処理のような多大な処理を並列処理することで、 CPU で処理するよりも高速に並列処理することが出来る。 +しかし、GPU のコアはCPUのコアに比べ複雑な計算は出来ない構造であるため単純計算しか出来ない、また一般的にユーザーから GPU 単体に直接命令を書き込むことも出来ないなどの問題点も存在する。 +GPGPU は CPU によって単純計算のTaskを GPU に振り分ける事によって、 GPU の問題点を解決しつつ、高速な並列処理を行うことである。 +また Data Gear へのアクセスは接続された Code Gear からのみであるから、処理中に変数が書き変わる事がない。 +図\ref{fig:gpgpu}では以下の流れで処理が行われる。 +\begin{itemize} + \item Data Gear をPersistent Data Tree に挿入。 + \item TasMannagerで実行する Code Gear と実行に必要な Data Gear へのKeyを持つTas\ +k を生成。 + \item 生成したTaskをTaskQueueに挿入。 + \item Workerの起動。 + \item WorkerがTskQueueからTaskを取得。 + \item 取得した Task を元に必要なData Gear を Persistent Data Tree から取得。 + \item 並列処理される Code Gear を実行。 +\end{itemize} + +\begin{figure}[ht] + \centering + \includegraphics[width=90mm]{pic/gearsos.pdf} + \caption{Gears OS による GPGPU} + \label{fig:gpgpu} +\end{figure} +\newpage + + % CPUからGPUにTaskを振り分ける図があってもいい +\section{CUDAでの実行} +%CUDAの説明 +CUDA とは NVIDIA が提供している並列コンピューティングアーキテクチャで +%helper_cuda.h cmakeは一つの言語のコンパイルしか出来ない、CbCはC言語としてコンパイル出来るが、C++の言語がCUDAのhelper_cuda.hなどには含まれる。 + +\chapter{GPU 実装} + +\section{GPUWoker の実装} +%そもそも実装してない? +%実装したって言えるのはtwiceとかのCudaExsampleをGPUで動かすことが出来るってだけで、WorkerによってTaskManagmentしてるとは言えないのでは? + +\section{CUDATwiceの実装} + +\section{CMake} + +\section{性能評価} + +\section{比較} + + +\chapter{今後の課題} +\section{GPU並列実行} + +% 今後の課題 + +\chapter{結論} + +\section{まとめ} + +\section{今後の課題} + + + +% 参考文献 +\def\line{−\hspace*{-.7zw}−} +\nocite{*} +\bibliographystyle{junsrt} +\bibliography{reference} + + +\chapter*{謝辞} +\thispagestyle{empty} + +%基本的な内容は以下の通り.参考にしてみて下さい. +%厳密な決まりは無いので,個々人の文体でも構わない. +%GISゼミや英語ゼミに参加した人はその分も入れておく. +%順番は重要なので気を付けるように.(提出前に周りの人に確認してもらう.) + +\begin{flushright} + 2017年 3月 \\ +\end{flushright} + +% 付録 + +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/pic/CG_ Flexibility.bb Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,5 @@ +%%Title: ./pic/CG_ Flexibility.pdf +%%Creator: extractbb 20150315 +%%BoundingBox: 0 0 389 251 +%%CreationDate: Wed Feb 15 09:24:23 2017 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/pic/CG_ Flexibility.xbb Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,8 @@ +%%Title: ./pic/CG_ Flexibility.pdf +%%Creator: extractbb 20150315 +%%BoundingBox: 0 0 389 251 +%%HiResBoundingBox: 0.000000 0.000000 389.000000 251.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Wed Feb 15 09:25:57 2017 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/src/sample.c Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,11 @@ +// Code Gear +__code code1(struct Allocate* allocate) { + allocate->size = sizeof(struct Data1); + + goto allocator(allocate, Code2); +} + +// Code Gear +__code code2(struct Data1* data1) { + // processing +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prepaper/dummy.tex Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,60 @@ +%%% jdummy.def +% +\DeclareRelationFont{JY1}{mc}{it}{}{OT1}{cmr}{it}{} +\DeclareRelationFont{JT1}{mc}{it}{}{OT1}{cmr}{it}{} +\DeclareFontShape{JY1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{mc}{sl}{}{OT1}{cmr}{sl}{} +\DeclareRelationFont{JT1}{mc}{sl}{}{OT1}{cmr}{sl}{} +\DeclareFontShape{JY1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{sl}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{mc}{sc}{}{OT1}{cmr}{sc}{} +\DeclareRelationFont{JT1}{mc}{sc}{}{OT1}{cmr}{sc}{} +\DeclareFontShape{JY1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*min + <10.95><12><14.4><17.28><20.74><24.88> min10 + <-> min10}{} +\DeclareFontShape{JT1}{mc}{m}{sc}{<5> <6> <7> <8> <9> <10> sgen*tmin + <10.95><12><14.4><17.28><20.74><24.88> tmin10 + <-> tmin10}{} +\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmbx}{it}{} +\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmbx}{it}{} +\DeclareFontShape{JY1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{sl}{}{OT1}{cmbx}{sl}{} +\DeclareRelationFont{JT1}{gt}{sl}{}{OT1}{cmbx}{sl}{} +\DeclareFontShape{JY1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{sl}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{sc}{}{OT1}{cmbx}{sc}{} +\DeclareRelationFont{JT1}{gt}{sc}{}{OT1}{cmbx}{sc}{} +\DeclareFontShape{JY1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{mc}{bx}{sc}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\DeclareRelationFont{JY1}{gt}{it}{}{OT1}{cmr}{it}{} +\DeclareRelationFont{JT1}{gt}{it}{}{OT1}{cmr}{it}{} +\DeclareFontShape{JY1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*goth + <10.95><12><14.4><17.28><20.74><24.88> goth10 + <-> goth10}{} +\DeclareFontShape{JT1}{gt}{m}{it}{<5> <6> <7> <8> <9> <10> sgen*tgoth + <10.95><12><14.4><17.28><20.74><24.88> tgoth10 + <-> tgoth10}{} +\endinput +%%%% end of jdummy.def
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prepaper/finalpre.aux Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,18 @@ +\relax +\bibcite{cerium}{1} +\@writefile{toc}{\contentsline {section}{\numberline {1}Gears OS}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {2}Code Gear と Data Gear}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {3}GPGPUとは}{1}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Gears OS による GPGPU}}{1}} +\newlabel{fig:gpgpu}{{1}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {4}CUDAWoker の実装}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {5}CUDATwiceの実装}{1}} +\bibcite{alice}{2} +\bibcite{gears}{3} +\bibcite{segment}{4} +\bibcite{monad}{5} +\bibcite{cbc-llvm}{6} +\bibcite{opencl}{7} +\bibcite{cuda}{8} +\@writefile{toc}{\contentsline {section}{\numberline {6}CMakeによるコンパイル}{2}} +\@writefile{toc}{\contentsline {section}{\numberline {7}今後の課題}{2}}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prepaper/finalpre.log Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,213 @@ +This is e-pTeX, Version 3.14159265-p3.6-141210-2.6 (utf8.euc) (TeX Live 2015) (preloaded format=platex 2015.11.28) 15 FEB 2017 22:21 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**finalpre.tex +(./finalpre.tex +pLaTeX2e <2006/11/10> (based on LaTeX2e <2015/01/01> patch level 0) +Babel <3.9l> and hyphenation patterns for 79 languages loaded. +(/usr/local/texlive/2015/texmf-dist/tex/platex/base/jarticle.cls +Document Class: jarticle 2006/06/27 v1.6 Standard pLaTeX class +\c@@paper=\count81 +(/usr/local/texlive/2015/texmf-dist/tex/platex/base/jsize10.clo +File: jsize10.clo 2006/06/27 v1.6 Standard pLaTeX file (size option) +) +\c@part=\count82 +\c@section=\count83 +\c@subsection=\count84 +\c@subsubsection=\count85 +\c@paragraph=\count86 +\c@subparagraph=\count87 +\c@figure=\count88 +\c@table=\count89 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\symmincho=\mathgroup4 +LaTeX Font Info: Overwriting symbol font `mincho' in version `bold' +(Font) JY1/mc/m/n --> JY1/gt/m/n on input line 601. +\toclineskip=\dimen118 +\@lnumwidth=\dimen119 +\bibindent=\dimen120 +\heisei=\count90 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 2014/10/28 v1.15 key=value parser (DPC) +\KV@toks@=\toks15 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2014/10/28 v1.0p Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/texlive/2015/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/graphics.cfg +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live +) +Package graphics Info: Driver file: dvipdfmx.def on input line 94. + +(/usr/local/texlive/2015/texmf-dist/tex/latex/dvipdfmx-def/dvipdfmx.def +File: dvipdfmx.def 2015/03/26 v4.04 LaTeX color/graphics driver for dvipdfmx (T +eX Live/ChoF) +)) +\Gin@req@height=\dimen121 +\Gin@req@width=\dimen122 +) +(./picins.sty Option `picins' Version 3.0 Sep. 1992, TH Darmstadt/HRZ +\@BILD=\box41 +\@TEXT=\box42 +\d@breite=\dimen123 +\d@hoehe=\dimen124 +\d@xoff=\dimen125 +\d@yoff=\dimen126 +\d@shad=\dimen127 +\d@dash=\dimen128 +\d@boxl=\dimen129 +\d@pichskip=\dimen130 +\d@tmp=\dimen131 +\d@tmpa=\dimen132 +\d@bskip=\dimen133 +\hsiz@=\dimen134 +\p@getot@l=\dimen135 +\c@breite=\count91 +\c@hoehe=\count92 +\c@xoff=\count93 +\c@yoff=\count94 +\c@pos=\count95 +\c@shad=\count96 +\c@dash=\count97 +\c@boxl=\count98 +\c@zeilen=\count99 +\@changemode=\count100 +\c@piccaption=\count101 +\c@piccaptionpos=\count102 +\c@picpos=\count103 +\c@whole=\count104 +\c@half=\count105 +\c@tmp=\count106 +\c@tmpa=\count107 +\c@tmpb=\count108 +\c@tmpc=\count109 +\c@tmpd=\count110 +\d@leftskip=\skip43 +\ptoti=\dimen136 +\ptotii=\dimen137 +\env@box=\box43 +\d@envdp=\dimen138 +\c@hsize=\count111 +\c@envdp=\count112 +\d@envb=\dimen139 +) +(/usr/local/texlive/2015/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +\fancy@headwidth=\skip44 +\f@ncyO@elh=\skip45 +\f@ncyO@erh=\skip46 +\f@ncyO@olh=\skip47 +\f@ncyO@orh=\skip48 +\f@ncyO@elf=\skip49 +\f@ncyO@erf=\skip50 +\f@ncyO@olf=\skip51 +\f@ncyO@orf=\skip52 +) +(./dummy.tex) + +LaTeX Warning: Unused global option(s): + [9.5pt]. + +(./finalpre.aux) +\openout1 = `finalpre.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 21. +LaTeX Font Info: ... okay on input line 21. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <12> on input line 29. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 29. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 29. + + +! LaTeX Error: Environment 英語abst undefined. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.29 \end{英語abst}] + +? + +! LaTeX Error: \begin{document} ended by \end{英語abst}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.29 \end{英語abst}] + +? +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 32. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 32. +! Undefined control sequence. +l.48 \lstinputlisting + [label=CGDG, caption=CGDG]{src/sample.c} +? +File: pic/gearsosgpgpu.pdf Graphic file (type pdf) +<pic/gearsosgpgpu.pdf> +Overfull \hbox (3.57736pt too wide) in paragraph at lines 59--60 + [][] + [] + +File: pic/emblem-bitmap.pdf Graphic file (type pdf) +<pic/emblem-bitmap.pdf> + +Package Fancyhdr Warning: \headheight is too small (0.0pt): + Make it at least 14.37784pt. + We now make it that large for the rest of the document. + This may cause the page layout to be inconsistent, however. + +[1 + + +] +Underfull \hbox (badness 4217) in paragraph at lines 95--98 +[]\JY1/mc/m/n/10 徳森海斗 , 河野真治 : \OT1/cmr/m/n/10 Con-tin-u-a-tion based + C \JY1/mc/m/n/10 の + [] + + +Overfull \hbox (31.36427pt too wide) in paragraph at lines 103--104 +[]\OT1/cmr/m/n/10 : CUDA, https://developer.nvidia.com/category/zone/cuda- + [] + +[2 + +] (./finalpre.aux) ) +Here is how much of TeX's memory you used: + 908 strings out of 493777 + 10381 string characters out of 6151333 + 73731 words of memory out of 5000000 + 4434 multiletter control sequences out of 15000+600000 + 13447 words of font info for 52 fonts, out of 8000000 for 9000 + 929 hyphenation exceptions out of 8191 + 25i,15n,43p,253b,453s stack positions out of 5000i,500n,10000p,200000b,80000s + +Output written on finalpre.dvi (2 pages, 7976 bytes).
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prepaper/finalpre.tex Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,107 @@ +\documentclass[twocolumn,twoside,9.5pt]{jarticle} +\usepackage[dvipdfmx]{graphicx} +\usepackage{picins} +\usepackage{fancyhdr} +%\pagestyle{fancy} +\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 卒業研究発表会} +\rhead{} +\cfoot{} + +\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}} +\setlength{\headheight}{0mm} +\setlength{\headsep}{5mm} +\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}} +\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}} +\setlength{\textwidth}{181mm} +\setlength{\textheight}{261mm} +\setlength{\footskip}{0mm} +\pagestyle{empty} + +\input{dummy.tex} +\begin{document} +\title{Code Gear Data Gear によるGPGPU処理実装} +\author{135704C 氏名 {東恩納}{琢偉} 指導教員 : 河野 真治} +\date{} +\twocolumn [ +\maketitle +\begin{英語abst} + +\end{英語abst}] +\thispagestyle{fancy} + +\section{Gears OS} +Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear +に細かく分割する。 +接続する Gear を変更することでプログラムの振る舞いを変更することを可能 +にする柔軟性、メタ計算による並行制御,モデル検査を用いた信頼性の確保を目的とする。 +本研究では現状のGears OS の GPGPU サポートを行う。 +\section{Code Gear と Data Gear} +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は様々な型を持つunionとして定義される。 +Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることにある。 +これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。 + +\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 は Task を queue から受け取り、 thread を作成する。\\ +その後 Task を まとめて CUDATask としてCUDAに送る。CUDAのさらに CUDATwice の処理が終わるまで sleep で待機し、CUDATwiceから Task を受け取る。 + +\section{CUDATwiceの実装} +CUDATwice +\section{CMakeによるコンパイル} + +\section{今後の課題} + +\begin{thebibliography}{10} + \bibitem{cerium} + 宮國 渡,河野真治,神里 晃,杉山千秋:Cell 用の Fine-grain Task Manager + の実装,情報処理学会 + システムソフトウェアとオペレーティング・システム研究会(OS) (2008). + + \bibitem{alice} + 赤嶺一樹,河野真治:DataSegment API + を用いた分散フレームワークの設計,日本ソフトウェア科学会第28回大会論文集 + (2011). + + \bibitem{gears} + 伊波 立樹, 東恩納 琢偉,河野 真治:Code Gear、Data Gear に基づく OS のプロトタイプ、 + 情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS) (2016). + + \bibitem{segment} + 河野真治,杉本 優:Code Segment と Data Segment + によるプログラミング手法,第54回プログラミング・シンポジウム (2013). + + \bibitem{monad} + Eugenio Moggi, Notion of Computation and Monads(1991) + + \bibitem{cbc-llvm} + 徳森海斗,河野真治:Continuation based C の LLVM/clang 3.5 + 上の実装について,情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS) + (2014). + + \bibitem{opencl} + {Aaftab Munshi, Khronos OpenCL Working Group}: {\em {The OpenCL Specification Version 1.0}} (2007). + + \bibitem{cuda} + : {CUDA}, {https://developer.nvidia.com/category/zone/cuda-zone/}. + +\end{thebibliography} +\end{document}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prepaper/pic/gearsosgpgpu.bb Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,5 @@ +%%Title: gearsosgpgpu.pdf +%%Creator: extractbb 20150315 +%%BoundingBox: 0 0 1156 1375 +%%CreationDate: Wed Feb 15 21:47:15 2017 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prepaper/src/sample.c Wed Feb 15 23:42:26 2017 +0900 @@ -0,0 +1,11 @@ +// Code Gear +__code code1(struct Allocate* allocate) { + allocate->size = sizeof(struct Data1); + + goto allocator(allocate, Code2); +} + +// Code Gear +__code code2(struct Data1* data1) { + // processing +}