changeset 2:f8ec7d0a377d

fix
author Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
date Wed, 11 Apr 2012 09:05:15 +0900
parents fe9ddefa5e96
children a011ba777be3
files .hgignore documents/paper.mm papers/sigos.tex
diffstat 3 files changed, 166 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgignore	Wed Apr 11 09:05:15 2012 +0900
@@ -0,0 +1,29 @@
+syntax: glob
+*.aux
+*.bbl
+*.blg
+*.dvi
+*.fdb_latexmk
+*.glg
+*.glo
+*.gls
+*.idx
+*.ilg
+*.ind
+*.ist
+*.lof
+*.log
+*.lot
+*.nav
+*.nlo
+*.out
+*.pdfsync
+*.ps
+*.snm
+*.synctex.gz
+*.toc
+*.vrb
+*.maf
+*.mtc
+*.mtc0
+*.pdf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/documents/paper.mm	Wed Apr 11 09:05:15 2012 +0900
@@ -0,0 +1,63 @@
+<map version="1.0.0">
+<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
+<node CREATED="1333965552914" ID="ID_450597361" MODIFIED="1333965765365" TEXT="Cerium">
+<node CREATED="1333965715665" ID="ID_98854533" MODIFIED="1333965719797" POSITION="left" TEXT="&#x30d7;&#x30ed;&#x30b7;&#x30f3;">
+<node CREATED="1333965652884" ID="ID_1502327456" MODIFIED="1333965669468" TEXT="&#x306f;&#x3058;&#x3081;&#x306b;"/>
+<node CREATED="1333965670448" ID="ID_1038074094" MODIFIED="1333965674451" TEXT="Cerium Task Manager"/>
+<node CREATED="1333965675551" ID="ID_510454514" MODIFIED="1333965691043" TEXT="&#x30de;&#x30eb;&#x30c1;&#x30b3;&#x30a2;&#x4e0a;&#x3067;&#x306e;&#x4e26;&#x5217;&#x5b9f;&#x884c;&#x306e;&#x6a5f;&#x69cb;"/>
+<node CREATED="1333965691640" ID="ID_1553187836" MODIFIED="1333965700204" TEXT="&#x30d9;&#x30f3;&#x30c1;&#x30de;&#x30fc;&#x30af;"/>
+<node CREATED="1333965700775" ID="ID_917232817" MODIFIED="1333965703030" TEXT="&#x307e;&#x3068;&#x3081;"/>
+</node>
+<node CREATED="1333965737831" ID="ID_1605778670" MODIFIED="1333965743035" POSITION="right" TEXT="OS&#x7814;&#x7a76;&#x4f1a;">
+<node CREATED="1333966748612" ID="ID_1863041246" MODIFIED="1333966760215" TEXT="&#x306f;&#x3058;&#x3081;&#x306b;"/>
+<node CREATED="1333966760811" ID="ID_1653488100" MODIFIED="1333966772929" TEXT="Cerium Task Manager"/>
+<node CREATED="1333966776810" ID="ID_751873023" MODIFIED="1333966786922" TEXT="many-core&#x3067;&#x306e;&#x5b9f;&#x88c5;"/>
+<node CREATED="1333966787749" ID="ID_1276549352" MODIFIED="1333966813574" TEXT="&#x30d9;&#x30f3;&#x30c1;&#x30de;&#x30fc;&#x30af;">
+<node CREATED="1333966793356" ID="ID_1122178960" MODIFIED="1333966801104" TEXT="&#x30b3;&#x30d4;&#x30fc;&#x306e;&#x30aa;&#x30fc;&#x30d0;&#x30fc;&#x30d8;&#x30c3;&#x30c9;"/>
+</node>
+<node CREATED="1333966811851" ID="ID_416521918" MODIFIED="1333966818808" TEXT="TaskLog">
+<node CREATED="1333966822987" ID="ID_967816013" MODIFIED="1333966827602" TEXT="Dependency"/>
+<node CREATED="1333966835004" ID="ID_621375882" MODIFIED="1333966838323" TEXT="&#x30d0;&#x30b0;&#x306e;&#x691c;&#x51fa;"/>
+</node>
+<node CREATED="1333966844813" ID="ID_1793823178" MODIFIED="1333966847778" TEXT="GPU&#x306e;&#x8a2d;&#x8a08;">
+<node CREATED="1333966851973" ID="ID_1320897571" MODIFIED="1333966861171" TEXT="GpuThreads"/>
+<node CREATED="1333966861516" ID="ID_204550493" MODIFIED="1333966864041" TEXT="Scheduler"/>
+</node>
+</node>
+<node CREATED="1333965765737" ID="ID_121666814" MODIFIED="1333966154047" POSITION="left" TEXT="&#x3084;&#x3063;&#x305f;&#x3053;&#x3068;">
+<node CREATED="1333965775201" ID="ID_32497172" MODIFIED="1333965799079" TEXT="TaskLog&#x306e;&#x53ef;&#x8996;&#x5316;">
+<node CREATED="1333966099675" ID="ID_1938643423" MODIFIED="1333966107764" TEXT="Task&#x306e;Dependency">
+<node CREATED="1333966299979" ID="ID_1090606680" MODIFIED="1333966306531" TEXT="&#x3069;&#x3046;&#x3044;&#x3046;&#x30c7;&#x30fc;&#x30bf;&#x3092;&#x53d6;&#x308c;&#x3070;&#x3088;&#x3044;&#x304b;"/>
+</node>
+<node CREATED="1333966113557" ID="ID_1686690020" MODIFIED="1333966118043" TEXT="&#x30d0;&#x30b0;&#x767a;&#x898b;">
+<node CREATED="1333966157530" ID="ID_1925623412" MODIFIED="1333966169358" TEXT="OSX&#x306e;&#x30e1;&#x30e2;&#x30ea;&#x306e;&#x30a2;&#x30c9;&#x30ec;&#x30b9;&#x3092;&#x56fa;&#x5b9a;&#x3059;&#x308b;&#x3053;&#x3068;&#x3067;&#x3082;&#x53ef;&#x80fd;"/>
+<node CREATED="1333966178153" ID="ID_633390849" MODIFIED="1333966197990" TEXT="output buffer&#x304c;&#x6b21;&#x306e;input buffer&#x3092;&#x7834;&#x58ca;&#x3059;&#x308b;"/>
+</node>
+<node CREATED="1333966223201" ID="ID_1629796813" MODIFIED="1333966229583" TEXT="&#x81ea;&#x52d5;&#x7684;&#x306b;&#x691c;&#x77e5;&#x3059;&#x308b;&#x65b9;&#x6cd5;">
+<node CREATED="1333966238226" ID="ID_1769099920" MODIFIED="1333966250622" TEXT="input&#x30c7;&#x30fc;&#x30bf;&#x3068;output&#x30c7;&#x30fc;&#x30bf;&#x306e;&#x30a2;&#x30c9;&#x30ec;&#x30b9;"/>
+<node CREATED="1333966270585" ID="ID_1913872608" MODIFIED="1333966282144" TEXT="Task&#x3092;&#x6295;&#x5165;&#x3057;&#x3066;&#x3001;&#x8ab0;&#x304b;&#x304c;&#x305d;&#x3053;&#x306b;&#x66f8;&#x304d;&#x3053;&#x3093;&#x3067;&#x305f;&#x3089;&#x30a2;&#x30a6;&#x30c8;"/>
+</node>
+</node>
+<node CREATED="1333965799794" ID="ID_699768608" MODIFIED="1333966372074" TEXT="&#x30b3;&#x30d4;&#x30fc;&#x306e;&#x30aa;&#x30fc;&#x30d0;&#x30fc;&#x30d8;&#x30c3;&#x30c9;&#x3092;&#x8a08;&#x6e2c;">
+<node CREATED="1333966353620" ID="ID_493779171" MODIFIED="1333966359360" TEXT="&#x5b9f;&#x6e2c;&#x3057;&#x305f;&#x5024;&#x3092;&#x66f8;&#x304f;"/>
+</node>
+<node CREATED="1333966377293" ID="ID_430967383" MODIFIED="1333966381674" TEXT="GPU&#x306e;&#x8a2d;&#x8a08;">
+<node CREATED="1333966396997" ID="ID_1330839392" MODIFIED="1333966402762" TEXT="task_list">
+<node CREATED="1333966474332" ID="ID_1274035423" MODIFIED="1333966477098" TEXT="task_init"/>
+</node>
+<node CREATED="1333966508840" ID="ID_1433426620" MODIFIED="1333966514748" TEXT="OpenCL context">
+<node CREATED="1333966405612" ID="ID_1342502198" MODIFIED="1333966411023" TEXT="GpuThreads"/>
+</node>
+<node CREATED="1333966419533" ID="ID_1260875533" MODIFIED="1333966423530" TEXT="command_queue">
+<node CREATED="1333966548879" ID="ID_1894139487" MODIFIED="1333966552741" TEXT="set_taskList"/>
+<node CREATED="1333966556223" ID="ID_986659611" MODIFIED="1333966558726" TEXT="Scheduler"/>
+</node>
+<node CREATED="1333966425180" ID="ID_272451596" MODIFIED="1333966434338" TEXT="parameter">
+<node CREATED="1333966602416" ID="ID_467759210" MODIFIED="1333966622911" TEXT="HTask&#x304b;&#x3089;scheduler&#x3067;&#x30b3;&#x30d4;&#x308b;"/>
+</node>
+<node CREATED="1333966439237" ID="ID_1093223894" MODIFIED="1333966456138" TEXT="input data"/>
+<node CREATED="1333966448445" ID="ID_1142506846" MODIFIED="1333966452698" TEXT="output data"/>
+</node>
+</node>
+</node>
+</map>
--- a/papers/sigos.tex	Mon Apr 09 19:57:58 2012 +0900
+++ b/papers/sigos.tex	Wed Apr 11 09:05:15 2012 +0900
@@ -36,33 +36,41 @@
 \author{河野 真治}{Shinji KONO}{URYUKYU}
 
 \begin{abstract}
