RaspberryPiでクラスタ構築した話

今回はRaspberry Pi3 Model Bを17台用いて並列計算システムを構築した話をします。

並列計算(並列演算)とは?

基本的に1つのCPUでは1つの計算しかできません。同時に複数の計算をするためはマルチコアCPUやマルチプロセッサが必要です。 同時に複数の計算を行うことを並列計算(並列演算)といいます。並列演算を行うことで、処理時間 が短縮でき、処理に膨大な時間がかかる処理も短時間で行えます。

クラスタとは?

並列演算を実現するために複数台のコンピュータをネットワークで接続し、1つのコンピュータに見立てたシステムがクラスタです。クラスタを用いることで非常に多くのマルチコアCPUを用いて並列計算することが可能です。それによって性能の向上、負荷の分散が見込めます。スーパーコンピュータの多くがクラスタ構成です。

RaspberryPiとは?

RaspberryPiはイギリスのラズベリー財団によって開発されているシングルボートコンピュータです。性能はそれほど良くありませんが、安価に入手することができます。モデルによって性能が異なりますが、今回使用したRaspberryPi3 ModelB は1.2GHz x 4Coreのプロセッサ、1GBのメモリが搭載されています。

今回のクラスタ

計算ノードにRaspberryPi3 ModelBを16台、マスターノードに1台の計17台。それらをスイッチングハブを介して接続しました。マスターノードにはDHCPやDNSを構築し、OpenMPIを用いた計算の割り振りをさせます。よって、計算の速度には大きく影響しません。

理論上計算ノードの性能は1.2GHz x 64Coreのプロセッサ、16GBのメモリとなります。

理論上の性能

並列化によって、プログラムの高速化、負荷の軽減が見込めます。並列実行数を2倍にすれば必要な時間は半分になります。n倍にすれば1/n倍の時間で実行できます。

性能評価

今回構築したクラスタの性能を評価する方法として、ベンチマークソフトを使ってしますのは味気ないので、実際にOpenMPIを用いたレイトレーシングと呼ばれる3DCG描画の並列化に挑戦しました。使用言語はC++です。

レイトレーシングについては趣旨がずれているので、今回は省略します。

プログラムによって以下のような画像を並列実行数を変えて実行し、所要時間を計測しました。

結果が下のグラフです。

16スレッドまでは理論に近い所要時間が見られましたが、それを超えるとあまり変化がなくなりました。これは並列化では短縮できない時間(通信時間やマスターノードでの処理時間)があるためです。

RaspberryPi

Posted by Sunaipu