LoginSignup
10
7

More than 5 years have passed since last update.

FDPSを使ってみる その1

Last updated at Posted at 2017-03-01

はじめに

粒子系の並列シミュレーションフレームワークFDPSを使ってみる。FDPSとはFramework for Developing Particle Simulatorの略。チュートリアルやサンプルコードを見ただけでは、「最低限何を書けば何をしてくれるのか」がわかりにくかったので、実際に使ってみた自分用の覚書。その1と書いたが、どこまで続くかはわからない。

コードはここにおいてある。

環境

  • MacOS X
  • g++ (brewから入れた。clang++ではなく、GCCのc++)
  • OpenMPI (brewから入れた)

インストール

インストールはとりあえずcloneするだけ。個人的に~/gitに入れた。

$ mkdir git
$ cd git
$ git clone --depth=1 https://github.com/FDPS/FDPS.git 

基本的にhppファイルが見えればよいので、ビルドなどは不要。

環境設定

MacでMPI環境を作るのはわりと面倒。特にFDPSはなぜかMPIのC++バインディングを使っているので注意。環境構築についてはMacにMPI+OpenMPハイブリッド並列環境を構築するに書いたのでそちらを参照。この方法でFDPSが使えるようになるはず。

コンパイルとシリアル実行

FDPSのミニマルコード、初期化と終了処理のみのコードは以下のようになる。

test.cpp
//------------------------------------------------------------------------
#include <stdio.h>
#include <particle_simulator.hpp>
int
main(int argc, char **argv) {
  PS::Initialize(argc, argv);
  PS::Finalize();
}
//------------------------------------------------------------------------

コンパイルは、FDPSのparticle_simulator.hppが見えれば良い。~/git以下にいれたなら、こんなmakefileでコンパイルできるはず。

all: a.out

CC=g++

FDPS_PATH=$(HOME)/git/FDPS/src
CPPFLAGS=-I$(FDPS_PATH)

a.out: test.cpp
    $(CC) $(CPPFLAGS) $(LDFLAGS) $< -o $@

clean:
    rm -f a.out

実行して、以下のような表示がされればOK。

     //==================================\\
     ||                                  ||
     || ::::::: ::::::. ::::::. .::::::. ||
     || ::      ::    : ::    : ::       ||
     || ::::::  ::    : ::::::'  `:::::. ||
     || ::      ::::::' ::      `......' ||
     ||     Framework for Developing     ||
     ||        Particle Simulator        ||
     ||     Version 2.0 (2016/06)        ||
     \\==================================//

       Home   : https://github.com/fdps/fdps 
       E-mail : fdps-support@mail.jmlab.jp
       Licence: MIT (see, https://github.com/FDPS/FDPS/blob/master/LICENSE)
       Note   : Please cite Iwasawa et al. (in press.)

       Copyright (C) 2015 
         Masaki Iwasawa, Ataru Tanikawa, Natsuki Hosono,
         Keigo Nitadori, Takayuki Muranushi, Daisuke Namekata
         Junichiro Makino and many others
******** FDPS has successfully begun. ********
******** FDPS has successfully finished. ********

MPIによる並列実行

並列実行ができているかどうかのサンプル。

test.cpp
//------------------------------------------------------------------------
#include <stdio.h>
#include <particle_simulator.hpp>
int
main(int argc, char **argv) {
  PS::Initialize(argc, argv);
  PS::Comm::barrier();
  printf("%d/%d\n", PS::Comm::getRank(), PS::Comm::getNumberOfProc());
  PS::Finalize();
}
//------------------------------------------------------------------------

PS::CommというMPIのラッパーがある。例えばPS::Comm::getRank()が、MPI_Comm_rankに対応する。
バリアは単に表示が乱れるのを防ぐために入れてある。

並列実行をするには、コンパイル時にDPARTICLE_SIMULATOR_MPI_PARALLELマクロを有効にする。こんなmakefileになるだろう。

all: a.out

CC=g++

FDPS_PATH=$(HOME)/git/FDPS/src
CPPFLAGS=-I$(FDPS_PATH)
CPPFLAGS += -DPARTICLE_SIMULATOR_MPI_PARALLEL
LDFLAGS=-lmpi -lmpi_cxx

a.out: test.cpp
  $(CC) $(CPPFLAGS) $(LDFLAGS) $< -o $@

clean:
  rm -f a.out

前述の通り、FDPSはMPIのC++ bindingsを使っているため、OpenMPIなら -lmpi_cxxが必要になる。

ビルドして実行してみる。

$ make
$ mpirun -np 4 ./a.out 

     //==================================\\
     ||                                  ||
     || ::::::: ::::::. ::::::. .::::::. ||
     || ::      ::    : ::    : ::       ||
     || ::::::  ::    : ::::::'  `:::::. ||
     || ::      ::::::' ::      `......' ||
     ||     Framework for Developing     ||
     ||        Particle Simulator        ||
     ||     Version 2.0 (2016/01)        ||
     \\==================================//

       Home   : https://github.com/fdps/fdps 
       E-mail : fdps-support@mail.jmlab.jp
       Licence: MIT (see, https://github.com/FDPS/FDPS/blob/master/LICENSE)
       Note   : Please cite Iwasawa et al. (in prep.)

       Copyright (C) 2015 
         Masaki Iwasawa, Ataru Tanikawa, Natsuki Hosono,
         Keigo Nitadori, Takayuki Muranushi, Junichiro Makino
         and many others
******** FDPS has successfully begun. ********
0/4
3/4
2/4
1/4
******** FDPS has successfully finished. ********

できたっぽい。

まとめ

まずはFDPSを使ったコードをコンパイルし、並列実行するまでやってみた。FDPSはテンプレートを利用しており、FDPSフレームワークを利用するのにビルドは不要で、必要なヘッダをインクルードするだけ使える。

その2へ続く。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7