changeset 77:f9b73e12a52f

fix
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Mon, 23 Feb 2015 19:12:19 +0900
parents 4a4d4ef632d0
children 4bb76093b65a
files paper/abstract.tex paper/chapter1.tex paper/chapter3.tex paper/chapter4.tex paper/chapter5.tex paper/chapter6.tex paper/introduciton.tex paper/master_paper.bbl paper/master_paper.pdf paper/master_paper.tex
diffstat 10 files changed, 68 insertions(+), 70 deletions(-) [+]
line wrap: on
line diff
--- a/paper/abstract.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/abstract.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -1,11 +1,12 @@
 \begin{abstract}
+
 Cerium は並列プログラミングフレームワークである。
 Cerium は Cell Broad band Engine 用のフレームワークであったが、
 マルチコア CPU や GPU といったマルチプラットフォームに対応させ、より汎用的なフレームワークへ改良を行った。
 
 マルチコア CPU は SynchronizedQueue 、 GPU は OpenCL と CUDA により実装した。
-データ並列実行をサポートすることで GPGPU を行う際に高い並列度を維持することを可能にした。
-また、Cerium ではファイル読み込みを mmap  及び専用スレッドを用いる方法で十分な性能が出ることを示した。
+データ並列実行をサポートすることで、GPGPU を行う際に高い並列度を維持することを可能にした。
+また Cerium では、ファイル読み込みを mmap  及び専用スレッドを用いる方法で十分な性能が出ることを示した。
 Sort、WordCount 、FFT の例題を元に測定評価を行った。
 
 \end{abstract}
--- a/paper/chapter1.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/chapter1.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -1,5 +1,5 @@
 \chapter{既存のマルチプラットフォーム\\フレームワーク}
-マルチプラットフォームでプログラムを動作させる場合、そのアーキテクチャを意識する必要がある。
+ マルチプラットフォームでプログラムを動作させる場合、そのアーキテクチャを意識する必要がある。
 マルチプラットフォームにはマルチコア CPU 、 GPU や Cell といったヘテロジニアスマルチコアのような
 様々な構成がある。
 
@@ -40,7 +40,7 @@
   \label{fig:cpuarch}
 \end{figure}
 
-Shared Memory でないプロセッサとして、Cell が挙げられる。
+Shared Memory でないプロセッサとして、Cell が挙げられる\cite{cell}。
 
 Cell は1基の制御系プロセッサコア PPE ( PowerPC Processer Element ) と
 8基の演算系プロセッサコア SPE ( Synergistic Processer Element ) で構成される。
@@ -63,7 +63,7 @@
 
 \section{OpenCL}
 OpenCL とは、 Khronos Group の提供するマルチコア CPU と GPU といった、
-ヘテロジニアス環境を利用した並列計算を支援するフレームワークである。
+ヘテロジニアス環境を利用した並列計算を支援するフレームワークである\cite{opencl}。
 
 OpenCL では演算用プロセッサ側を Device 、制御用デバイス側を Host として定義する。
 また、 Device 上で動作するプログラムの事を kernel と呼ぶ。
@@ -95,7 +95,7 @@
 % CUDA
 %------
 \section{CUDA}
-CUDA とは、半導体メーカーNVIDIA社が提供するGPUコンピューティング向けの総合開発環境である。
+CUDA とは、半導体メーカーNVIDIA社が提供するGPUコンピューティング向けの総合開発環境である\cite{cuda}。
 
 CUDA も OpenCL と同様、演算用プロセッサ (GPU) を Device 、制御用デバイス側を Host として定義する。
 また、 Device 上で動作するプログラムの事も kernel と呼ぶ。
@@ -125,7 +125,7 @@
 
 \section{StarPU}
 StarPUはフランス国立情報学自動制御研究所 (INRIA) の StarPU 開発チームの提供する、
-ヘテロジニアス環境向けのフレームワークである。
+ヘテロジニアス環境向けのフレームワークである\cite{starpu}。
  GPU の制御に OpenCL と CUDA を用いており、どちらかを選択することで GPU 上で実行することができる。
 
  OpenCL と CUDA における実行の単位は kernel だったが、 StarPU では実行の単位を Task と定義している。
@@ -133,7 +133,7 @@
  StarPU では Task を制御するためにcodeletと呼ばれる構造体を使う。
  codelet を Task 生成時にポインタ渡しすることで、
  演算を行うリソースや実行する関数等を指定することができる。