+% 前回のまま。変更予定
 本研究室で作成した Cerium Task Manager\cite{gongo:2008a} は, Task 単位で記述するゲームフレームワークである.
 今までは, PlayStation 3/Cell\cite{cell} 上でのみ, 並列実行を可能にしていたが, 
 今回新たに Mac OS X, Linux 上での並列実行に対応した.
 \end{abstract}
 
-%\begin{jkeyword}
-%並列処理,マルチコア,GPGPU
-%\end{jkeyword}
+\begin{jkeyword}
+並列処理,マルチコア,GPGPU
+\end{jkeyword}
 
 \begin{eabstract}
+% 前回のまま。変更予定
 We have developed Cerium Task Manager\cite{gongo:2008a} that is a Game Framework on the PlayStation 3/Cell\cite{cell}. 
 Cerium Task Manager new supporting parallel execution on Mac OS X and Linux. 
 In this paper, we described implementation of existing Cerium Task Manager and a new parallel execution. 
 \end{eabstract}
 
-%\begin{ekeyword}
-%Parallel Computing, Multi-core, GPGPU
-%\end{ekeyword}
+\begin{ekeyword}
+Parallel Computing, Multi-core, GPGPU
+\end{ekeyword}
 
 \maketitle
 
-\section{はじめに}
-プロセッサメーカは, 消費電力, 発熱及びクロックの限界という観点から, 
-マルチコア構成の路線を打ち出しており, 今後ますますマルチコアプロセッサが主流になると想像できる.
+\section{研究背景・目的}
+プロセッサメーカは, クロックの限界や発熱という問題に対処するため, 
+シングルコア構成から、マルチコア構成への転換を行なっており, 今後ますますマルチコアプロセッサが主流になると想像できる.
 
