Mercurial > hg > Papers > 2012 > toma-sigos
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="プロシン"> +<node CREATED="1333965652884" ID="ID_1502327456" MODIFIED="1333965669468" TEXT="はじめに"/> +<node CREATED="1333965670448" ID="ID_1038074094" MODIFIED="1333965674451" TEXT="Cerium Task Manager"/> +<node CREATED="1333965675551" ID="ID_510454514" MODIFIED="1333965691043" TEXT="マルチコア上での並列実行の機構"/> +<node CREATED="1333965691640" ID="ID_1553187836" MODIFIED="1333965700204" TEXT="ベンチマーク"/> +<node CREATED="1333965700775" ID="ID_917232817" MODIFIED="1333965703030" TEXT="まとめ"/> +</node> +<node CREATED="1333965737831" ID="ID_1605778670" MODIFIED="1333965743035" POSITION="right" TEXT="OS研究会"> +<node CREATED="1333966748612" ID="ID_1863041246" MODIFIED="1333966760215" TEXT="はじめに"/> +<node CREATED="1333966760811" ID="ID_1653488100" MODIFIED="1333966772929" TEXT="Cerium Task Manager"/> +<node CREATED="1333966776810" ID="ID_751873023" MODIFIED="1333966786922" TEXT="many-coreでの実装"/> +<node CREATED="1333966787749" ID="ID_1276549352" MODIFIED="1333966813574" TEXT="ベンチマーク"> +<node CREATED="1333966793356" ID="ID_1122178960" MODIFIED="1333966801104" TEXT="コピーのオーバーヘッド"/> +</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="バグの検出"/> +</node> +<node CREATED="1333966844813" ID="ID_1793823178" MODIFIED="1333966847778" TEXT="GPUの設計"> +<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="やったこと"> +<node CREATED="1333965775201" ID="ID_32497172" MODIFIED="1333965799079" TEXT="TaskLogの可視化"> +<node CREATED="1333966099675" ID="ID_1938643423" MODIFIED="1333966107764" TEXT="TaskのDependency"> +<node CREATED="1333966299979" ID="ID_1090606680" MODIFIED="1333966306531" TEXT="どういうデータを取ればよいか"/> +</node> +<node CREATED="1333966113557" ID="ID_1686690020" MODIFIED="1333966118043" TEXT="バグ発見"> +<node CREATED="1333966157530" ID="ID_1925623412" MODIFIED="1333966169358" TEXT="OSXのメモリのアドレスを固定することでも可能"/> +<node CREATED="1333966178153" ID="ID_633390849" MODIFIED="1333966197990" TEXT="output bufferが次のinput bufferを破壊する"/> +</node> +<node CREATED="1333966223201" ID="ID_1629796813" MODIFIED="1333966229583" TEXT="自動的に検知する方法"> +<node CREATED="1333966238226" ID="ID_1769099920" MODIFIED="1333966250622" TEXT="inputデータとoutputデータのアドレス"/> +<node CREATED="1333966270585" ID="ID_1913872608" MODIFIED="1333966282144" TEXT="Taskを投入して、誰かがそこに書きこんでたらアウト"/> +</node> +</node> +<node CREATED="1333965799794" ID="ID_699768608" MODIFIED="1333966372074" TEXT="コピーのオーバーヘッドを計測"> +<node CREATED="1333966353620" ID="ID_493779171" MODIFIED="1333966359360" TEXT="実測した値を書く"/> +</node> +<node CREATED="1333966377293" ID="ID_430967383" MODIFIED="1333966381674" TEXT="GPUの設計"> +<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からschedulerでコピる"/> +</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 上でのマルチプロセッサ環境に対応できる.