2015年10月23日金曜日

OpenMP + OpenMPI Hybrid Computing

最先端分野で用いられるコンピュータ環境において、分散メモリに対しMessage Passing Interface (MPI)、共有メモリに対しMulti-Threadによって並列化を行う。更にCPU単位でSIMDなどがある。これらのハードウェア資源に対し効率よく計算を高速化するための共通インターフェースが用意されている。それが掲題のライブラリだ。

OpenMPIではバージョン1.8.xまではちゃんとMultithread対応をうたっていなかったようで、1.10.0からオフィシャルに対応したようだ。試してみると1.6.5では動くけど1.8.xでは動かなかったり、不安定だった。そこで、OpenMPI 1.10.0を OS X Yosemiteにインストールついでに、OpenMP対応のClang/LLVMをインストールしてみた。

手順としては、OpenMP対応のClangをインストールし、OpenMP用のランタイムライブラリ Intel OpenMP Runtime Libraryをインストールする。次にOpenMP用Clangに対し、OpenMPIをインストールする。

パッチなど当てる必要も無く、掛かったのは待ち時間だけ。Intelのサンプルプログラムもちゃんと動作した。POSIX Threadなど自前でThread Programmingをする人はOpenMPなどは必要ないけれど、あれば便利。

ちなみに、cmakeはkitwareが提供するツールで無い場合はこれもインストールする必要がある。

OpenMP Clang

 git clone https://github.com/clang-omp/llvm
 git clone https://github.com/clang-omp/compiler-rt llvm/projects/compiler-rt
 git clone -b clang-omp https://github.com/clang-omp/clang llvm/tools/clang
 mkdir build
 cd build
 cmake -G "Unix Makefiles" ../llvm
 make
 sudo make install

OpenMPI

./configure --enable-mpi-thread-multiple CXX=/usr/local/bin/clang++ CC=/usr/local/bin/clang 

Intel OpenMP Runtime Library

サイトから最新のものをダウンロードし、解凍する。
cd libomp_oss
make compiler=/usr/local/bin/clang
cd /usr/local/include
sudo ln -s /Users/momo/libomp_oss/exports/common/include/omp* .
cd ../lib
sudo ln -s /Users/momo/libomp_oss/exports/mac_32e/lib.thin/libiomp5.dylib .

0 件のコメント:

コメントを投稿