-マルチコアプロセッサ上で, リソースを有効活用するためには, 並列プログラミングを行う必要があるが, 
-効率の良い並列プログラムを書くことは難しい.
+マルチコアプロセッサ上では, 並列コンピューティングに対応したプログラミングを行う必要がある。
+また、処理を並列に実行するため、処理全体で高い並列度を保たなければ、処理性能は著しく下がってしまうという問題がある。% アムダール則
+
+本研究室では、並列プログラミングフレームワークである、Cerium Task Manager\cite{gongo:2008a} を開発している。
+Cerium Task Manager は、Cell Broadband Engine\cite{cell} 向けに開発されており、
+
+% 後で考える
+
 
 そこで, 本研究室で作成した Cerium Task Manager\cite{gongo:2008a} をマルチコアプロセッサに対応させることで,
 マルチコアプロセッサ上での Task 単位による並列プログラミングをサポートする.
@@ -74,8 +82,7 @@
 その後, 新たに実装した並列実行の機構について説明する.
 
 \section{Cerium Task Manager}\label{section:cerium}
-Cerium Task Manager は, Cell 用に開発されたゲームフレームワークであり, 
-Rendering Engine を含む.
+Cerium Task Manager は, Cell Broadband Engine 向けに開発された並列プログラミングフレームワークである。
 
 Cerium Task Manager では, 並列処理を Task 単位で記述する.
 関数やサブルーチンを Task として扱い,
