view paper/conclusion.tex @ 37:7c5bf9ec7eb3

conclusion.but should fix.
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Mon, 16 Feb 2015 02:15:42 +0900
parents 79d16cee0afd
children 05add77d93b2
line wrap: on
line source

\chapter{結論} \label{chapter:conclusion}

\section{まとめ}
本研究室で開発している Cerium を用いて、
マルチプラットフォーム対応並列プログラミングフレームワークに関する研究を行った。

マルチコア CPU や GPU といったマルチプラットフォームなアーキテクチャ上でリソースを有効活用するには、
それぞれのプラットフォームに対して適した形でプログラムが並列に動作できるようチューニングする必要がある。
しかしこれらのチューニングは非常に複雑になる。
動作させたいプラットフォームに対応した、適切なチューニングを行えるフレームワークが必要である。

Cerium では Scheduler がパイプラインの機構を持っており、Task はパイプラインに沿って実行されている。
Scheduler が受信した Task は既に TaskManager が依存関係を解決しているため、実行順序は任意で良く、パイプラインによる実行が可能となっている。
Cerium はプログラムの様々なレベルでパイプライン処理を行っており、
WordCount のようなシンプルな問題でも並列化することで性能向上が確認できた。

マルチコア CPU への対応として、 SynchronizedQueue を用いた機構を実装し、並列実行を可能にした。
WordCount と Sort による測定の結果、高い並列度を維持出来ていることを確認した。
また、より高い性能を持つ計算機で測定したところ、速度の向上を確認できた。

OpenCL と CUDA を用いて GPGPU への対応を行った。
WordCount による測定を行ったが、データ並列実行をサポートすることで飛躍的な性能を確認できた。
SIMD 型であることやループ命令を苦手とするといった理由から、
GPU における演算はデータ並列による実行をサポートしなければ性能が出ない事がわかった。
Cerium においてプログラマは Task を記述し、
Input データを用意した後はデータ並列用の API で Task を spawn することでデータ並列用の Task を生成する。
TaskManager はプログラマが記述した単一の Task を複数生成し、受け取ったデータ(Input)に対しその Task を割り当てる。
生成した複数の Task を並列実行する事でデータ並列実行を実現した。
また、GPU は SharedMemory でないため、入出力がネックになる場合が多い。
それらのオーバヘッドを吸収するために GPU 制御のコマンドはパイプライン形式で実行していくのが望ましい。

更に、 Blocked Read による並列処理向けのI/Oの実装を行った。
I/O 専用の Thread を追加し、Task が割り込みが起きた際のオーバーヘッドを減らすことに成功した。
一般的なfile open である mmap と read の測定も行い、BlockedRead を含めたそれぞれの読み込みに対して、
どのような状況でより性能を発揮できるのか考察を行った。

\section{今後の課題}