Mercurial > hg > Papers > 2014 > kkb-sigos
changeset 1:a0fad656a7ea
commit
author | Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 18 Apr 2014 20:55:25 +0900 |
parents | 5153d23a38e6 |
children | bff486ef0e8c |
files | cerium.tex cerium_gpu.tex cuda.tex images/cpu_arch.bb images/cpu_arch.pdf images/cpu_arch.xbb images/createTask.bb images/createTask.pdf images/culculate_index.bb images/culculate_index.pdf images/culculate_index.xbb images/gpu_arch.bb images/gpu_arch.pdf images/gpu_arch.xbb introduction.tex opencl.tex sigos.aux sigos.bbl sigos.blg sigos.dvi sigos.log sigos.pdf sigos.tex |
diffstat | 23 files changed, 702 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/cerium.tex Tue Apr 08 18:04:02 2014 +0900 +++ b/cerium.tex Fri Apr 18 20:55:25 2014 +0900 @@ -1,1 +1,105 @@ \section{Cerium} +Cerium は、Cell 用の Fine-Grain Task Manager として同研究室の宮国が実装した。 +TaskManager, SceneGraph, Rendering Engine の3つの要素から構成されており、PS3 および Linux, MacOS X 上で動作する。 + +\subsection{Cerium TaskManager} +TaskManager は、Task と呼ばれる分割されたプログラムを管理する。 +関数やサブルーチンを Task として扱い、Task 同士の依存関係を考慮しながら実行される。 +Task は TaskManager を使って生成する。 +Task を生成する際に、以下のような要素を設定することができる。 + +\begin{itemize} + \item input data + \item output data + \item parameter + \item cpu type + \item dependency +\end{itemize} + +input, output, parameter は関数でいうところの引数に相当する。 +cpy type は Task がどのようなの Device の組み合わせで実行されるかを示す。 +dependency は他の Task との依存関係を示している。 + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.4]{./images/createTask.pdf} + \end{center} + \caption{Task Manager} + \label{fig:createTask} +\end{figure} + +依存関係が解消され、実行可能になった Task は ActiveTaskList に移される。 +さらに、Scheduler に転送しやすい TaskList に変換してから cpy type に対応する Scheduler に転送される。 +Task が終了すると Scheduler から TaskManager に通知される。 +その通知に従って依存関係が解消され、再び TaskManager から Scheduler に Task が転送される。 +図:\ref{fig:createTask}は Cerium が Task を生成/実行する場合のクラスの構成である。 + +以下に Task を生成する例題を示す。 +表:\ref{table:TaskManager_api}は Task を生成に用いる API を示している。 +input データを2つ用意し、input データの各要素同士を乗算し、output に格納する multiply という例題である。 + +\lstinputlisting[caption=multiply,label=test]{./source/multiply.cc} + +\begin{table}[htpb] + \begin{center} + \small + \begin{tabular}[htpb]{|c|l|} \hline + create\_task & Task を生成する \\ \hline + set\_inData & Task への入力データのアドレスを追加 \\ \hline + set\_outData & Task からのデータ出力先アドレスを追加 \\ \hline + set\_param & Task のパラメータ \\ \hline + wait\_for & Task の依存関係 \\ \hline + set\_cpu & Task を実行する Device の設定 \\ \hline + spawn & Task を Queue に登録する \\ \hline + iterate & データ並列で実行する Task として Queue に登録する \\ \hline + \end{tabular} + \caption{Task 生成に用いる API} + \label{table:TaskManager_api} + \end{center} +\end{table} + +CPU で実行される Task(OpenCL, CUDA でいう kernel) の記述は以下のようになる。 +表:\ref{table:taskAPI}は Task 側で使用する API である。 + +\lstinputlisting[caption=task,label=test]{./source/multiply_task.cc} + +\begin{table}[ht] + \begin{center} + \small + \begin{tabular}[t]{|c|l|} \hline + get\_input & 入力データのアドレスを取得 \\ \hline + get\_output & データ出力先のアドレスを取得 \\ \hline + get\_param & パラメータを取得 \\ \hline + \end{tabular} + \caption{ Task 側で使用する API } + \label{table:taskAPI} + \end{center} +\end{table} + +\subsection{Cerium におけるデータ並列} +Cerium でデータ並列による実行をサポートするために、OpenCL の API に合わせた iterate という API を用意した。 +iterate は length を引数として受け取り、Scheduler で length の値と受け取った引数の個数を次元数として Task 数を計算し、データ並列で実行する Task として生成する。 + +例として、CPU 数4、一次元で10個のデータに対してデータ並列実行を行なった場合、各 CPU が担当する index は表:\ref{table:dpi}のようになる。 + +\begin{table}[h] + \begin{center} + \small + \begin{tabular}[t]{c||c|c|c|c} \hline + stage&CPU0& CPU1&CPU2&CPU3 \\ \hline + 1&0&1&2&3 \\ \hline + 2&4&5&6&7 \\ \hline + 3&8&9& & \\ \hline + \end{tabular} + \caption{Data 並列実行時の index の割り当て} + \label{table:dpi} + \end{center} +\end{table} + +各 CPU が担当する index は SchedTask に格納してある。 +データ並列で実行する Task の記述は以下のようになる。 + +\lstinputlisting[caption=example,label=test]{./source/multiply_task_dp.cc} + +並列プログラムでは、並列化する Task が全部同一であるということは少なくない。 +iterate を実装したことで、Task を生成する部分をループで回す必要はなくなり、OpenCL と同様に1つの記述で異なる index を持つ Task を Multi Core CPU 上で実行することが可能になった。
--- a/cerium_gpu.tex Tue Apr 08 18:04:02 2014 +0900 +++ b/cerium_gpu.tex Fri Apr 18 20:55:25 2014 +0900 @@ -1,1 +1,30 @@ \section{Cerium の GPGPU への対応} +本章では、まずはじめに GPU プログラミングの特徴および問題について述べ、Cerium への実装でどのように対応したかについて説明する。 + +\subsection{GPU プログラミングの特徴および問題} +まず Multi Core CPU に対するプログラミングと同様に性能を向上させるためには、プログラム全体を対象とした並列度を高くしなければならない。 +明示的な並列化部分はループ部分である。 +GPU は数百個のコアを有しており、ループ部分に対してデータ並列で処理を行うことで CPU より高速で演算を行うことができる。 +プログラムの大部分がループであれば、データ並列による実行だけでプログラムの性能は向上する。 +しかし、多くのプログラムはその限りではない。 +GPGPU においてネックになる部分はデータ転送である。 +GPU の Memory 空間(図:\ref{fig:gpuarch})は CPU(図:\ref{fig:cpuarch}) とは異なり、Shared Memory ではないため host と device 間でデータの共有ができない。 +データにアクセスするためには Memory 空間ごとコピーするしかない。 +これが大きなオーバーヘッドになるので、データ転送をオーバーラップする必要がある。 +今回新たに、データ転送を自動でオーバーラップするように OpenCL および CUDA を用い Scheduler を実装した。 + +\begin{figure}[htpd] + \begin{center} + \includegraphics[scale=0.4]{./images/gpu_arch.pdf} + \end{center} + \caption{Gpu Architecture} + \label{fig:gpuarch} +\end{figure} + +\begin{figure}[htpd] + \begin{center} + \includegraphics[scale=0.7]{./images/cpu_arch.pdf} + \end{center} + \caption{Cpu Architecture} + \label{fig:cpuarch} +\end{figure}
--- a/cuda.tex Tue Apr 08 18:04:02 2014 +0900 +++ b/cuda.tex Fri Apr 18 20:55:25 2014 +0900 @@ -1,1 +1,50 @@ \section{CUDA} +CUDA とは、半導体メーカー NVIDIA 社が提供する GPU コンピューティング向けの総合開発環境でコンパイラ、ライブラリ、デバッガなどから構成される。プログラミング言語である CUDA C は C 言語ベースに拡張を加えたものである。 + +CUDA には CUDA Runtime API と CUDA Driver API の2種類がある。 +Driver API は Runtime API に比べてプログラマが管理すべきリソースが多い。 +しかし、Runtime API より柔軟な処理を行うことができる。 +今回は Driver API を使用して実装した。 + +CUDA も OpenCL と同様に、制御を行う CPU 側を host、GPU 側を device と定義している。 +また、device 上で動作するプログラムも OpenCL と同様に kernel と呼ぶ。 + +\subsection{Stream} +CUDA には OpenCL の CommandQueue と似たような仕組みとして Stream がある。 +Stream は host 側で発行された Operation を一連の動作として device で実行する。 +Stream に発行された Operation は発行された順序で実行されることが保証されている。 +異なる Stream に発行された Operation に依存関係が存在しない場合、Operation を並列に実行することができる。 + +Stream は cuStreamCreate という Driver API で生成される。 +引数に Stream を指定しない API はすべて host 側をブロックする同期的な処理となる。 +複数の Stream を同時に走らせ Operation を並列に実行するためには非同期な処理を行う API を利用する必要がある。 + +\subsection{Data Parallel Execution} +CUDA では OpenCL の WorkItem に相当する単位を thread と定義している。 +この thread をまとめたものを block と呼ぶ。 +CUDA でデータ並列による kernel 実行をする場合、cuLaunchKernel API を使用する。 +この関数は引数として各座標の block 数と各座標の block 1つ当たりの thread 数を指定することでデータ並列で実行できる。 + +cuLaunckKernel で kernel を実行すると各 thread に対して block ID と thread ID が割り当てられる。 +CUDA には OpenCL とは異なり、ID を取得する API は存在しない。 +代わりに、kernel に組み込み変数が準備されており、それを参照し、対応するデータに対し処理を行うことでデータ並列を実現する。 +組み込み変数は以下の通りである。 + +\begin{itemize} + \item uint3 blockDim + \item uint3 blockIdx + \item uint3 threadIdx +\end{itemize} + +各組み込み変数はベクター型で、blockDim.x とすると x 座標の thread 数を参照することができる。 +blockIdx.x とすると x 座標の block ID が参照でき、threadIdx.x とすると x 座標の thread ID を参照することができる。 +blockDim.x * blockIdx.x + threadIdx.x で OpenCL の get\_global\_id(0) で取得できる ID に相当する ID を算出することができる。 +例として、ある kernel で get\_global\_id(0) の返り値が13の場合、CUDA では図:\ref{fig:calculate_index}のようになる。 + +\begin{figure}[!h] + \begin{center} + \includegraphics[scale=0.4]{./images/culculate_index.pdf} + \end{center} + \caption{Calculate Index} + \label{fig:calculate_index} +\end{figure}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/images/cpu_arch.bb Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,5 @@ +%%Title: ./cpu_arch.pdf +%%Creator: extractbb 20120420 +%%BoundingBox: 0 0 250 207 +%%CreationDate: Fri Feb 22 14:24:38 2013 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/images/cpu_arch.xbb Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,8 @@ +%%Title: ./images/cpu_arch.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 273 225 +%%HiResBoundingBox: 0.000000 0.000000 273.000000 225.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Mon Feb 17 16:01:55 2014 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/images/createTask.bb Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/createTask.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 512 391 +%%CreationDate: Tue Feb 25 09:13:13 2014 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/images/culculate_index.bb Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,5 @@ +%%Title: ./images/culculate_index.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 562 226 +%%CreationDate: Tue Feb 18 19:17:52 2014 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/images/culculate_index.xbb Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,8 @@ +%%Title: ./images/culculate_index.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 562 226 +%%HiResBoundingBox: 0.000000 0.000000 562.000000 226.000000 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Tue Feb 18 19:17:55 2014 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/images/gpu_arch.bb Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,5 @@ +%%Title: ./gpu_arch.pdf +%%Creator: extractbb 20120420 +%%BoundingBox: 0 0 557 557 +%%CreationDate: Fri Feb 22 14:24:38 2013 +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/images/gpu_arch.xbb Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,8 @@ +%%Title: ./images/gpu_arch.pdf +%%Creator: extractbb 20090506 +%%BoundingBox: 0 0 556 548 +%%HiResBoundingBox: 0.000000 0.000000 556.000000 548.000000 +%%PDFVersion: 1.4 +%%Pages: 1 +%%CreationDate: Mon Feb 17 16:02:34 2014 +
--- a/introduction.tex Tue Apr 08 18:04:02 2014 +0900 +++ b/introduction.tex Fri Apr 18 20:55:25 2014 +0900 @@ -1,1 +1,13 @@ -\section{研究目的} +\section{はじめに} +GPU の普及と高性能化にともない、GPU の演算資源を画像処理以外の目的にも利用する GPGPU(GPU による汎目的計算)が注目されている。 +しかし、GPU の利用には様々な制約があり、十分な性能を引き出すには GPU のアーキテクチャに適したプログラミングを行う必要がある。 +また、マルチコアプロセッサ上で実行する場合と同様に効率の良い並列プログラムを書くことは難しい。 +そこで、当研究室で開発・改良が行われている並列プログラミングフレームワーク Cerium を GPGPU に対応させた。 +Cerium は PS3 および Linux, MacOS X 上で動作する。 +MacOS X 上で GPGPU を行う場合、OpenCL または CUDA を用いる方法が考えられる。 + +今回、Cerium 上に OpenCL, CUDA を用いた GPU 実行機構を実装した。 + +本論文では、まず OpenCL, CUDA について説明する。 +その後、既存の Cerium の実装および新たに実装した GPU 実行の機構について説明する。 +最後に WordCount, FFT を例題として測定し、評価を行う。
--- a/opencl.tex Tue Apr 08 18:04:02 2014 +0900 +++ b/opencl.tex Fri Apr 18 20:55:25 2014 +0900 @@ -1,1 +1,32 @@ \section{OpenCL} +OpenCL とは、Multi Core CPU と GPU のようなヘテロジニアスな環境を利用した並列計算を支援するフレームワークである。 +演算用のプロセッサ(本研究では GPU)上で動作するプログラム OpenCL C という言語で記述する。 +OpenCL C で記述したプログラムを GPU 上で実行させるために OpenCL Runtime API を利用する。 +OpenCL ではオペレーティングシステムなどが処理されるメイン CPU のことを host、GPGPU が可能なグラフィックボードなどのことを device と定義している。 +OpenCL Application は host 側のプログラムと device 側のプログラムが一体となって動作する。 +この device 上で動作するプログラムを特別に kernel と呼ぶ。 + +\subsection{CommandQueue} +OpenCL では、device の操作に CommandQueue を使用する。 +CommandQueue は device に Operation を送るための仕組みである。 +kernel の実行、input buffer の読み込み、output buffer への書き込みなどが Operation となる。 + +CommandQueue に投入された Operation は投入された順序で実行される。 +CommandQueue を生成するときプロパティを指定することで Operation を投入された順序を無視して(out of order)実行することが可能になる。 +また複数の CommandQueue を生成し、device に投入することでも our of order で実行することが可能である。 + +out of order で実行する場合、データの依存関係を設定する必要がある。各 Operation を発行する関数には event\_wait\_list と event を指定することができ、これらを利用してデータの依存関係を設定することができる。 +out of order 実行を可能にするプロパティをサポートしている device が少ないため、今回は複数の CommandQueue を用いる方法で実装を行なった。 + +\subsection{Data Parallel Execution} +3D グラフィックのような多次元のデータを処理する場合に高い並列度を保つには、データを分割して並列に実行する機能が必要である。 +これを OpenCL ではデータ並列と呼んでいる。 +OpenCL では次元数に対応する index があり、OpenCL は1つの記述から index の異なる複数の kernel を自動生成する。 +その添字を global\_id と呼ぶ。 +このとき入力されたデータは WorkItem という処理単位に分割される。 + +OpenCL は WorkItem に対して、それぞれを識別する ID(global\_id)を割り当てる。 +kernel は get\_global\_id という API によって ID を取得し、取得した ID に対応するデータに対して処理を行うことでデータ並列を実現する。 + +データ並列による kernel 実行の場合、clEnqueueNDRangeKernel を使用する。 +この関数の引数として WorkItem の数と次元数を指定することでデータ並列で実行することができる。
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sigos.aux Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,27 @@ +\relax +\newlabel{fig:calculate_index}{{1}{3}} +\newlabel{fig:createTask}{{2}{3}} +\newlabel{test}{{1}{3}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {1}multiply}{3}} +\newlabel{table:TaskManager_api}{{1}{3}} +\newlabel{test}{{2}{3}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {2}task}{3}} +\citation{toma:2012a} +\citation{opencl} +\citation{opencl:ref} +\citation{opencl:applied} +\citation{yutaka:os} +\bibstyle{ipsjunsrt} +\bibdata{sigos} +\bibcite{toma:2012a}{1} +\newlabel{table:taskAPI}{{2}{4}} +\newlabel{table:dpi}{{3}{4}} +\newlabel{test}{{3}{4}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3}example}{4}} +\newlabel{fig:gpuarch}{{3}{4}} +\bibcite{opencl}{2} +\bibcite{opencl:ref}{3} +\bibcite{opencl:applied}{4} +\bibcite{yutaka:os}{5} +\newlabel{fig:cpuarch}{{4}{5}} +\gdef\ipsj@lastpage{5}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sigos.bbl Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,24 @@ +\begin{thebibliography}{1} + +\bibitem{toma:2012a} +當眞大千,河野真治\:Cerium Task Manager + におけるマルチコア上での並列実行機構の実装,第53回プログラミング・シンポジウム + (2012). + +\bibitem{opencl} +{Aaftab Munshi, Khronos OpenCL Working Group}: {\em {The OpenCL Specification + Version 1.0}} (2007). + +\bibitem{opencl:ref} +{Khronos OpenCL Working Group}: {\em {OpenCL 1.2 Reference Pages}} (2012). + +\bibitem{opencl:applied} +{北山洋幸}\:{OpenCL応用 メニーコアCPU \& + GPGPU時代の並列処理},{カットシステム} (2012). + +\bibitem{yutaka:os} + 金城裕,河野真治,多賀野海人,小林佑亮(琉球大学)\:ゲームフレームワークCerium + TaskManagerの改良,情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS) + (2011). + +\end{thebibliography}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sigos.blg Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,52 @@ +This is pBibTeX, Version 0.99d-j0.33 (utf8.euc) (TeX Live 2012) +Capacity: max_strings=35307, hash_size=35307, hash_prime=30011 +The top-level auxiliary file: sigos.aux +The style file: ipsjunsrt.bst +Database file #1: sigos.bib +Warning--there's no number and/or volumetoma:2012a +Warning--Missing required argument pages in toma:2012a +Warning--there's no number and/or volumeyutaka:os +Warning--Missing required argument pages in yutaka:os +You've used 5 entries, + 2207 wiz_defined-function locations, + 553 strings with 4672 characters, +and the built_in function-call counts, 824 in all, are: += -- 45 +> -- 39 +< -- 0 ++ -- 14 +- -- 9 +* -- 51 +:= -- 130 +add.period$ -- 5 +call.type$ -- 5 +change.case$ -- 0 +chr.to.int$ -- 0 +cite$ -- 9 +duplicate$ -- 62 +empty$ -- 89 +format.name$ -- 12 +if$ -- 188 +int.to.chr$ -- 0 +int.to.str$ -- 5 +missing$ -- 3 +newline$ -- 18 +num.names$ -- 5 +pop$ -- 18 +preamble$ -- 1 +purify$ -- 0 +quote$ -- 0 +skip$ -- 31 +stack$ -- 0 +substring$ -- 0 +swap$ -- 2 +text.length$ -- 7 +text.prefix$ -- 0 +top$ -- 0 +type$ -- 0 +warning$ -- 4 +while$ -- 5 +width$ -- 6 +write$ -- 35 +is.kanji.str$ -- 26 +(There were 4 warnings)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sigos.log Fri Apr 18 20:55:25 2014 +0900 @@ -0,0 +1,282 @@ +This is pTeX, Version 3.141592-p3.1.10 (utf8.euc) (Web2C 7.5.4) (format=platex 2011.8.15) 17 APR 2014 19:19 +**sigos.tex +(./sigos.tex +pLaTeX2e <2006/11/10>+0 (based on LaTeX2e <2003/12/01> patch level 0) +(./ipsjpapers.cls +Document Class: ipsjpapers 2007/06/15 ver 2.12 +(./ipsjpapers.sty +\old@latex@skip=\skip41 +\@Q=\dimen118 +\jfsize=\count81 +\jspaceskip=\dimen119 +\@mojihaba=\dimen120 +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <9> on input line 546. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <6> on input line 546. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <5> on input line 546. +\@abstractbox=\box41 +\@titlewidth=\dimen121 +\@eabstractbox=\box42 +\mkt@prevdepth=\dimen122 +\mkt@titlebox=\box43 +\mkt@cnta=\count82 +\mkt@cntb=\count83 +\mkt@sname=\count84 +\mkt@gname=\count85 +\mkt@boxa=\box44 +\mkt@namewidth=\dimen123 +\c@affi@footnote=\count86 +\c@affi@pfootnote=\count87 +\c@volpageoffset=\count88 +\c@volume=\count89 +\c@number=\count90 +\c@year=\count91 +\@leftcolumnfootnote=\box45 +\@rightcolumnfootnote=\box46 +\opt@baselineskip=\skip42 +\bio@picbox=\box47 +\bio@colht=\dimen124 +\bio@splitheight=\dimen125 +\bio@maxgap=\dimen126 +\bio@lastgap=\dimen127 +\bio@th=\dimen128 +\bio@lhA=\dimen129 +\bio@hA=\dimen130 +\bio@hB=\dimen131 +\bio@lh=\dimen132 +\bio@rh=\dimen133 +\bio@tempdim=\dimen134 +\bio@pbox=\insert233 + (./ipsjcommon.sty +\c@section=\count92 +\c@subsection=\count93 +\c@subsubsection=\count94 +\c@paragraph=\count95 +\c@subparagraph=\count96 +\bib@adjustheight=\dimen135 +\c@figure=\count97 +\c@table=\count98 +\cap@linewidth=\dimen136 +\cap@hsize=\dimen137 +\cap@prevgraf=\count99 +\cap@box=\box48 +\PF@fnotectr=\count100 +\PF@page=\count101 +\adj@boxa=\box49 +\adj@boxb=\box50 +\adj@height=\dimen138 +\adj@deadcycle=\count102 +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 880. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 880. +))) +(/usr/local/share/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/local/share/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 1999/03/16 v1.13 key=value parser (DPC) +\KV@toks@=\toks15 +) +(/usr/local/share/texmf/tex/latex/graphics/dvipdfmx-contrib-latex/graphics.sty +Package: graphics 2001/07/07 v1.0n Standard LaTeX Graphics (DPC,SPQR) + +(/usr/local/share/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/usr/local/share/texmf-dist/tex/latex/graphics/graphics.cfg +File: graphics.cfg 2005/02/03 v1.3 graphics configuration of teTeX/TeXLive +) +Package graphics Info: Driver file: dvipdfm.def on input line 81. + +(/usr/local/share/texmf-dist/tex/latex/dvipdfm/dvipdfm.def +File: dvipdfm.def 1999/9/6 vx.x Driver-dependant file +)) +\Gin@req@height=\dimen139 +\Gin@req@width=\dimen140 +) +(/usr/local/share/texmf/ptex/latex/url/url.sty +\Urlmuskip=\muskip10 +Package: url 2004/03/15 ver 3.1 Verb mode for urls, etc. +) +(/usr/local/share/texmf-dist/tex/latex/listings/listings.sty +\lst@mode=\count103 +\lst@gtempboxa=\box51 +\lst@token=\toks16 +\lst@length=\count104 +\lst@currlwidth=\dimen141 +\lst@column=\count105 +\lst@pos=\count106 +\lst@lostspace=\dimen142 +\lst@width=\dimen143 +\lst@newlines=\count107 +\lst@lineno=\count108 +\c@lstlisting=\count109 +\abovecaptionskip=\skip43 +\belowcaptionskip=\skip44 +\lst@maxwidth=\dimen144 + +(/usr/local/share/texmf-dist/tex/latex/listings/lstpatch.sty +File: lstpatch.sty 2004/10/17 1.3b (Carsten Heinz) +) +(/usr/local/share/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2004/09/07 1.3 (Carsten Heinz) +\c@lstnumber=\count110 +\lst@skipnumbers=\count111 +\lst@framebox=\box52 +) +(/usr/local/share/texmf-dist/tex/latex/listings/listings.cfg +File: listings.cfg 2004/09/05 1.3 listings configuration +)) +Package: listings 2004/10/17 1.3b (Carsten Heinz) + +(/usr/local/share/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2004/09/05 1.3 listings language file +) +(/usr/local/share/texmf-dist/tex/latex/listings/lstlang1.sty +File: lstlang1.sty 2004/09/05 1.3 listings language file +) +(/usr/local/share/texmf-dist/tex/latex/listings/lstmisc.sty +File: lstmisc.sty 2004/09/07 1.3 (Carsten Heinz) +) (./dummy.tex) +(./sigos.aux + +LaTeX Warning: Label `test' multiply defined. + + +LaTeX Warning: Label `test' multiply defined. + +) +\openout1 = `sigos.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Checking defaults for JY1/mc/m/n on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Checking defaults for JT1/mc/m/n on input line 31. +LaTeX Font Info: ... okay on input line 31. +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 86. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <14.4> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 86. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <10.95> on input line 86. +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <8> on input line 86. +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <12> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 86. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <12> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 86. + + +Class ipsjpapers Warning: \etitle is too wide. Break line(s) by \\ on input lin +e 86. + +LaTeX Font Info: External font `cmex10' loaded for size +(Font) <7> on input line 86. +(./introduction.tex) (./opencl.tex [1 + + +] +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <9> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 9. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <9> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 9. +) (./cuda.tex +File: ./images/culculate_index.pdf Graphic file (type eps) + +<./images/culculate_index.pdf> +Overfull \hbox (20.78407pt too wide) in paragraph at lines 46--47 + [] + [] + +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <7> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 48. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <7> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 48. + +LaTeX Warning: `!h' float specifier changed to `!ht'. + +) (./cerium.tex [2] +File: ./images/createTask.pdf Graphic file (type eps) + <./images/createTask.pdf> +Overfull \hbox (0.70938pt too wide) in paragraph at lines 25--26 + [] + [] + +(./source/multiply.cc +LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <8> not available +(Font) Font shape `JT1/gt/m/n' tried instead on input line 1. +LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <8> not available +(Font) Font shape `JY1/gt/m/n' tried instead on input line 1. +LaTeX Font Info: Try loading font information for OMS+cmr on input line 2. + (/usr/local/share/texmf-dist/tex/latex/base/omscmr.fd +File: omscmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <8> not available +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 2. +LaTeX Font Info: Try loading font information for OML+cmr on input line 7. + +(/usr/local/share/texmf-dist/tex/latex/base/omlcmr.fd +File: omlcmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: Font shape `OML/cmr/m/n' in size <8> not available +(Font) Font shape `OML/cmm/m/it' tried instead on input line 7. +) +Overfull \hbox (71.1005pt too wide) in paragraph at lines 41--41 +[]\OT1/cmr/m/n/9 multiply + [] + + +Overfull \hbox (54.23717pt too wide) in paragraph at lines 46--56 + [] + [] + +(./source/multiply_task.cc [3]) +Overfull \hbox (53.93672pt too wide) in paragraph at lines 64--64 +[]\OT1/cmr/m/n/9 task + [] + +(./source/multiply_task_dp.cc) +Overfull \hbox (70.3366pt too wide) in paragraph at lines 102--102 +[]\OT1/cmr/m/n/9 example + [] + +) (./cerium_gpu.tex +File: ./images/gpu_arch.pdf Graphic file (type eps) + <./images/gpu_arch.pdf> +Overfull \hbox (18.77661pt too wide) in paragraph at lines 18--19 + [] + [] + +File: ./images/cpu_arch.pdf Graphic file (type eps) +<./images/cpu_arch.pdf>) (./benchmark.tex) (./conclusion.tex) (./sigos.bbl +[4]) [5 + +] (./sigos.aux) + +LaTeX Warning: There were multiply-defined labels. + + ) +Here is how much of TeX's memory you used: + 2765 strings out of 94681 + 36836 string characters out of 1169859 + 159801 words of memory out of 1500000 + 6012 multiletter control sequences out of 10000+50000 + 18309 words of font info for 70 fonts, out of 1200000 for 2000 + 566 hyphenation exceptions out of 8191 + 33i,10n,68p,250b,1708s stack positions out of 5000i,500n,6000p,200000b,5000s + +Output written on sigos.dvi (5 pages, 36532 bytes).
--- a/sigos.tex Tue Apr 08 18:04:02 2014 +0900 +++ b/sigos.tex Fri Apr 18 20:55:25 2014 +0900 @@ -1,7 +1,28 @@ \documentclass[techrep]{ipsjpapers} \usepackage[dvipdfm]{graphicx} \usepackage{url} - +\usepackage{listings} +\lstset{% + language={C++},%使用言語 + basicstyle={\small},%書体 + commentstyle={\small\itshape},%コメントの書体 + keywordstyle={\small\bfseries},%キーワードの書体 + %identifierstyle={\small},% + %ndkeywordstyle={\small},% + stringstyle={\small},%文字列の書体 + frame={trlb},%外枠 + breaklines=true,%改行 + columns=[l]{fullflexible},% + xrightmargin=0zw,% + xleftmargin=3zw,% + %numbers=none,%行番号の表示 + %numberstyle={\scriptsize},%行番号の書体 + %numbersep=1zw,% + %stepnumber=1, + lineskip=-0.5ex,% + captionpos=b,%キャプションの位置 +} +\renewcommand{\lstlistingname}{Code} \input{dummy.tex} %% Font % ユーザが定義したマクロなど. @@ -12,7 +33,7 @@ % 和文表題 \title{並列プログラミングフレームワーク Cerium の\\ OpenCL, CUDA 対応} % 英文表題 -\etitle{} +\etitle{Support OpenCL, CUDA of parallel programming framework Cerium} % 所属ラベルの定義 \affilabel{1}{琉球大学大学院理工学研究科情報工学専攻 \\Interdisciplinary Infomation Engineering, Graduate School of Engineering and Science, University of the Ryukyus.} @@ -39,10 +60,26 @@ % 和文概要 \begin{abstract} + 当研究室では、PS3, Linux 及び MacOS X 上で動作する並列プログラミングフレームワーク Cerium を提案している。 + MacOS X 上で GPGPU を行うには、OpenCL または CUDA を用いる方法が考えられる。 + OpenCL, CUDA の API に対応した API を Cerium に用意することでデータ並列に対応した。 + タスク並列で実行する場合、データ転送がオーバーヘッドになる。 + この問題を解決するためには、kernel の実行中にデータ転送を行うことでデータ転送をオーバーラップする必要がある。 + OpenCL では CommandQueue、CUDA では Stream を複数用いることでデータ転送や kernel の実行を並列に行うことができる。 + 複数の CommandQueue, Stream を用いて、自動で並列実行を行うスケジューラーを実装した。 + 実装したスケジューラーを WordCount、FFT を例題に測定し、考察を行う。 \end{abstract} % 英文概要 \begin{eabstract} + In our labaratory, proposal parallel programming framework Cerium that is running on the PS3, Linux and Mac OS X. + In order to GPGPU on Mac OS X, it is thought that use OpenCL or CUDA. + Supported Data Parallel prepare API on Cerium that correspond OpenCL and CUDA API. + In case execute Task Parallel, data transfer causes overhead. + To resolve this problem, need to overlaped data transfer. + OpenCL and CUDA are possible parallel execution use of multiple CommandQueue and Stream. + We implement scheduler to automatically parallel execution, be use multiple CommandQueue and Stream. + We evaluate scheduler, be use WordCount and FFT. \end{eabstract} % 表題などの出力 @@ -51,22 +88,22 @@ % 本文はここから始まる \input{introduction} -\input{cerium} \input{opencl} \input{cuda} +\input{cerium} \input{cerium_gpu} \input{benchmark} \input{conclusion} -%\nocite{toma:2012a} -%\nocite{opencl} -%\nocite{opencl:ref} -%\nocite{opencl:applied} -%\nocite{yutaka:os} +\nocite{toma:2012a} +\nocite{opencl} +\nocite{opencl:ref} +\nocite{opencl:applied} +\nocite{yutaka:os} \bibliographystyle{ipsjunsrt} \bibliography{sigos} -\bibliography{cerium,book} -\input{bibliography} % 参考文献 +%\bibliography{cerium,book} +%\input{bibliography} % 参考文献 \end{document}