# HG changeset patch # User Masataka Kohagura # Date 1453274206 -32400 # Node ID c686d33ba1c7cb8bfde7ba0a3c631d703413fbad # Parent e7cbdb30cf74bd131a5bbd1b5d673434a0633200 change file name diff -r e7cbdb30cf74 -r c686d33ba1c7 benchmark.tex --- a/benchmark.tex Tue Jan 19 18:11:19 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -\chapter{ベンチマーク} diff -r e7cbdb30cf74 -r c686d33ba1c7 c1.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/c1.tex Wed Jan 20 16:16:46 2016 +0900 @@ -0,0 +1,9 @@ +\chapter{introduction} +正規表現はオートマトンに変換することができ、そしてオートマトンの受理の問題は Class NC と呼ばれる問題でもある。 +この問題は計算機の台数が多ければ多いほど高速化できるという特徴を持ち、並列化に向いている問題といえる。 +コンピュータの動作やゲームの動作などの多くの問題はオートマトンの受理問題に落としこむことができるので、この問題を解決すれば様々な問題に対応できるようになる。 +本研究では Cerium 上に正規表現を実装することにより。 + +word count などを早く処理するため +I/Oの並列化 +膨大なファイル diff -r e7cbdb30cf74 -r c686d33ba1c7 c2.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/c2.tex Wed Jan 20 16:16:46 2016 +0900 @@ -0,0 +1,231 @@ +\chapter{Cerium} +Cerium は、Cell 向けに開発された並列プログラミングフレームワークである。 +Cell は Sony Computer Entertainment 社が販売した PlayStation3 に搭載されているヘテロジニアスマルチコア・プロセッサである。 +本章では Cerium の実装について説明する。 + +\section{Cerium の概要} +Cerium は当初 Cell 向けに開発され、C/C++ で実装されている。 +現在では Linux、 MacOS X 上で動作する並列プログラミングフレームワークである。 + +Cerium は TaskManager、SceneGraph、Rendering Engine の3要素から構成されている。 +本研究では汎用計算フレームワークである TaskManager を利用して文字列の並列計算を行なった。 + +図\ref{fig:TaskManager}は Cerium が Task の生成/実行する場合のクラス構成図である。 +TaskManager で依存関係が解消され、実行可能になった Task は ActiveTaskList に格納される。 +ActiveTaskList に格納された Task は、依存関係が解消されているのでどのような順番で実行されても問題はない。 +Task は転送を行いやすい TaskList に変換され、CpuType に対応した Scheduler に転送される。 +なお、転送はSynchronozed Queue である mail を通して行われる。 + +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=0.7]{images/cerium/createTask.pdf} + \end{center} + \caption{Task Manager} + \label{fig:TaskManager} +\end{figure} + +\newpage + +\section{Cerium TaskManager} +Cerium TaskManager では、処理の単位を Task として記述していく。 +関数やサブルーチンを Task として取り扱い、その Task にて Input Data/Output Data 及び Task の依存関係を設定する。 +そして Task は設定された依存関係を考慮しながら実行される。 + +Input Data で格納した 2 つの数を乗算し、Output Data に演算結果を格納する multiply という例題のソースコード\ref{src:createTask}を以下に示す。 + +また、Task の生成時に用いる API 一覧を表\ref{table:TaskCreateAPI}に示す。 +\begin{lstlisting}[frame=lrbt,label=src:createTask,caption=Task の生成,numbers=left] +multi_init(TaskManager *manager) +{ + float *A, *B, *C; + + // create Task + HTaskPtr multiply = manager->create_task(MULTIPLY_TASK); + + // set device + multiply->set_cpu(SPE_ANY); + + // set inData + multiply->set_inData(0, (memaddr)A, sizeof(float)*length); + multiply->set_inData(1, (memaddr)B, sizeof(float)*length); + + // set outData + multiply->set_outData(0, (memaddr)C, sizeof(float)*length); + + // set parameter + multiply->set_param(0,(long)length); + + // spawn task + multiply->spawn(); +} +\end{lstlisting} + +\begin{tiny} + \begin{table}[ht] + \begin{center} + \label{table:TaskCreateAPI} + \small + \begin{tabular}[t]{c|l} + \hline + create\_task& Task を生成する \\ + \hline + set\_inData & Task への入力データのアドレスを追加 \\ + \hline + set\_outData & Task への出力データのアドレスを追加 \\ + \hline + set\_param & Task へ値を一つ渡す。ここでは length \\ + \hline + set\_cpu & Task を実行するデバイスの設定 \\ + \hline + spawn & 生成した Task を TaskList に set \\ + \hline + \end{tabular} + \caption{Task 生成における API} + \end{center} + \end{table} +\end{tiny} + +次に、デバイス側で実行される Task のソースコードを\ref{src:task}に示す。 +\begin{lstlisting}[frame=lrbt,label=src:task,caption=Task,numbers=left] +static int +run(SchedTask *s) { + // get input + float *i_data1 = (float*)s->get_input(0); + float *i_data2 = (float*)s->get_input(1); + + // get output + float *o_data = (float*)s->get_output(0); + + // get parameter + long length = (long)s->get_param(0); + + // calculate + for (int i=0; icreate_task(MULTIPLY_TASK); - - // set device - multiply->set_cpu(SPE_ANY); - - // set inData - multiply->set_inData(0, (memaddr)A, sizeof(float)*length); - multiply->set_inData(1, (memaddr)B, sizeof(float)*length); - - // set outData - multiply->set_outData(0, (memaddr)C, sizeof(float)*length); - - // set parameter - multiply->set_param(0,(long)length); - - // spawn task - multiply->spawn(); -} -\end{lstlisting} - -\begin{tiny} - \begin{table}[ht] - \begin{center} - \label{table:TaskCreateAPI} - \small - \begin{tabular}[t]{c|l} - \hline - create\_task& Task を生成する \\ - \hline - set\_inData & Task への入力データのアドレスを追加 \\ - \hline - set\_outData & Task への出力データのアドレスを追加 \\ - \hline - set\_param & Task へ値を一つ渡す。ここでは length \\ - \hline - set\_cpu & Task を実行するデバイスの設定 \\ - \hline - spawn & 生成した Task を TaskList に set \\ - \hline - \end{tabular} - \caption{Task 生成における API} - \end{center} - \end{table} -\end{tiny} - -次に、デバイス側で実行される Task のソースコードを\ref{src:task}に示す。 -\begin{lstlisting}[frame=lrbt,label=src:task,caption=Task,numbers=left] -static int -run(SchedTask *s) { - // get input - float *i_data1 = (float*)s->get_input(0); - float *i_data2 = (float*)s->get_input(1); - - // get output - float *o_data = (float*)s->get_output(0); - - // get parameter - long length = (long)s->get_param(0); - - // calculate - for (int i=0; iMasterSheets ModificationDate - 2016-01-19 09:00:13 +0000 + 2016-01-19 12:25:52 +0000 Modifier MasaKoha NotesVisible @@ -2341,6 +2341,173 @@ Bounds + {{23.67716556008412, 1094.1732382740561}, {436.95275987912339, 35}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + FontInfo + + Color + + b + 0 + g + 0 + r + 0 + + + ID + 33 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs32 \cf0 101000 or 001000 = 001000} + + + + Bounds + {{23.67716556008412, 1069.2874108819276}, {436.95275987912339, 36}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + FontInfo + + Color + + b + 0 + g + 0 + r + 0 + + + ID + 32 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs32 \cf0 file2 +\f1 \'82\'cc\'90\'e6\'93\'aa\'82\'a9\'82\'e7\'88\'ea\'95\'b6\'8e\'9a\'82\'b7\'82\'b7\'82\'df\'82\'bd\'8e\'9e\'82\'cc\'8f\'f3\'91\'d4 : 001000} + + + + Bounds + {{23.67716556008412, 1044.5669386113721}, {297.63779797610323, 36}} + Class + ShapedGraphic + FitText + Vertical + Flow + Resize + FontInfo + + Color + + b + 0 + g + 0 + r + 0 + + + ID + 31 + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;\f1\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs32 \cf0 file2 +\f1 \'82\'cc\'90\'e6\'93\'aa\'82\'cc\'8f\'f3\'91\'d4 : 111111 (\'89\'bc\'92\'e8)} + + + + Bounds {{198.21653722698295, 572.21575695577349}, {63.779528137736406, 30}} Class ShapedGraphic @@ -3212,7 +3379,7 @@ Bounds - {{18.007874170063104, 1094.3504034258485}, {411.02362577652366, 84}} + {{19.925197017568394, 1206.1417432269711}, {411.02362577652366, 180}} Class ShapedGraphic FitText @@ -3265,7 +3432,9 @@ \f0\fs32 \cf0 \'81\'45 \f1 file1 \f0 \'82\'cc\'96\'96\'92\'5b\'82\'cc\'8f\'f3\'91\'d4\'82\'f0\'95\'db\'91\'b6\ -\'81\'45file2 \'82\'cc\'90\'e6\'93\'aa\'82\'cc\'8f\'f3\'91\'d4\'82\'f0\'91\'53\'82\'c4\'82\'cc\'83\'72\'83\'62\'83\'67\'97\'f1\'82\'aa1\'82\'c9\'82\'c8\'82\'c1\'82\'c4\'82\'a2\'82\'e9\'82\'c6\'89\'bc\'92\'e8\'82\'b5\'82\'c4 grep \'82\'f0\'82\'a9\'82\'af\'82\'e9} +\'81\'45file2 \'82\'cc\'90\'e6\'93\'aa\'82\'cc\'8f\'f3\'91\'d4\'82\'f0\'91\'53\'82\'c4\'82\'cc\'83\'72\'83\'62\'83\'67\'97\'f1\'82\'aa1\'82\'c9\'82\'c8\'82\'c1\'82\'c4\'82\'a2\'82\'e9\'82\'c6\'89\'bc\'92\'e8\'82\'b5\'82\'c4 file2 \'82\'cc\'90\'e6\'93\'aa1\'95\'b6\'8e\'9a\'82\'be\'82\'af grep \'82\'f0\'82\'a9\'82\'af\'82\'e9\ +\'81\'45\'90\'e6\'93\'aa\'88\'ea\'95\'b6\'8e\'9a\'82\'be\'82\'af grep \'82\'f0\'82\'a9\'82\'af\'82\'bd\'82\'a0\'82\'c6\'82\'cc\'8f\'f3\'91\'d4(\'83\'72\'83\'62\'83\'67\'97\'f1)\'82\'c6 file1 \'82\'cc\'96\'96\'92\'5b\'82\'cc\'8f\'f3\'91\'d4\'82\'cc or \'82\'aa 1 \'82\'c2\'82\'c5\'82\'e0\'97\'a7\'82\'c1\'82\'c4\'82\'a2\'82\'ea\'82\'ce\'81\'41\'90\'b3\'8b\'4b\'95\'5c\'8c\'bb\'92\'86\'82\'c9\'83\'74\'83\'40\'83\'43\'83\'8b\'95\'aa\'8a\'84\'82\'b3\'82\'ea\'82\'bd\'82\'c6\'82\'dd\'82\'c8\'82\'b7\'81\'42\ +} @@ -21647,13 +21816,13 @@ WindowInfo CurrentSheet - 6 + 1 Expanded_Canvases キャンバス 7 Frame - {{245, 195}, {1279, 982}} + {{153, 25}, {1767, 1072}} ShowInfo ShowRuler @@ -21665,9 +21834,9 @@ TopSlabHeight 682 VisibleRegion - {{-56, 0}, {670.17544700608482, 722.8070266138925}} + {{-86, 855.55553646967621}, {732.74852166541643, 534.50291205282576}} Zoom - 1.1399999856948853 + 1.7100000381469727 ZoomValues @@ -21702,8 +21871,8 @@ キャンバス 9 - 1.4099999666213989 - 1.4099999999999999 + 1.7100000381469727 + 1.7100000000000002 diff -r e7cbdb30cf74 -r c686d33ba1c7 implregex.tex --- a/implregex.tex Tue Jan 19 18:11:19 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -\chapter{正規表現の設計と実装} -\section{正規表現構文木の生成} -\section{Transition List の生成} -\section{Subset Construction} -\section{Cerium 上での実装} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/CharClassMergePattern.pdf} - \end{center} - \caption{2つの Character Class を merge するときの全パターン} - \label{fig:CharClassMergePattern} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/ccinsert1.pdf} - \end{center} - \caption{Character Class を二分木で表示} - \label{fig:ccinsert1} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/ccinsert2.pdf} - \end{center} - \caption{ある Character Class の二分木に対して、新しい Character Class を insert} - \label{fig:ccinsert2} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/ccinsertresult.pdf} - \end{center} - \caption{insert 後の Character Class の二分木} - \label{fig:ccinsertresult} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/cfab.pdf} - \end{center} - \caption{cfab} - \label{fig:cfab} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/cfdg.pdf} - \end{center} - \caption{cfdg} - \label{fig:cfdg} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/cfdgab.pdf} - \end{center} - \caption{cfdgab} - \label{fig:cfdgab} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/efgi.pdf} - \end{center} - \caption{efgi} - \label{fig:efgi} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/dfa.pdf} - \end{center} - \caption{dfa} - \label{fig:dfa} -\end{figure} - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.2]{images/implementation/nfa.pdf} - \end{center} - \caption{nfa} - \label{fig:nfa} -\end{figure} - diff -r e7cbdb30cf74 -r c686d33ba1c7 introduction.tex --- a/introduction.tex Tue Jan 19 18:11:19 2016 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -\chapter{introduction} -正規表現はオートマトンに変換することができ、そしてオートマトンの受理の問題は Class NC と呼ばれる問題でもある。 -この問題は計算機の台数が多ければ多いほど高速化できるという特徴を持ち、並列化に向いている問題といえる。 -コンピュータの動作やゲームの動作などの多くの問題はオートマトンの受理問題に落としこむことができるので、この問題を解決すれば様々な問題に対応できるようになる。 -本研究では Cerium 上に正規表現を実装することにより。 diff -r e7cbdb30cf74 -r c686d33ba1c7 master_paper.tex --- a/master_paper.tex Tue Jan 19 18:11:19 2016 +0900 +++ b/master_paper.tex Wed Jan 20 16:16:46 2016 +0900 @@ -7,9 +7,9 @@ \usepackage{comment} %\input{dummy.tex} %% font -\jtitle{Cerium 上での正規表現の設計と実装} +\jtitle{Cerium による文字列の並列処理} %\etitle{Title} -\etitle{Title} +\etitle{Parallel processing of strings using Cerium} \year{平成27年度 3月} \affiliation{\center% \includegraphics[clip,keepaspectratio,width=.15\textwidth] @@ -78,17 +78,12 @@ %chapters \pagenumbering{arabic} -\input{introduction.tex} -\input{cerium.tex} -\input{ceriumex.tex} -\input{implregex.tex} -\input{benchmark.tex} -\input{conclusion.tex} - -%謝辞 -\input{acknowledgment.tex} - -%参考文献 +\input{c1.tex} +\input{c2.tex} +\input{c3.tex} +\input{c4.tex} +\input{c5.tex} +\input{c6.tex} \nocite{*} \bibliographystyle{junsrt} \bibliography{master_paper} diff -r e7cbdb30cf74 -r c686d33ba1c7 paper.mm --- a/paper.mm Tue Jan 19 18:11:19 2016 +0900 +++ b/paper.mm Wed Jan 20 16:16:46 2016 +0900 @@ -1,6 +1,6 @@ - + @@ -19,8 +19,8 @@ - - + + @@ -42,7 +42,10 @@ - + + + +