タグ別アーカイブ: openmpi

4 Parallella Cluster

Parallellaでクラスタリング その3 演算ノードの追加

昨年末のクリスマス特価$99 @Amazon.comで買い足したParallella Desktopを演算ノードとしてクラスタに追加しました。作業そのものは既存のノードと同じく

  1. 本家サイトを参考にセットアップ
  2. 日本語化
  3. マスター演算ノードの公開鍵を登録
  4. NFSクライアント設定

だけで追加できます。さっそく動かしてみましょう。

続きを読む

Epiphany SDK + OpenMPI

ParallellaにはEpiphanyが乗っていますので、これを使わない手はありません。OpenMPIでCPU単位での分散を行い、そこからさらにEpiphanyに処理を投げる形になります。

今回は動作確認ということでルーズに行きましょう。~/tests/mpi/hello.cをベースに、手抜きなスケルトンを用意します。

#include <mpi.h>

int main(int argc, char *argv[]) {
  MPI_Init(&argc, &argv);

  // ここにロジックを埋め込む

  MPI_Finalize();
  return 0;
}

ロジック部分は~/epiphany-examples/apps/hello-world/を参考にします。というかコピペします。上記スケルトンのロジック部分に、src/hello_world.cのmain()の中身をそのままコピペです。Epiphanyにロードさせるアプリはsrc/e_hello_world.cをそのまま流用します。

続きを読む

Parallellaでクラスタリング

いわゆるBeowulf型のクラスタをParallellaで構築してみます。と言っても、最新のインストールイメージにデフォルトでOpenMPIがインストールされていますので、これを利用することで簡単にクラスタリングを試すことができます。

ここでは、ハブを介して2台のParallella DesktopをGbEで接続し、DHCPでMACアドレスに対して静的にIPアドレスを割り当てるものとします。片方のParallellaのホスト名をparallella01, もう一台をparallella02とし、parallella01をマスター演算ノードとします。parallella01, 02のホスト名・IPアドレスの紐付けは/etc/hostsあるいはLANのDNS等で引けるようにしておきます。

  1. parallella01でssh-keygenで公開鍵・秘密鍵のペアを生成します
  2. 生成した公開鍵をparallella02にコピーし、~/.ssh/authorized_keysに追加します
  3. parallella01で以下のコマンドを実行します
$ cd parallella-examples/para-para
$ mpirun -np 4 -host parallella01,parallella02 ./hello-mpi.elf
Hello World from MPI Process 0 on machine parallella01
Hello World from MPI Process 1 on machine parallella01
Hello World from MPI Process 2 on machine parallella02
Hello World from MPI Process 3 on machine parallella02

あっさりクラスタリングできました。-npオプションの引数は2ノード2コア=4となります。4より大きい値を指定するとNUMA云々でエラーになります。なお、para-paraアプリと同じようなアプリが~/test/mpiにもあります。こちらはアプリを自分でmakeする必要がありますが、基本的な実行方法は同じです。

今回は各ノードに個別に同じバイナリを置きましたが、マスター演算ノード(ここではparallella01)のファイルシステムをNFSでスレーブ演算ノード(ここではparallella02)にマウントさせる、という方法も可です。というか、そちらの方がよりBeowulfっぽいかも。ただ、Parallella標準のlinux kernelはNFSサーバに対応してないっぽいです。