あなたのMacBookAirで並列計算をする可能性は無いでしょう.しかし,MacOSXは計算クラスターと同じ系統のソフトウェアですから,あなたのMacBookAirにも並列計算システムをインストールしておけば,プログラム開発を手元で行うことができるようになります.
パッケージの利用方法
ここのopenmpiなんちゃらをインストール.使い方だと?あれ?どうするんだったっけ。多分Boostと類似した方法だろうな
再配布パッケージの作成
いくらなんでも古すぎるので, 作り直しておく.ええっと今は,OpenMPI v5.0.7くらいね.
ARM64ルド
ARM64ターミナルで実行する. 前回ビルドしたのが5年以上前なのか・・・うまくいくのかこれ. いやま,実際にノートPCで並列計算することはないので.形式上載せてないと, Linuxと同じソフトがビルドしにくいってだけなんで.
$ cd arm64 $ tar zxf ../openmpi-5.0.7.tar.bz2 $ cd openmpi-5.0.7 $ ./configure --prefix=/usr/local -disable-mpi-fortran Open MPI configuration: ----------------------- Version: 5.0.7 MPI Standard Version: 3.1 Build MPI C bindings: yes Build MPI Fortran bindings: no Build MPI Java bindings (experimental): no Build Open SHMEM support: no (disabled) Debug build: no Platform file: (none) Miscellaneous ----------------------- Atomics: GCC built-in style atomics Fault Tolerance support: mpi HTML docs and man pages: installing packaged docs hwloc: internal libevent: internal Open UCC: no pmix: internal PRRTE: internal Threading Package: pthreads Transports ----------------------- Cisco usNIC: no Cray uGNI (Gemini/Aries): no Intel Omnipath (PSM2): no (not found) Open UCX: no OpenFabrics OFI Libfabric: no (not found) Portals4: no (not found) Shared memory/copy in+copy out: yes Shared memory/Linux CMA: no Shared memory/Linux KNEM: no Shared memory/XPMEM: no TCP: yes Accelerators ----------------------- CUDA support: no ROCm support: no OMPIO File Systems ----------------------- DDN Infinite Memory Engine: no Generic Unix FS: yes IBM Spectrum Scale/GPFS: no (not found) Lustre: no (not found) PVFS2/OrangeFS: no $ make all $ find . -name \*dylib ./opal/.libs/libopen-pal.80.dylib ./opal/.libs/libopen-pal.dylib ./ompi/.libs/libmpi.40.dylib ./ompi/.libs/libmpi.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_pthreads-2.1.7.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_extra.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_extra-2.1.7.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent-2.1.7.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_pthreads.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_core.dylib ./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_core-2.1.7.dylib ./3rd-party/hwloc-2.7.1/hwloc/.libs/libhwloc.15.dylib ./3rd-party/hwloc-2.7.1/hwloc/.libs/libhwloc.dylib ./3rd-party/prrte/src/.libs/libprrte.dylib ./3rd-party/prrte/src/.libs/libprrte.3.dylib ./3rd-party/openpmix/src/.libs/libpmix.dylib ./3rd-party/openpmix/src/.libs/libpmix.2.dylib
X86ビルド
X86ターミナルで実行する.
$ cd x86_64
$ tar zxf ../openmpi-5.0.7.tar.bz2
$ cd openmpi-5.0.7
$ ./configure --prefix=/usr/local -disable-mpi-fortran $ make all
$ find . -name \*dylib
./opal/.libs/libopen-pal.80.dylib
./opal/.libs/libopen-pal.dylib
./ompi/.libs/libmpi.40.dylib
./ompi/.libs/libmpi.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_pthreads-2.1.7.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_extra.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_extra-2.1.7.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent-2.1.7.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_pthreads.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_core.dylib
./3rd-party/libevent-2.1.12-stable-ompi/.libs/libevent_core-2.1.7.dylib
./3rd-party/hwloc-2.7.1/hwloc/.libs/libhwloc.15.dylib
./3rd-party/hwloc-2.7.1/hwloc/.libs/libhwloc.dylib
./3rd-party/prrte/src/.libs/libprrte.dylib
./3rd-party/prrte/src/.libs/libprrte.3.dylib
./3rd-party/openpmix/src/.libs/libpmix.dylib
./3rd-party/openpmix/src/.libs/libpmix.2.dylib
豚ビルド
豚リンゴを使う.
$ cd arm64
$ fswatch -x /usr/local >& files.log
$ sudo make install
$ kill %1
$ fswatch_analyze.sh -c _binary files.log
$ cd x86_64
$ fswatch -x /usr/local >& files.log
$ sudo make install
$ kill %1
$ fswatch_analyze.sh -c _binary files.log
$ cd ..
$ fatty_apple.sh arm64/_binary x86_64/_binary ←新型MacOS豚リンゴ. より美味しくなって再登場ってか
インストール先書き換えモードが発動しました
書き換え対象を特定
/usr/local/bin/plookup を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/hwloc-bind を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/mpirun を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/ompi_info を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/prte を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/hwloc-distrib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/palloc を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pattrs を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/hwloc-calc を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/hwloc-info を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/prun を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pevent を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/prte_info を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/hwloc-patch を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/opal_wrapper を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pmixcc を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pquery を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/hwloc-diff を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/lstopo-no-graphics を書き換えたいな. x86_64 arm64 を作成.書き換え完了
/usr/local/bin/hwloc-ps を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pps を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pctrl を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pmix_info を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/prted を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/hwloc-annotate を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/bin/pterm を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libopen-pal.80.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/hwloc/hwloc_opencl.so を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libhwloc.15.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent_pthreads-2.1.7.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent_extra-2.1.7.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libpmix.2.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent_extra.a を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent.a を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent_core.a を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent-2.1.7.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libprrte.3.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libmpi.40.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/pmix/pmix_mca_pcompress_zlib.so を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/openmpi/libompi_dbg_msgq.so を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent_pthreads.a を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
/usr/local/lib/libevent_core-2.1.7.dylib を書き換えたいな. x86_64 arm64 を作成. 書き換え完了
ううん.いちおうヘッダーファイルは入るんだが. /usr/local/lib/pmixの中身が変だ.
$ ls -l /usr/local/lib/pmix/
total 2928
-rwxr-xr-x 1 root wheel 932 3 9 2021 mca_bfrops_v12.la
-rwxr-xr-x 1 root wheel 116366 3 9 2021 mca_bfrops_v12.so
-rwxr-xr-x 1 root wheel 932 3 9 2021 mca_bfrops_v20.la
-rwxr-xr-x 1 root wheel 133982 3 9 2021 mca_bfrops_v20.so
おいおい,何を目指してPMIXビルドしたんだ?ここはLinuxじゃないぞ.だから・・・実際には動作しないなこのままじゃ.まあ動かすことはないけどね.
やっぱ,Linuxと同じでPMIXビルドしてから(MUNGEいらないのか?)OPENMPIビルドするべきでしょう.
再配布パッケージの作成方法
豚の時
豚で作っとかないと, AppleM1でXCodeできねえよ.だりーからロゼッタでな.
#------------------------------- # [1] X86_64ターミナル #------------------------------- cd openmpi-4.0.0 make distclean ./configure --prefix=/usr/local CC=clang CXX=clang++ LDFLAGS=-Wl,-headerpad_max_install_names -disable-mpi-fortran make all mkdir x86_64 find . -name \*dylib -not -type l |while read file; do cp $file x86_64 ; done
これで, x86_64の内部に
lipo -info x86_64/* Non-fat file: x86_64/libmca_common_monitoring.50.dylib is architecture: x86_64 Non-fat file: x86_64/libmca_common_ompio.41.dylib is architecture: x86_64 Non-fat file: x86_64/libmca_common_sm.40.dylib is architecture: x86_64 Non-fat file: x86_64/libmpi.40.dylib is architecture: x86_64 Non-fat file: x86_64/libompitrace.40.dylib is architecture: x86_64 Non-fat file: x86_64/libopen-pal.40.dylib is architecture: x86_64 Non-fat file: x86_64/libopen-rte.40.dylib is architecture: x86_64
ができた.
#------------------------------ # [2] ARM64ターミナル #------------------------------- cd openmpi-4.0.0 make distclean ./configure --prefix=/usr/local CC=clang CXX=clang++ LDFLAGS=-Wl,-headerpad_max_install_names -disable-mpi-fortran make all mkdir arm64 mv x86_64 .. find . -name \*dylib -not -type l |while read file; do cp $file arm64 ; done mv ../x86_64 .
これで, arm64の内部に
lipo -info arm64/* Non-fat file: arm64/libmca_common_monitoring.50.dylib is architecture: arm64 Non-fat file: arm64/libmca_common_ompio.41.dylib is architecture: arm64 Non-fat file: arm64/libmca_common_sm.40.dylib is architecture: arm64 Non-fat file: arm64/libmpi.40.dylib is architecture: arm64 Non-fat file: arm64/libompitrace.40.dylib is architecture: arm64 Non-fat file: arm64/libopen-pal.40.dylib is architecture: arm64 Non-fat file: arm64/libopen-rte.40.dylib is architecture: arm64
ができた.
#------------------------------ # [2] ARM64ターミナル #------------------------------ fswatch -x /usr/local/ > files.log & sudo make install mkdir universal cd x86_64 for file in * do lipo -create -arch x86_64 $file -arch arm64 ../arm64/$file -output ../universal/$file done cd .. sudo cp universal/* /usr/local/lib lipo -info universal/* Architectures in the fat file: ../universal/libmca_common_monitoring.50.dylib are: x86_64 arm64 Architectures in the fat file: ../universal/libmca_common_ompio.41.dylib are: x86_64 arm64 Architectures in the fat file: ../universal/libmca_common_sm.40.dylib are: x86_64 arm64 Architectures in the fat file: ../universal/libmpi.40.dylib are: x86_64 arm64 Architectures in the fat file: ../universal/libompitrace.40.dylib are: x86_64 arm64 Architectures in the fat file: ../universal/libopen-pal.40.dylib are: x86_64 arm64 Architectures in the fat file: ../universal/libopen-rte.40.dylib are: x86_64 arm64 # kill %1 fswatch_analyze.sh -c _binary files.log pkgbuild --identifier openmpi --root _binary openmpi-4.0.0-osx11.2.pkg
Intelの時
MacOSのclangコンパイラは剛速ですから,10分程度しかかかりません.
- OpenMPIサイトからopenmpi-X.X.X.tar.gzをダウンロード
- tar xf ~/Downloads/openmpi-X.X.X.tar
- cd openmpi-X.X.X
- ./configure --prefix=/usr/local CC=clang CXX=clang++ LDFLAGS=-Wl,-headerpad_max_install_names -disable-mpi-fortran
これで,gccではなくLLVMのコンパイラが設定される. Fortranは利用しないように設定される. - make all
- fswatch -x /usr/local > openmpi.log &
- sudo make install
- kill %1
これで mpicxx とか mpif90 とかのコマンドが動作すればOK.
ついでなので、バイナリー配布パッケージを作る。
-
インストールしたファイルのコピーを作成
fswatch_analyze.sh -c openmpi-binary < openmpi.log
- pkgbuild --identifier openmpi --root openmpi-binary openmpi-1.8.2-osx10.9.pkg
参考文献