2011 年度 卒業論文発表会（2012 年 2 月 23 日）

知的システムデザイン研究室

Ruby を用いた分散 GPGPU フレームワーク『ParaRuby』
中村 涼
Ryo NAKAMURA

1

はじめに
Graphics Processing Units(GPU) を用いて汎用目的の並列処理を行う手法 (General-purpose computing ongraphics processing units; GPGPU) が，近年広く利用されるようになっている 1) 2) 3) ．GPU は CPU と比べて単純ながらも多数のコアを持ち，並列性の高い問題に対して価格あたり，および消費電力あたりの性能が優れている．
しかし，GPU を用いてプログラミングを行うには，並列処理やデバイスのメモリ構造などのアーキテクチャにFig. 1 フレームワークの構造関する専門知識や，各環境独自のプログラミングモデルの学習など，実装に高度な技術を要する．

ParaRuby フレームワークの提案

3

本研究では，GPGPU プログラミングを支援することを目的として，Ruby を用いた分散 GPGPU フレーム

ParaRuby は，Ruby を利用した分散 GPGPU フレー

ワーク ParaRuby を提案する．このフレームワークによムワークである．GPU を搭載したサーバで予めプログり，ネットワークを介した複数ノードの GPU による分ラムを動作させ処理を待ち受けておき，クライアントか散処理が容易に実行可能になる．サーバの GPU 上でのらサーバに対して処理を委譲し，処理結果をクライアン

処理は Ruby のメソッドとしてクライアント上から呼びトで利用する仕組みを支援する．これにより，GPU を出せるようになり，CPU/GPU 間やクライアント/サー持たないマシンからの GPU 処理や，複数サーバを利用バ間のデータ転送がフレームワークにより隠蔽される．

した分散処理が実行可能になる．
フレームワークの構造を Fig.1 に示す．ParaRuby でParaRuby を評価するために，モンテカルロ法による多次元球の求積，およびマンデルブロ集合の計算の 2 つは，クライアントで実行するプログラムは Ruby で記述のアプリケーションを用い，性能を評価した．

し，サーバで実行するプログラムは OpenCL C 言語ま2

たは CUDA C 言語で記述する．サーバで実行するプロ

GPGPU プログラミンググラムを Ruby プログラムの中に文字列として記述し，現在主流となっている GPGPU プログラミング環境とクライアントからサーバに送信することでサーバ上のしては，GPU ベンダーの NVIDIA が提供する CUDA4)GPU で処理を行い，結果をクライアントで利用する形や，Apple によって提唱された OpenCL5) がある．両となる．

環境とも，C 言語とよく似た構文で記述することがで

評価

き，GPU のメモリ確保，解放，データ転送，その他各

4

種 GPU の操作に関する機能が提供されている．

GPGPU プログラミングでは，CPU 側の処理と GPU

ParaRuby を用いた GPU 処理性能を評価するため，モンテカルロ法による多次元球の求積，およびマンデル側の処理の区別を注意しておく必要があり，CPU 側をブロ集合の計算の 2 つのアプリケーションで実行時間をホスト，GPU 側をデバイスと呼ぶ．ホストによる逐次評価した．評価に用いたマシンの環境を Table1 に示す．

処理の中でデバイスの並列処理を呼び出し，処理結果を4.1

再びホストで利用する形となる．ホストとデバイスの処

モンテカルロ法による多次元球の求積

モンテカルロ法による多次元球の求積では，105 要素

理は明確に分けて記述し，カーネル関数と呼ばれる特殊の座標点に対してスレッドを割り当て，4 つの実装方法な関数に記述された処理がデバイスで処理され，それ以による実行時間の違いを比較した．モンテカルロ法によ外はホストで処理される．

る多次元球求積の実行結果を Fig.2 に示す．

