Mercurial > hg > Papers > 2017 > ikkun-thesis
view prepaper/finalpre.tex @ 14:4d204f37fc8a draft default tip
fix
author | ikkun |
---|---|
date | Thu, 16 Feb 2017 12:40:29 +0900 |
parents | f1307a309875 |
children |
line wrap: on
line source
\documentclass[twocolumn,twoside,9.5pt]{jarticle} \usepackage[dvipdfmx]{graphicx} \usepackage{picins} \usepackage{fancyhdr} %\pagestyle{fancy} \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 卒業研究発表会} \rhead{} \cfoot{} \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}} \setlength{\headheight}{0mm} \setlength{\headsep}{5mm} \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}} \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}} \setlength{\textwidth}{181mm} \setlength{\textheight}{261mm} \setlength{\footskip}{0mm} \pagestyle{empty} \input{dummy.tex} \begin{document} \title{Code Gear Data Gear によるGPGPU処理実装} \author{135704C 氏名 {東恩納}{琢偉} 指導教員 : 河野 真治} \date{} \twocolumn [ \maketitle \begin{abst} Gears OS is a highly reliable operating system based on continuation and meta computation. It support interface which is a set of data Gear and code Gear. In this research CUDA computation is implemented. CUDA worker has a same interface of CPU worker. In GPGPU small size of code and data are transferred to GPU and these are executed in parallel. Code Gear and data Gear are fit in this computational model. Task is a meta data Gear which has set of data Gear and code Gear. A stub meta code Gear extracts necessary data Gear and passes to normal level code Gear. In CUDA Worker, initialization of CUDA is performed. In the stub meta code Gear, data Gaers and code Gears are transferred to the GPU and executed. CUDA kernel code is very similar to code Gears representation, so we can generate automatically but it is possible to use CUDA specific functions. We use CMake in our implementation. A CUDA function can be switched with a flag. CMake macros are used to generate stubs and context. We check to basic execution of Gears task. \\ %Gears OS %interface のていぎ %Code Gear モジュール化 %CPUworkerをインターフェースにした %CUDAworkerの実装 %GPUでの実行こーどは転送したデータに対する比較的短いコードの実行 %これはdata Gear code Gearに対応している、実装しやすい %GPUにデータを転送し、GPU側でTaskを実行する部分はmeta計算として実装する %Taskは実行contextに格納されたコードとデータの集合である %その中から必要なデータを呼び出してノーマルレベルのコードに引き渡す部分 %をmeta Code Gearで記述し、それをstubと呼ぶ %stub 部分でGPUにデータを転送し、コードの実行を行う %ノーマルレベルのコードはGPU内のコードに近いので自動生成を行うこともで %きる。CUDa 固有の機能をそのまま記述しても構わないが既存のCPUでは起動で %きない場合がある。 %実装はCMakeを用いてCUDAを使用する場合と使用しない場合をフラグで切り替 %えるようにした。 %CMakeのマクロを用いて、stubなどの生成を行なっている。 %今回CUDA上でのTaskの基本的な実行を確認することができた。 \end{英語abst}] \thispagestyle{fancy} \section{Gears OS} Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear に細かく分割する。 接続する Gear を変更することでプログラムの振る舞いを変更することを可能 にする柔軟性、メタ計算による並行制御,モデル検査を用いた信頼性の確保を目的とする。 本研究では現状のGears OS の GPGPU サポートを行う。 \section{Code Gear と Data Gear} Code Gear は処理の基本として、 Input Data Gear を参照し、一つまたは複数の Output Data Gear に書き込む。また、接続された Data Gear 以外には参照を行わない。 Input Data Gear と Output Data Gear の2つによって、Code Gear の Data に対す る依存関係を解決し、 Code Gear の並列実行を可能とする。 Code Gear はCbCを元に記述されており、処理の移行はfunction callではないので、呼び出し元に戻る概念はない。 その代わりに、次に実行する Code Gear を軽量継続の goto で指定する。 Data Gear は、int や文字列などの Primitive Data Type の組み合わせ(struct)である。 Data Gearは様々な型を持つunionとして定義される。 Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることにある。 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。 \section{GPGPUとは} GPGPU とは、元々は画像出力や画像編集などの画像処理に用いられるGPUを画像処理以外に利用する技術の事である。\\ 画像の編集はピクセル毎に行われるため多大な数の処理を行う必要があるが、 GPU は CPU に比べコア数が多数あり、多数のコアで同時に計算することによって CPU よりも多数の並列な処理を行う事が出来る。\\ これによってGPUは画像処理のような多大な処理を並列処理することで、 CPU で処理するよりも高速に並列処理することが出来る。 しかし、GPU のコアはCPUのコアに比べ複雑な計算は出来ない構造であるため単純計算しか出来ない、また一般的にユーザーから GPU 単体に直接命令を書き込むことも出来ないなどの問題点も存在する。 GPGPU は CPU によって単純計算のTaskを GPU に振り分ける事によって、 GPU の問題点を解決しつつ、高速な並列処理を行うことである。 Gears OS による GPU 処理は図\ref{fig:gpgpu}の様になり、Worker によって Taskを受け渡し、GPUWorker によって並列処理が行われる。また Data Gear へのアクセスは接続された Code Gear からのみであるので並列処理中に変数の値が書き変わることがない。 \begin{figure}[ht] \centering \includegraphics[width=90mm]{pic/gearsos.pdf} \caption{Gears OS による GPGPU} \label{fig:gpgpu} \end{figure} \section{CUDAWoker の実装} CUDAWorker は Task を queue から受け取り、 thread を作成する。\\ その後 Task を まとめて CUDATask としてCUDAに送る。CUDATwice の処理が終わるまで sleep で待機し、CUDATwiceから Task を受け取る。 \section{CUDATwiceの実装} CUDATwice は GPU 側で行われる処理で、値を2倍する処理を繰り返すプログラムとなっており、 \section{CMakeによるコンパイル} CMake はビルド自動化ツールであり、プログラムをコンパイル行う際にライブラリや動作環境によって様々な設定を行う必要がありますが、 CMake にはそれらのファイルやライブラリを探し出して実行することが出来ます。\\ CMake のビルドは2段階からなり、 CMake の制御ファイルの CMakeList.txt によってビルドするファイルを指定でき、指定されたファイルをビルドする際にはまずビルドに必要なライブラリやファイルを探し、通常のビルド環境用のビルドファイルを作成し、次にビルドするファイルにあったビルドを行います。 CMake は Windows や Linux 等、複数のOS の環境に対応している他、様々なコンパイルオプションがあり、クロスコンパイルや、ユーザーがコンパイルのルールを追加することで特殊なコンパイラや OS にも対応することが出来る。\\ 今回の研究では、CbC という本研究室独自の言語と CUDA 専用コンパイラの nvcc を両立させる必要があり、CMakeは一般的に1つのコンパイラしか同時に扱えないため、CMakeでサポートされているマクロを用いて同時にコンパイルすることが出来た。 \section{まとめ} 本研究室で研究している Code Gear Data Gear を用いて記述されたプログラムをCMakeを用いてコンパイルすることで CUDA 上で動かすことが出来た。\\ \section{今後の課題} Gears OS の並列性や信頼性を検証するために今回例題として使用した twice とは違う、依存関係のある例題を用いた検証を行いたい。 また、並列処理による処理速度の向上の計測を行っていきたい。 \begin{thebibliography}{10} \bibitem{cerium} 宮國 渡,河野真治,神里 晃,杉山千秋:Cell 用の Fine-grain Task Manager の実装,情報処理学会 システムソフトウェアとオペレーティング・システム研究会(OS) (2008). \bibitem{alice} 赤嶺一樹,河野真治:DataSegment API を用いた分散フレームワークの設計,日本ソフトウェア科学会第28回大会論文集 (2011). \bibitem{gears} 伊波 立樹, 東恩納 琢偉,河野 真治:Code Gear、Data Gear に基づく OS のプロトタイプ、 情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS) (2016). \bibitem{segment} 河野真治,杉本 優:Code Segment と Data Segment によるプログラミング手法,第54回プログラミング・シンポジウム (2013). \bibitem{monad} Eugenio Moggi, Notion of Computation and Monads(1991) \bibitem{cbc-llvm} 徳森海斗,河野真治:Continuation based C の LLVM/clang 3.5 上の実装について,情報処理学会システムソフトウェアとオペレーティング・システム研究会(OS) (2014). \bibitem{opencl} {Aaftab Munshi, Khronos OpenCL Working Group}: {\em {The OpenCL Specification Version 1.0}} (2007). \bibitem{cuda} : {CUDA}, {https://developer.nvidia.com/category/zone/cuda-zone/}. \end{thebibliography} \end{document}