@@ -126,7 +133,7 @@
 
 \section{ベンチマーク}
 Word Count, Sort 及び Prime Counter の例題を用いて, 計測した.
-それぞれ入力として, 100MB のテキストファイルの単語数カウント, 10 万入力のソート, 1000 万までの範囲の素数を全て数え上げるようになっている.
+それぞれ入力として, 100MB のテキストファイルの単語数カウント, 10 万入力のソート, 100 万までの範囲の素数を全て数え上げるようになっている.
 比較対象として, PlayStation 3/Cell においても同様の例題を用いて計測している.
 どちらも, 最適化レベルは最大にしてある.
 
@@ -204,24 +211,74 @@
 % また, 図\ref{fig:multi_result}より, 台数効果が確認できる.
 
 \subsection{コピーのオーバヘッド}
-% コピーのオーバヘッドを計測してのせる。
+DMA転送を用いていた箇所をポインタ渡しをするように修正した場合、どれだけの速度向上効果があるのか計測した。
+プロファイリングの機能を追加し, 
+データの Load や、Store の時間を取り、コピーのオーバヘッドを測定した。
+Word Count, Sort 及び Prime Counter の例題を用いた.
+それぞれ入力として, 1GB のテキストファイルの単語数カウント, 20 万入力のソート, 1000 万までの範囲の素数を全て数え上げるようになっている.
+表\ref{table:copybenchmark}に、計測結果を示す。
+
+{\bf 実験環境}
+
+CentOS/Xeon
+\begin{itemize}\small
+\item OS : CentOS 6.2
+\item CPU : Intel\textregistered Xeon\textregistered X5650 @2.67GHz
+\item Memory : 8GB
+\item Compiler : GCC 4.4.6
+\end{itemize}
+
+\begin{table}[h]
+\caption{Benchmark}
+\label{table:copybenchmark}
+\begin{tabular}[t]{c||r|r|r}
+\hline
+& Word Count & Sort & Prime Counter\\
+\hline\hline
+Copy無し (4 CPU)& 1287 ms & 1762 ms & 1292 ms \\
+\hline
+Copy有り (4 CPU)& 1386 ms & 1873 ms & 1338 ms\\
+\hline
+\end{tabular}
+\end{table}
+
+% パーセンテージを表にいれる
+
+表\ref{table:copybenchmark}より、Copy無しの場合、Word Count の例題で約 8 \%, Sort の例題で約 6 \%, Prime Counter の例題で約 4 \%
+の速度向上が見られる。
+Word Count を例にあげると、Busytimeが約93 \%に対し、DataのLoadtimeが、約3.7 \%である。
 
 \section{TaskLog}
+DMA転送を用いていた部分をポインタ渡しをするようにした際、メモリの管理がシビアになったためバグが発現するようになった。
+バグの検出のために、TaskLog 出力機能を追加した。
+Graphviz を用いて、DOT言語で示されたグラフを描画する。
+グラフとして表示されたログは、バグの発生箇所の検出に利用できる。
+
+% 図\ref{}に、例としてグラフを示す。
 % TaskLogの可視化ツール
 
-\subsection{Dependencyの可視化}
+\subsection{依存関係の可視化}
+Task の依存関係は、Task の Box に引かれた線で表す。
 % Dependencyの可視化要件
 
 \subsection{バグの検出}
 % 実際にバグを検出することができた。
 % output bufferが次のinput bufferを破壊するバグ
 
-\section{GPU上での並列実行機構の実装}
+\section{GPU上での並列実行機構の設計}
+GPUでの並列実行には、OpenCLを用いて設計する。
+OpenCLは、CPU や、GPUなど異種の計算資源が混在するプラットフォームで並列処理プログラムを書くためのフレームワークである。
+OpenCLは、作成したカーネルオブジェクトをCommandQueueに、Enqueueすることで、プログラムの実行を行う。
 \subsection{GpuThreads}
+GpuThreadsでは、OpenCLの各種オブジェクトの作成を担当する。
+デバイスの特定や、コンテキスト、コマンドキューの作成を請け負う。
+GpuThreadsは、Singleton Patternで、
 \subsection{GpuScheduler}
+GpuSchedulerでは、Taskのリストを受け取ってCommand Queueに、Enqueueする。
 
 
 \section{まとめ}
+% 前回のまま。変更予定
 本稿では, 既存の Cerium Task Manager の実装と新しい並列実行の機構について説明した.
 新しく実装した並列実行の機構を用いることによって, Mac OS X, Linux 上でのマルチプロセッサ環境に対応できる.