# HG changeset patch # User ikkun # Date 1492777439 -32400 # Node ID 6cd7ad437a85bc571650c74fac0d401ae4c0ca15 # Parent dc651be5dd346750cfcae3675a2207f3ea7e784a fix diff -r dc651be5dd34 -r 6cd7ad437a85 paper/pic/cbc_goto.graffle --- a/paper/pic/cbc_goto.graffle Fri Apr 21 16:25:33 2017 +0900 +++ b/paper/pic/cbc_goto.graffle Fri Apr 21 21:23:59 2017 +0900 @@ -6,21 +6,26 @@ 0 ApplicationVersion - com.omnigroup.OmniGraffle6 - 167.2.0.244490 + com.omnigroup.OmniGraffle + 139.18.0.187838 AutoAdjust BackgroundGraphic Bounds - {{0, 0}, {558.99997329711914, 783}} + {{0, 0}, {559.00000476837158, 783}} Class SolidGraphic ID 2 Style + shadow + + Draws + NO + stroke Draws @@ -41,9 +46,9 @@ Creator Nobuyasu Oshiro DisplayScale - 1 in = 1.00000 in + 1 0/72 in = 1.0000 in GraphDocumentVersion - 12 + 8 GraphicsList @@ -72,6 +77,8 @@ {0.29393801000000003, 0.54304397000000004} {-0.28623198999999999, 0.55380397999999997} + Shape + Rectangle Style fill @@ -93,14 +100,14 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc \f0\fs24 \cf0 goto} VerticalPad - 0.0 + 0 @@ -129,6 +136,8 @@ {0.29393801000000003, 0.54304397000000004} {-0.28623198999999999, 0.55380397999999997} + Shape + Rectangle Style fill @@ -150,14 +159,14 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc \f0\fs24 \cf0 goto} VerticalPad - 0.0 + 0 @@ -186,6 +195,8 @@ {0.29393801000000003, 0.54304397000000004} {-0.28623198999999999, 0.55380397999999997} + Shape + Rectangle Style fill @@ -207,14 +218,14 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc \f0\fs24 \cf0 goto} VerticalPad - 0.0 + 0 @@ -243,6 +254,8 @@ {0.29393801000000003, 0.54304397000000004} {-0.28623198999999999, 0.55380397999999997} + Shape + Rectangle Style fill @@ -264,14 +277,14 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc \f0\fs24 \cf0 goto} VerticalPad - 0.0 + 0 @@ -288,11 +301,6 @@ Style - shadow - - Draws - NO - stroke HeadArrow @@ -334,6 +342,8 @@ {0.29393801000000003, 0.54304397000000004} {-0.28623198999999999, 0.55380397999999997} + Shape + Rectangle Style fill @@ -355,14 +365,14 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc \f0\fs24 \cf0 goto} VerticalPad - 0.0 + 0 @@ -391,6 +401,8 @@ {0.29393801000000003, 0.54304397000000004} {-0.28623198999999999, 0.55380397999999997} + Shape + Rectangle Style fill @@ -412,14 +424,14 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc \f0\fs24 \cf0 goto} VerticalPad - 0.0 + 0 @@ -437,15 +449,10 @@ Points {97, 144.03550999999999} - {146.49998746293761, 144.0150711098278} + {146.49998746981748, 144.01507110982496} Style - shadow - - Draws - NO - stroke HeadArrow @@ -473,16 +480,11 @@ 11 Points - {307.06832644961662, 99.005708590904717} - {348.41386755785959, 126.00973315833174} + {307.07260140295762, 99.00200334213541} + {348.42454861454166, 126.00046754315537} Style - shadow - - Draws - NO - stroke HeadArrow @@ -513,16 +515,11 @@ 38 Points - {307.26186045457405, 188.16336426740673} - {348.23813954515032, 161.83663573235037} + {307.26186046751104, 188.16336425919599} + {348.23813953244513, 161.83663574076365} Style - shadow - - Draws - NO - stroke HeadArrow @@ -553,16 +550,11 @@ 37 Points - {210.76185637532367, 161.83663311602177} - {251.73814361460188, 188.16336689285151} + {210.76185637577717, 161.83663311261844} + {251.73814362257147, 188.16336688882382} Style - shadow - - Draws - NO - stroke HeadArrow @@ -593,16 +585,11 @@ 8 Points - {210.56036004631343, 125.98738390291257} - {251.89396917594394, 98.972989609515338} + {210.57133047117668, 125.99688865401365} + {251.92135789280141, 98.996771680720286} Style - shadow - - Draws - NO - stroke HeadArrow @@ -633,17 +620,12 @@ 36 Points - {293.55569627859614, 106.37834050302079} + {293.5556962717904, 106.37834049073271} {315.5, 146} - {294.53436892560063, 180.94271845733229} + {294.53436892191536, 180.94271846347439} Style - shadow - - Draws - NO - stroke HeadArrow @@ -674,17 +656,12 @@ 35 Points - {263.99039783562887, 181.10804590903402} + {263.99039783812128, 181.10804591303423} {239, 141} - {262.95578718585557, 105.50994490984354} + {262.95578717906915, 105.50994491989755} Style - shadow - - Draws - NO - stroke HeadArrow @@ -723,15 +700,16 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc -\f0\fs24 \cf0 code segment\ +\f0\fs24 \cf0 code \ +Gear\ D} VerticalPad - 0.0 + 0 @@ -754,15 +732,16 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc -\f0\fs24 \cf0 code segment\ +\f0\fs24 \cf0 code\ +Gear\ C} VerticalPad - 0.0 + 0 @@ -785,14 +764,15 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc -\f0\fs24 \cf0 code segment A} +\f0\fs24 \cf0 code\ +Gear A} VerticalPad - 0.0 + 0 @@ -815,15 +795,16 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc -\f0\fs24 \cf0 code segment\ +\f0\fs24 \cf0 code\ +Gear\ B} VerticalPad - 0.0 + 0 @@ -852,6 +833,8 @@ {0.29393801000000003, 0.54304397000000004} {-0.28623198999999999, 0.55380397999999997} + Shape + Rectangle Style fill @@ -873,14 +856,14 @@ Text Text - {\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170 -{\fonttbl\f0\fswiss\fcharset0 Helvetica;} + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf470 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc \f0\fs24 \cf0 goto} VerticalPad - 0.0 + 0 @@ -933,9 +916,9 @@ MasterSheets ModificationDate - 2015-10-27 21:38:00 +0000 + 2017-04-21 10:50:50 +0000 Modifier - Tatsuki IHA + いっくん NotesVisible NO Orientation @@ -964,7 +947,7 @@ NSPaperSize size - {594.99997329711914, 842} + {595.00000476837158, 842} NSPrintReverseOrientation @@ -1006,22 +989,24 @@ CurrentSheet 0 - Expanded_Canvases + ExpandedCanvases Frame - {{4, -0}, {1913, 983}} - ShowInfo - + {{0, 45}, {1280, 732}} + ListView + + OutlineWidth + 142 + RightSidebar + ShowRuler Sidebar SidebarWidth 200 - TopSlabHeight - 250 VisibleRegion - {{-420, -21}, {1399, 826}} + {{-253, 0}, {1065, 590}} Zoom 1 ZoomValues diff -r dc651be5dd34 -r 6cd7ad437a85 paper/sigos.pdf Binary file paper/sigos.pdf has changed diff -r dc651be5dd34 -r 6cd7ad437a85 paper/sigos.tex --- a/paper/sigos.tex Fri Apr 21 16:25:33 2017 +0900 +++ b/paper/sigos.tex Fri Apr 21 21:23:59 2017 +0900 @@ -89,62 +89,29 @@ % 本文はここから始まる % Introduce -\section{Continuation Based C} -Gears OS の実装は本研究室で開発している CbC(Continuation based C)を用いて行われている。 +\section{Gears OS} +Gears OS は本研究室で開発している CbC(Continuation based C)を用いて行われている。 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 では戻り値を持たないため、スタックに値を積んでいく必要がなくスタックを変更する必要がない。 +Gears OS では Code Gear が CbC の Code Segement にあたる。 +Gears OS のプログラムは C の関数の単位で Code Gear を用いて分割し、処理を記述している。 +Code Gear から Code Gear への移動は goto の後に移動先の Code Gear 名と引数を並べた記述する構文を用いて行う。 +この goto による処理の遷移を継続と呼び、C での関数呼び出しにあたり、C では関数の引数の値がスタックに積まれていくが、Code Gear の goto では戻り値を持たないため、スタックに値を積んでいく必要がなくスタックを変更する必要がない。 このようなスタックに積まない継続を軽量継続と呼び、呼び出し元の環境を持たない。 -図\ref{fig:cbc_goto} は Code Segment 間の接続関係を表している。 - -\begin{figure}[ht] - \begin{center} - \includegraphics[width=60mm]{./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、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 の実行時間、メモリ使用量を予測可能なものにする。 +Code Gear は処理の基本として、 Input Data Gear を参照し、一つまたは複数の Output Data Gear に書き込む。また、接続された Data Gear 以外には参照を行わない。(図\ref{fig:codeGear_dataGear}) +Input Data Gear と Output Data Gear の2つによって、Code Gear の Data に対する依存関係が解決し Code Gear の並列実行を可能とする。 -\lstinputlisting[label=codeGearDataGear, caption=codeGearDataGear]{src/sample.c} -\newpage -\section{並列性} - -Code Gear が処理するのに必要な Input Data Gear と処理の実行後に出力される Output Data Gear の組を Task と呼び、Data Gear の入出力関係は Input Data Gear とOutput Data Gear によって表せられるため、図\ref{src:codeGeardataGear}のようになっており、Code Gear を実行するのに必要なデータの依存関係を明確にする。 -また、依存関係の無い Code Gear は自動で並列に実行される。 -並列実行の際にはMeta Code Gear で記述された Task を Worker に投げることで行われる。 - +\end{itemize} \begin{figure}[ht] \begin{center} \includegraphics[width=60mm]{./pic/codeGear_dataGear.pdf} \end{center} - \caption{codeGear\_dataGear} - \label{fig:codeGeardataGear} + \caption{Meta\_code\_gear} + \label{fig:codeGear_dataGear} \end{figure} -%Code Gear を複数Threadに分けて並列処理刷る図を入れてもいいかも -\section{柔軟性} -%プログラムの処理が Gearという単位で分けられて記述されているって言うけど、プログラムの処理ってなに?という疑問を持つのが一般的だと思われ -G通常の処理を Computation、 Computation のための Computation を Meta Computation として扱う。 +Gears OS の通常の処理を Computation、 Computation のための Computation を Meta Computation として扱う。 例として、 Code Gear が次に実行する Code Gear を goto で名前指定する。 この継続処理に対してMeta Code Gear が名前を解釈して、処理を対応する Code Gear に引き渡す。 これらは、従来の OS の Dynamic Loading Library や Command 呼び出しに対応する。 @@ -159,7 +126,7 @@ \end{itemize} \begin{figure}[ht] \begin{center} - \includegraphics[width=60mm]{./pic/meta_gear.pdf} + \includegraphics[width=80mm]{./pic/meta_gear.pdf} \end{center} \caption{Meta\_code\_gear} \label{fig:meta_gear} @@ -170,8 +137,7 @@ %図で言うよりも goto の説明をしたほうがわかりやすいかも、gotoがどういったものでどういう事に使われているのか、これがわかればわかるのでは? \section{GearsOSの構成} -%去年のOS研究会で構成については発表しているので、この辺はまとめてよ -%い +%去年のOS研究会で構成については発表しているので、この辺はまとめてよい Gears OS の以下の要素で並列処理を行う。 \begin{itemize} @@ -258,17 +224,9 @@ CUDAライブラリの初期化を行う以外の動作はCUDAWorker と全く同じになる。 GPUへのデータ転送及びGPU側でのTaskの実行はTaskのMeta Code Gear で行われる。 -\lstinputlisting[label=CUDAWorker, caption=CUDAWorker]{src/CUDAWorker.cbc} + \newpage -\section{CMake} -CMake はビルド自動化ツールであり、プログラムをコンパイル行う際にライブラリや動作環境によって様々な設定を行う必要がありますが、 CMake にはそれらのファイルやライブラリを探し出して実行することが出来ます。 -CMake のビルドは2段階からなり、 CMake の制御ファイルの CMakeList.txt によってビルドするファイルを指定でき、指定されたファイルをビルドする際にはまずビルドに必要なライブラリやファイルを探し、通常のビルド環境用のビルドファイルを作成し、次にビルドするファイルにあったビルドを行います。 -CMake は Windows や Linux 等、複数のOS の環境に対応している他、様々なコンパイルオプションがあり、クロスコンパイルや、ユーザーがコンパイルのルールを追加することで特殊なコンパイラや OS にも対応することが出来る。 -Code Gear/Data Gear による GPGPU 処理の実装には CUDA専用コンパイラである nvcc とCode Gear Data Gear のコンパイルを両立させる必要があるが、CMake は同時に1つのコンパイラしか扱えない。 -\verb |add_costom_command|を使うことで CUDA のコンパイラ nvcc を呼び出し、マクロを用いて、Code Gear Data Gear のコンパイルを両立させた。 - -\lstinputlisting[label=CMake, caption=CMake]{src/CMakeLists.txt} %今後の課題 \section{結論} @@ -281,6 +239,8 @@ \subsection{meta Levelの明示的な分離} \subsection{metaによる検証} \subsection{並列実行のAPI} +%par gotoとかcomputationの話を入れて、こういうふうに実装を完成させたいって言うのを書く。 +% %今後はMeta computation部分の自動生成、GPGPUのMeta computationによるチューニングなどを行い、Gears OS における GPGPU のサポートを広げる。 % GPU の方も書く