- CPU と GPU で並列に実行する例を\ref{src:codelet}に示す。
+ CPU と GPU で並列に実行する例をソースコード:\ref{src:codelet}に示す。
 
 \begin{lstlisting}[frame=lrbt,label=src:codelet,caption=codeletの例,numbers=left]
 starpu_codelet codelet = {
--- a/paper/chapter3.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/chapter3.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -8,7 +8,7 @@
 
 FFT:Fast Fourier Transform(高速フーリエ変換) は、
 信号処理や画像処理から大規模シミュレーションに至るまで幅広い分野で活用されている計算である。
-バタフライ演算などの計算の性質上、データ並列と相性がよく、 GPGPU で高い並列度を維持できる事が知られている。
+バタフライ演算などの計算の性質上、データ並列と相性がよく、 GPGPU で高い並列度を維持できる事が知られている\cite{fft}。
 
 以上3つの例題を用いてベンチマークを行っていく。本論文で使用する各種例題について紹介する。
 
@@ -25,7 +25,7 @@
 指定された数の乱数を生成し、sort する例題である。
 SortSimpleTask は Task の割り当てを行う Task である。
 QuickSortTask は割り当てられた範囲を QuickSort により Sort する Task である。
-図:\ref{fig:sort}に Bitonic Sort の例を示す。
+図:\ref{fig:sort_example}に Bitonic Sort の例を示す。
 SimpleSortTask は乱数列を分割し、 QuickSortTask に割り当てる。QuickSortTask は割り当てられた部分を Sortする。
 分割した部分をQuickSortTaskに割り当て、繰り返し起動していく事でSort を行う。
 
@@ -44,7 +44,7 @@
     \includegraphics[scale=0.7]{./images/sort_benchmark.pdf}
   \end{center}
   \caption{Bitonic Sort の例}
-  \label{fig:sort}
+  \label{fig:sort_example}
 \end{figure}
 \newpage
 
@@ -114,7 +114,7 @@
 Sort の例題を元に Task の生成について考える。
 Sort の手順は\ref{sec:about_sort}節でも述べたが、
 「乱数列を分割して Sort 」と
-「割り当てた範囲の中間から次の範囲の中間までを Sort 」2つの Sort により構成される。
+「割り当てた範囲の中間から次の範囲の中間までを Sort 」、以上の2つの Sort により構成される。
 「乱数列を分割して Sort」を fsort 、
 「割り当てた範囲の中間から次の範囲の中間までを Sort 」を bsort とする。
 2つの Sort の構成を図:\ref{fig:fsort_bsort}に示す。
@@ -124,7 +124,7 @@
     \includegraphics[scale=0.7]{./images/fsort_bsort.pdf}
   \end{center}
   \caption{fsort と bsort}
-  \label{fig:sort}
+  \label{fig:fsort_bsort}
 \end{figure}
 
 bsort は fsort の結果に対して Sort を行う。つまりこの2つの Sort 間には依存関係が存在する。
@@ -134,7 +134,7 @@
 Task 生成部分は複雑になるという問題がある。
 Sort の例題における依存関係の記述を行う Task を SortSimple とし、ソースコード:\ref{src:sort_dependency}に示す。
 
-\begin{lstlisting}[frame=lrbt,label=src:sort_rependency,caption=Sort の例題における依存関係の記述,numbers=left]
+\begin{lstlisting}[frame=lrbt,label=src:sort_dependency,caption=Sort の例題における依存関係の記述,numbers=left]
 static int
 sort_start(SchedTask *manager, void *d, void *e)
 {
--- a/paper/chapter4.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/chapter4.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -1,5 +1,6 @@
 \chapter{マルチコアへの対応}
-Cerium は Cell 上で並列に動作するフレームワークであったが、 Mac OS X 、 Linux 上でも並列に実行させることを可能にした。
+Cerium は Cell 上で並列に動作するフレームワークであった\cite{yutaka:2012a}が、
+ Mac OS X 、 Linux 上でも並列に実行させることを可能にした。\cite{daichi:2012a}
 
 \section{マルチコア上での実行の機構}
 Cell には MailBox という機能がある。
@@ -18,13 +19,14 @@
 CPU を介さずに周辺装置とメモリ間でデータ転送を行う方式である。
 
 Cerium も DMA 転送を用いている箇所がある。
-しかしマルチコア CPU 上で実行する場合は各 CPU で同じメモリ空間を利用できる。
-よって DMA 転送を用いていた部分をポインタ渡しを行うように修正し、
+しかし現在主流のアーキテクチャでは DMA をサポートしていない。
+マルチコア CPU 上で実行する場合は各 CPU で同じメモリ空間を利用できるため、
+ DMA 転送を用いていた部分をポインタ渡しを行うように修正した。
 メモリに直接アクセスさせることで速度の向上が見込める。
 
-更に、DMA には prefetch 機能がある。
-DMA の転送効率を向上させるため、 DMA で転送する送信データを予め取り込むことができる。
-Cerium では DMA によるprefetch、DMA を用いないポインタ渡し、更に明示的なコピーによるデータ転送をサポートする。
+更に、Cerium には prefetch 機能がある。
+データの転送効率を向上させるため、転送する送信データを予め取り込むことができる。
+Cerium ではprefetch、prefetch を用いないポインタ渡し、更に明示的なコピーによるデータ転送をサポートする。
 
 \section{データ並列}
 \label{sec:multicore_dataparallel}
@@ -38,7 +40,7 @@
 処理対象となるデータが充分な数のサブデータへ分割することが可能で、
 サブデータへの処理を行うことが元のデータへの処理と同じになる場合、データ並列が有効となる。
 
-本研究で Cerium でデータ並列による実行を可能にした。
+本研究で Cerium でデータ並列による実行を可能にした\cite{yuhi:2013a}。
 Cerium でデータ並列実行を行う場合、Task を spwan API でなく iterate API で生成すればよい。
 iterate API は複数の length を引数とし、
 length の値がデータ分割後に各 Task が担当するサイズ、length の個数がデータの次元数となる。
--- a/paper/chapter5.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/chapter5.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -1,5 +1,5 @@
 \chapter{GPGPU への対応}
-Cerium の新たな演算資源として GPU の使用を可能にした。
+Cerium の新たな演算資源として GPU の使用を可能にした。\cite{yuhi:2013a}
 現在、GPU のような異なる種類のアーキテクチャを搭載した CPU 、つまりヘテロジニアスな CPU が増えている。
 特定の計算に特化した Task の生成やスケジューリングを行い、 GPGPU により高い並列度を出す研究は様々な分野で行われている。
 本研究では Cerium を特定の計算に限らず、 GPU を用いて汎用計算を行えるフレームワークに改良する。
@@ -136,7 +136,7 @@
 GPU は数百個のコアを有しており、ループ部分に対してデータ並列で処理を行うことで CPU より高速に演算を行う事ができる。
 プログラムの大部分がループであれば、データ並列による実行だけでプログラムの性能は向上する。
 
-OpenCL 、 CUDA ともにデータ並列をサポートしている。
+OpenCL 、 CUDA ともにデータ並列をサポートしている。\cite{yuhi:2014a}\cite{kkb:2014a}
 OpenCL と CUDA はTask を実行する際にデータをどう分割するか指定し、
 kernel にデータ並列用の処理を加えることで可能となる。
 \ref{sec:multicore_dataparallel}節で Cerium でマルチコア CPU におけるデータ並列を可能にした。
--- a/paper/chapter6.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/chapter6.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -1,7 +1,7 @@
 \chapter{並列処理向けI/O}
 ファイル読み込みなどの I/O を含むプログラムは、読み込み時間が Task の処理時間と比較してオーバーヘッドになることが多い。
 プログラムの並列化を行ったとしても、 I/O がボトルネックになってしまうと処理は高速にならない。
-本項では Cerium に並列処理用の I/O の実装を行う。これにより I/O 部分の高速化を図る。
+本項では Cerium に並列処理用の I/O の実装を行う。これにより I/O 部分の高速化を図る\cite{masa:2014a}。
 
 \section{mmap}
 Cerium ではファイルの読み込みを mmap により実装していた。
@@ -34,11 +34,11 @@
 読み込みが OS 依存となるため、環境によって左右されやすく、汎用性を損なってしまう。
 
 そこで、mmap を使わず、read を独立したスレッドで行い、ファイルを一度に全て読み込むのではなく
-ある程度の大きさ (Block) 分読み込み、読み込まれた部分に倒して並列に Task を起動する。
+ある程度の大きさ (Block) 分読み込み、読み込まれた部分に対して並列に Task を起動する。
 これを Blocked Read と呼ぶ。Blocked Read によるプログラミングは複雑になるが、高速化が期待できる。
 
 \section{Blocked Read による I/O の並列化}
-Blocked Read を実装するに辺り、WordCount を例に考える。
+Blocked Read を実装するにあたり、WordCount を例に考える。
 Blocked Read はファイル読み込み用の Task(以下、ReadTask) と
 読み込んだファイルに対して処理を行う Task(今回はWordCount) を別々に生成する。
 ReadTask はファイル全体を一度に全て読み込むのではなく、ある程度の大きさで分割してから読み込みを行う。
@@ -89,7 +89,7 @@
 それらの機能を持った関数が6行目にあたる runTask である。
 runTask に wait\_for による ReadTask との待ち合わせの処理を入れれば良い。
 
-BlockedRead の Task をいかに示す。
+BlockedRead の Task をソースコード:\ref{src:blockedread_task}示す。
 
 \begin{lstlisting}[frame=lrbt,label=src:blockedread_task,caption=BlockedRead Task,numbers=left]
 static int
--- a/paper/introduciton.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/introduciton.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -1,32 +1,28 @@
 \chapter{マルチプラットフォームな\\フレームワークにおける\\並列プログラミング}
 \pagenumbering{arabic} 
-% 動画の編集や再生、ゲームといったPCやタブレット等の端末でできる事・やりたい事が増えてきている。
+
 
-% PCやタブレットの一般的な利用方法として動画の編集や再生、ゲームといったアプリケーションの利用が挙げられる。
-% Rednering や物理演算といった処理から
-プログラムが PC に要求する処理性能は上がってきているが、
-%-ゲームや動画再生といったアプリケーションが高水準(?)になるにつれて
-%-高水準:高解像度だったり、ぬるぬる動いたり
+ プログラムが PC に要求する処理性能は上がってきているが、
 消費電力・発熱・クロックの限界から、 CPU の性能を上げることによる処理性能の向上は難しい。
 プロセッサメーカーはマルチコア CPU や GPU を含むヘテロジニアス構成の路線を打ち出している。
 クロックの性能を上げるのではなく、コア数を増やすことでパフォーマンスを向上させている。
 
-マルチコア CPU や GPU といったマルチプラットフォームなアーキテクチャ上でリソースを有効活用するには、
+マルチコア CPU や GPU といった、マルチプラットフォームなアーキテクチャ上でリソースを有効活用するには、
 それぞれのプラットフォームに対して最適な形でプログラムを並列に動作させる必要がある。
-ここでいう最適な形とは、実行の順番やどのリソース上で Task を実行するかといった
+ここでいう最適な形とは、実行の順番やどのリソース上で Task を実行するかといった、
 Scheduling を含めたチューニングの事である。
 
-しかしこれらのチューニングは複雑で、コーディング時に毎回行うと煩雑さや拡張性の点で問題がある。
-そういった問題を解決するため、本研究では並列プログラミングフレームワーク Cerium の開発を行った。
-Cerium によりプラットフォーム間で統一的にコードを記述できる。
+しかし、これらのチューニングは複雑で、コーディング時に毎回行うと煩雑さや拡張性の点で問題がある。
+このような問題を解決するため、本研究では並列プログラミングフレームワーク Cerium の開発を行った。
+Cerium により、プラットフォーム間で統一的にコードを記述できる。
 一般的なマルチプラットフォームフレームワークとして OpenCL や CUDA が挙げられるが、
 これらと同等の並列度を維持したい。
 
-Cerium では Task という単位で処理を記述し、それらは並列に実行される。
+Cerium では、Task という単位で処理を記述し、それらは並列に実行される。
 プログラマが Task 間の依存関係を設定するとパイプラインが構成され、高い並列度で実行される。
 プログラマが生成した Task は TaskManager に送信され、設定した依存関係の解決を行った後、 Scheduler に送信される。
 Scheduler がパイプラインの機構を持っており、Task はそのパイプラインに沿って実行される。
-Scheduler が受信した Task は既に TaskManager が依存関係を解決しているため、実行順序は任意で良い。
+Scheduler が受信した Task は、既に TaskManager が依存関係を解決しているため実行順序は任意で良い。
 
 計算機において並列処理を行うための設計様式として、1つの命令を同時に複数のデータに適用し、並列に処理する方式がある。
 これをSIMD と呼ぶ。
@@ -38,6 +34,5 @@
 TaskManager はプログラマが記述した単一の Task を複数生成し、
 受け取ったデータ(Input/Output)に対しその Task を割り当てる。
 生成した復数の Task を並列実行する事でデータ並列実行を実現した。
-
-Sort 、Word Count 、FFT の例題を元に、
+更に、Sort 、Word Count 、FFT の例題を元に、
 Cerium の持つ並列実行機構がマルチプラットフォームにおける並列プログラミングで有効に作用する事を示す。
--- a/paper/master_paper.bbl	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/master_paper.bbl	Mon Feb 23 19:12:19 2015 +0900
@@ -1,5 +1,32 @@
 \begin{thebibliography}{10}
 
+\bibitem{cell}
+Sony Corporation.
+\newblock Cell broadband engine architecture.
+\newblock 2005.
+
+\bibitem{opencl}
+Aaftab Munshi and Khronos OpenCL~Working Group.
+\newblock The opencl specification version 1.0.
+\newblock 2007.
+
+\bibitem{cuda}
+{CUDA}.
+\newblock {https://developer.nvidia.com/category/zone/cuda-zone/}.
+
+\bibitem{starpu}
+{C{\'e}dric Augonnet, Samuel Thibault, Raymond Namyst, Pierre-Andr{\'e}
+  Wacrenier}.
+\newblock {StarPU: A Unified Platform for Task Scheduling on Heterogeneous
+  Multicore Architectures}.
+\newblock {\em Concurrency and Computation: Practice and Experience, Special
+  Issue: Euro-Par 2009}, Vol.~23, pp. 187--198, February 2011.
+
+\bibitem{fft}
+Yasuhiko OGATA, Toshio ENDO, Naoya MARUYAMA, and Satoshi MATSUOKA.
+\newblock 性能モデルに基づく cpu 及び gpu を併用する効率的な fft ライブラリ.
+\newblock 情報処理学会論文誌コンピューティングシステム, 2008.
+
 \bibitem{yutaka:2012a}
 Yutaka KINJO.
 \newblock 並列プログラミングフレームワーク cerium の改良.
@@ -33,31 +60,4 @@
 \newblock 情報処理学会システムソフトウェアとオペレーティング・システム研究会,
   2014.
 
-\bibitem{fft}
-Yasuhiko OGATA, Toshio ENDO, Naoya MARUYAMA, and Satoshi MATSUOKA.
-\newblock 性能モデルに基づく cpu 及び gpu を併用する効率的な fft ライブラリ.
-\newblock 情報処理学会論文誌コンピューティングシステム, 2008.
-
-\bibitem{cell}
-Sony Corporation.
-\newblock Cell broadband engine architecture.
-\newblock 2005.
-
-\bibitem{opencl}
-Aaftab Munshi and Khronos OpenCL~Working Group.
-\newblock The opencl specification version 1.0.
-\newblock 2007.
-
-\bibitem{starpu}
-{C{\'e}dric Augonnet, Samuel Thibault, Raymond Namyst, Pierre-Andr{\'e}
-  Wacrenier}.
-\newblock {StarPU: A Unified Platform for Task Scheduling on Heterogeneous
-  Multicore Architectures}.
-\newblock {\em Concurrency and Computation: Practice and Experience, Special
-  Issue: Euro-Par 2009}, Vol.~23, pp. 187--198, February 2011.
-
-\bibitem{cuda}
-{CUDA}.
-\newblock {https://developer.nvidia.com/category/zone/cuda-zone/}.
-
 \end{thebibliography}
Binary file paper/master_paper.pdf has changed
--- a/paper/master_paper.tex	Mon Feb 23 17:09:12 2015 +0900
+++ b/paper/master_paper.tex	Mon Feb 23 19:12:19 2015 +0900
@@ -10,7 +10,7 @@
 \jtitle{マルチプラットフォーム対応\\並列プログラミングフレームワーク}
 %\etitle{supporting multiplatform of parallel programming framework}
 \etitle{Multi-Platform Framework For Parallel Programming}
-\year{平成26年度 3月}
+\year{平成26年度}
 \affiliation{\center%
   \includegraphics[clip,keepaspectratio,width=.15\textwidth]
                   {images/u-ryukyu-Mark.eps}\\