91E+3	  ParaRuby	  Ruby	  computa(on	  (me[sec]	

1E+2	  C	  OpenCL	  1E+1	  1E+0	  1E-­‐1	  1E-­‐2	  2^
0	  2^
1	  2^
2	  2^
3	  2^
4	  2^
5	  2^
6	  2^
7	  2^
8	  2^
92^ 	  102^ 	  112^ 	  122^ 	  132^ 	  142^ 	  15	  1E-­‐3	  dimension	  	Fig. 3 マンデルブロ集合計算の実行結果

Fig. 2 多次元球求積の実行結果

荷に関係なく一定であり，実行時間は処理の負荷に応じFig.2 の縦軸は実行時間，横軸は球の次元数を表しており，ともに対数軸で表している．Fig.2 を見ると，Cて変化していることが分かる．
また 1.5 倍〜2.5 倍程度の台数効果が見られ，負荷が言語は Ruby よりも高速なものの，グラフの傾きはどち大きいほど台数効果が大きくなることがことが分かる．

らも同程度である．一方，ParaRuby や OpenCL によりGPU を利用した実装では傾きが小さく，一定のオーバー5ヘッドは存在するものの負荷が大きくなるほど GPU のサーバ上の GPU を利用した GPGPU プログラミング利用が有効であることが分かる．

4.2

まとめを容易に実現するために，Ruby からサーバ上の GPUで処理を行う仕組みとして，分散 GPGPU フレームワー

マンデルブロ集合の計算

マ ン デ ル ブ ロ 集 合 は ，複 素 平 面 上 の 集

ク ParaRuby を開発した．このフレームワークにより，合 が 作 り 出 す フ ラ ク タ ル で あ り，複 素 数 列{}
Zn |zn+1 = zn2 + c, z0 = 0 n∈N と い う 条 件 を 満 た

複数のリモートノードの GPU を利用した並列処理を実現できる．

す複素数 c が作る集合である．Z の各要素はそれぞれ独

このフレームワークを用いて 2 つのアプリケーション立して求められることから，Zn の値を GPU のスレッで評価を行った結果，クライアントの CPU 上のみで処ドを用いて並列に計算を行うことができる．

理した場合と比べ，フレームワークからネットワーク上マンデルブロ集合の計算では，105 画素に対し，異なのサーバの GPU を利用した場合に高い実行速度が得らる n の値で 2 つのサーバで ParaRuby を用いた場合のれることを確かめた．また，複数のノードに対して処理計算時間を測定した．

を分けて実行することでより高い実行速度が得られることを確かめた．

マンデルブロ集合計算に要した時間を Fig.3 に示す．
図中の縦軸は実行時間，横軸は n に与える値を表し，各

参考文献

n についてサーバ 1 台の場合を左側の棒，2 台の場合を1) 湯川英宜, 平野敏行, 西村康幸, 佐藤文俊. Gpu によるタンパク質
高精度静電ポテンシャル計算の高速化. 生産研究, Vol. 61, No. 2,
pp. 103–110, 2009.

右側の棒に表している．network はサーバとクライアント間の通信時間，server はサーバ上での実行時間，rate2) 成瀬彰, 住元真司, 久門耕一. Gpgpu 上での流体アプリケーションの高速化手法 : 1gpu で姫野ベンチマーク 60gflops 超 (高性能計算とアクセラレータ). 情報処理学会研究報告, 2008-HPC, Vol.
2008, No. 99, pp. 49–54, 2008-10-08.

はサーバ 1 台の場合に比べてサーバ 2 台の場合に何倍の速度向上が見られたかを表している．
通信時間と実行時間の内訳から，通信時間は処理の負3) 東竜一, 藤本典幸, 萩原兼一. Gpu の汎用計算環境 cuda による主
記憶上の大規模なテキストに対する高速な全文検索の検討, 2008hpc. 情報処理学会研究報告, 2008-HPC, No. 19, pp. 139–144,2008-03-05.

Table 1 実行環境

CPUGPUMemoryOSClientCore i7 1.8GHz
4GB
Mac OS X 10.7

4) NVIDIA. Compute Unified Device Architecture Programming Guide, 2007.

ServerCore 2 Duo 2.26GHz
GeForce 9400
4GB
Mac OS X 10.75) John E Stone, David Gohara, and Guochun Shi. OpenCL: Aparallel Programming Standard for Heterogenous Computing
Systems. Computing in Science Engineering, 12 Issue:3, pp.
66–73, 2010.

10