\underline{琉球大学主催工学部情報工学科卒業研究発表会}

Code Gear Data Gear による GPGPU 処理実装

135704C 氏名東恩納琢偉指導教員 : 河野真治

1 Gears OS

Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear に細かく分割する。接続する Gear を変更することでプログラムの振る舞いを変更することを可能にする柔軟性、メタ計算による並行制御, モデル検査を用いた信頼性の確保を目的とする。本研究では現状の Gears OS の GPGPU サポートを行う。

2 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 の実行時間、メモリ使用量を予測可能なものにする。 [label=CGDG, caption=CGDG]src/sample.c

3 GPGPU とは

GPGPU とは、元々は画像出力や画像編集などの画像処理に用いられる GPU を画像処理以外に利用する技術の事である。画像の編集はピクセル毎に行われるため多大な数の処理を行う必要があるが、 GPU は CPU に比べコア数が多数あり、多数のコアで同時に計算することによって CPU よりも多数の並列な処理を行う事が出来る。これによって GPU は画像処理のような多大な処理を並列処理することで、 CPU で処理するよりも高速に並列処理することが出来る。しかし、 GPU のコアは CPU のコアに比べ複雑な計算は出来ない構造であるため単純計算しか出来ない、また一般的にユーザーから GPU 単体に直接命令を書き込むことも出来ないなどの問題点も存在する。 GPGPU は CPU によって単純計算の Task を GPU に振り分ける事によって、 GPU の問題点を解決しつつ、高速な並列処理を行うことである。また Data Gear へのアクセスは接続された Code Gear からのみであるから、処理中に変数が書き変わる事がない。

図 1: Gears OS による GPGPU

4 CUDAWoker の実装

CUDAWorker CPU では Task を queue から受け取り GPU 側で処理する CUDATwice に Task を渡す。さらに CUDATwice の処理が終わるまで sleep で待機し、 CUD-ATwice から Task を受け取る。

5 CUDATwice の実装

CUDATwice

6 CMake によるコンパイル

7 今後の課題

参考文献

[1] 宮國 渡，河野真治，神里 晃，杉山千秋： Cell 用の Fine-grain Task Manager の実装，情報処理学会システムソフトウェアとオペレーティング・システム研究会 (OS) (2008).

[2] 赤嶺一樹，河野真治： DataSegment API を用いた分散フレームワークの設計，日本ソフトウェア科学会第 28 回大会論文集 (2011).

[3] 伊波立樹, 東恩納琢偉, 河野真治:Code Gear、 Data Gear に基づく OS のプロトタイプ、情報処理学会システムソフトウェアとオペレーティング・システム研究会 (OS) (2016).

[4] 河野真治，杉本 優： Code Segment と Data Segment によるプログラミング手法，第 54 回プログラミング・シンポジウム (2013).

[5] Eugenio Moggi, Notion of Computation and Monads(1991)

[6] 徳森海斗，河野真治： Continuation based C の LLVM/clang 3.5 上の実装について，情報処理学会システムソフトウェアとオペレーティング・システム研究会 (OS) (2014).

[7] Aaftab Munshi, Khronos OpenCL Working Group: The OpenCL Specification Version 1.0 (2007).

[8] : CUDA, https://developer.nvidia.com/category/zone/cudazone/.