MacOSX向けのRelionを作ってみる。
*あらかじめ、XQuartxとApple/CommandLineToolsをインストールしてください

MacOSX標準コンパイラGCC(clang)で作ってみた Relion/MacOSX/clang

Relion/MacOSX/qsub.sh

2.1-beta-1

ソースコードはSourceTreeを立ててそこで、そこでgit pullして、修正を加えタグを付けてzipに
そのzipをコンパイルマシンで展開して作業を進めている

mini:~ supervisor$ mkdir -p src/relion && cd $_ && unzip -q ../relion.zip && mkdir -p ./170828 && cd $_
mini:170828 supervisor$
mini:relion supervisor$ export PATH=/usr/local/openmpi-2.0.2_clang-800.0.42.1/bin:/usr/bin:/bin
mini:relion supervisor$ export DYLD_LIBRARY_PATH=/usr/local/openmpi-2.0.2_clang-800.0.42.1/lib
 
mini:relion supervisor$ /Applications/CMake.app/Contents/bin/cmake \
    -DCMAKE_INSTALL_PREFIX=/Appl/Darwin/relion-2.1-beta1 .. -L
 
mini:relion supervisor$ make && sudo make install
 
mini:170828 supervisor$ cd /Appl/Darwin/
mini:Darwin supervisor$ sudo ln -s relion-2.1-beta1 relion

*完成品をX環境なwindowsPCから起動するとエラーになる. macOSからでは問題ないのだが...

relion-2.0.3

nvidiaカードはないけど、構築してみた。
コンパイラは GCC-6.3.0 (Apple/GCC-6.3.0) です。

まずはソースをgithubから取得します

mini:~ supervisor$ cd /usr/local/src/
mini:src supervisor$
mini:src supervisor$ git clone https://github.com/3dem/relion.git
 
mini:src supervisor$ cd relion
mini:relion supervisor$ git log -1
commit 195e6f2a06aed4bb2d7758db53ec919876c17a7d
Author: Bjoern Forsberg <bjorn.forsberg@scilifelab.se>
Date:   Thu Jan 26 17:42:45 2017 +0100
 
    v2.0.3 - stable
mini:relion supervisor$

relionはfftwとfltkを必要とします。fftwはGCC-6.3.0でコンパイル可能なのだが、fltkはGCC-6.3.0でコンパイルすると

Compiling Fl_cocoa.mm...
g++: エラー: 言語 objective-c++ は認識できません
g++: エラー: 言語 objective-c++ は認識できません
make[4]: *** [Fl_cocoa.o] Error 1

とエラーをはく。なのでfltkのみMacOSX標準のGCC(clang)でコンパイルします

っで、まずはfftw

mini:~ supervisor$ export PATH=/usr/local/openmpi-2.0.2_gcc-6.3.0/bin:/usr/local/gcc630/bin:/usr/bin:/bin
mini:~ supervisor$ export DYLD_LIBRARY_PATH=/usr/local/openmpi-2.0.2_gcc-6.3.0/lib:/usr/local/gcc630/lib
 
mini:~ supervisor$ cd /usr/local/src
mini:src supervisor$ curl -O http://www.fftw.org/fftw-3.3.6-pl1.tar.gz
mini:src supervisor$ gzip -cd fftw-3.3.6-pl1.tar.gz | tar xf - && cd fftw-3.3.6-pl1
mini:fftw-3.3.6-pl1 supervisor$ ./configure --enable-shared --enable-sse2 --enable-avx --prefix=/usr/local
mini:fftw-3.3.6-pl1 supervisor$ make && sudo make install

次にfltk。コンパイラをMacOSX標準品GCC(clang)にします

mini:~ supervisor$ export PATH=/usr/bin:/bin
mini:~ supervisor$ unset DYLD_LIBRARY_PATH
 
mini:~ supervisor$ cd /usr/local/src
mini:src supervisor$ curl -O http://fltk.org/pub/fltk/1.3.4/fltk-1.3.4-1-source.tar.gz
mini:src supervisor$ gzip -cd fltk-1.3.4-1-source.tar.gz | tar xf - && cd fltk-1.3.4-1
mini:fltk-1.3.4-1 supervisor$
mini:fltk-1.3.4-1 supervisor$ ./configure --enable-shared --prefix=/usr/local
mini:fltk-1.3.4-1 supervisor$ make && sudo make install

*relion側でfftw/fltkのバージョン指定があるかもしれません

そして、relionをコンパイルします。ここでは「/usr/local/relion-2.0.3」にインストールさせます。cmakeはここを参照Apple/CMake
RelionRelion/TORQUEに記載したソース修正も必要なら行います

mini:~ supervisor$ cd /usr/local/src/relion
mini:relion supervisor$
mini:relion supervisor$ mkdir build-170206 && cd build-170206
 
mini:build-170206 supervisor$ export PATH=/usr/local/openmpi-2.0.2_gcc-6.3.0/bin:/usr/local/gcc630/bin:/usr/bin:/bin
mini:build-170206 supervisor$ export DYLD_LIBRARY_PATH=/usr/local/openmpi-2.0.2_gcc-6.3.0/lib:/usr/local/gcc630/lib
 
mini:build-170206 supervisor$ /Applications/CMake.app/Contents/bin/cmake \
       -DCMAKE_INSTALL_PREFIX=/usr/local/relion-2.0.3 .. -L
 
mini:build-170206 supervisor$ make && sudo make install

*cmakeがfftwとfltkのライブラリを認識してFORCE_OWN_FFTW=OFF、FORCE_OWN_FLTK=OFFとしてくれます
これで完成

使う際は

mini:~ supervisor$ export PATH=/usr/local/openmpi-2.0.2_gcc-6.3.0/bin:/usr/local/relion-2.0.3/bin:$PATH
mini:~ supervisor$ export DYLD_LIBRARY_PATH=/usr/local/openmpi-2.0.2_gcc-6.3.0/lib:/usr/local/relion-2.0.3/lib:$DYLD_LIBRARY_PATH
 
mini:~ supervisor$ relion

とする
2017y02m06d_020428903.png

relion-2.0.1

nvidiaカードはないけど、構築してみた。*thunderbolt経由のPCIeボックスで使えそうだけど
使用した開発環境はCommand Line Tools (OS X 10.11) for Xcode 7.3.1で構築したApple/GCC-5.4.0です。
あと単精度で作ってます

留意
*Apple/GCC-6.2.0でrelion-2.0.1をコンパイルしたらエラーが発生した。なので、Apple/GCC-5.4.0で構築してます。



relion-2.0.1のインストール先は /usr/local/relion-2.0.1とします。
まずはfftwを用意します

mini:~ supervisor$ export PATH=/usr/local/gcc540/bin:/usr/bin:/bin
 
mini:~ supervisor$ sudo mkdir -p /usr/local/src && sudo chwon supervisor /usr/local/src && cd /usr/local/src
 
mini:src supervisor$ curl -O http://www.fftw.org/fftw-3.3.5.tar.gz
mini:src supervisor$ gzip -cd fftw-3.3.5.tar.gz | tar xf -
mini:src supervisor$ cd fftw-3.3.5
 
mini:fftw-3.3.5 supervisor$ CC=gcc CXX=g++ ./configure --prefix=/usr/local --enable-shared --enable-float \
                              --enable-sse2 --enable-avx
mini:fftw-3.3.5 supervisor$
mini:fftw-3.3.5 supervisor$ make && make check && sudo make install

fltk-1.3.3もインストールします。MacOSX10.11(El Capitan)での問題はhttp://www.fltk.org/articles.php?L1487にて解決されたみたい。だがまだリリースではないので、スナップショットで導入
*ここではgcc-5.4.0は使いません。「言語 objective-c++ は認識できません」でエラーがでるので

mini:~ supervisor$ export PATH=/usr/bin:/bin
 
mini:~ supervisor$ cd /usr/local/src
mini:src supervisor$ curl -O http://fltk.org/pub/fltk/snapshots/fltk-1.3.x-r12056.tar.bz2
mini:src supervisor$ bzip2 -cd fltk-1.3.x-r12056.tar.bz2 | tar xf - && cd fltk-1.3.x-r12056
mini:fltk-1.3.x-r12056 supervisor$ ./configure
mini:fltk-1.3.x-r12056 supervisor$ make                 <-- Ctrl-Cで途中で止める(参照 README.OSX.txt)
 
mini:fltk-1.3.x-r12056 supervisor$ ./configure --prefix=/usr/local --enable-shared
mini:fltk-1.3.x-r12056 supervisor$ make && sudo make install

これで下拵えは完了。次に本体。
まずはソースを取得します。そして現在のバージョンを確認してみます。

mini:~ supervisor$ export PATH=/usr/local/openmpi-2.0.1_gcc-5.4.0/bin:/usr/local/gcc540/bin:/usr/bin:/bin:/usr/local/bin
 
mini:~ supervisor$ cd /usr/local/src
mini:src supervisor$ sudo git clone https://bitbucket.org/tcblab/relion2-beta.git
mini:src supervisor$ cd relion2-beta
 
mini:relion2-beta supervisor$ git log -n 1
 :
Date:   Wed Sep 28 12:40:23 2016 +0200
 
    v2.0.1 - Open Beta
mini:relion2-beta supervisor$

cmakeで構築するのでその構築場所を拵える

mini:relion2-beta supervisor$ mkdir build-161104 && cd build-161104
mini:build-161104 supervisor$ 
mini:build-161104 supervisor$ CC=gcc CXX=g++ /Applications/CMake.app/Contents/bin/cmake \
            -DCUDA=OFF \
            -DDoublePrec_CPU=OFF \
            -DDoublePrec_GPU=OFF \
            -DFORCE_OWN_FFTW=OFF \
            -DFORCE_OWN_FLTK=OFF \
            -DFFTW_PATH=/usr/local -DFLTK_CONFIG_SCRIPT=/usr/local/bin/fltk-config \
            -DCMAKE_INSTALL_PREFIX=/usr/local/relion-2.0.1 ..
 
mini:build-161104 supervisor$ make && sudo make install

*gcc-6.2.0でコンパイルしたら、Healpix_2.15a/cxxutils.ccでエラーが発生した。gcc-5.4.0なら通った

「/usr/local/relion-2.0.1/bin/relion」と起動してみると、
2016y11m05d_003712753.png
となる

relion-1.4

これまでは倍精度で計算していたようで、この1.4から単精度でも計算が可能になったようである。
単純に単精度なら速度があがると思ったのだが、実際にはそうでないみたい。ここでは2種類(倍精度、単精度)を作ってみる。
まず、fftwの倍精度と単精度のライブラリを用意してみる。

  • 倍精度
    Mac:src Supervisor$ wget http://www.fftw.org/fftw-3.3.4.tar.gz
    Mac:src Supervisor$ gzip -cd fftw-3.3.4.tar.gz | tar xf - && cd fftw-3.3.4
    Mac:fftw-3.3.4 Supervisor$ ./configure --enable-threads --enable-shared --enable-sse2 --prefix=/usr/local
    Mac:fftw-3.3.4 Supervisor$ make && make check && sudo make install
     
    Mac:fftw-3.3.4 Supervisor$ ls -l /usr/local/lib/libfftw3*
    -rwxr-xr-x  1 root  admin  1718872  2 28 00:11 libfftw3.3.dylib*
    -rw-r--r--  1 root  admin  2515736  2 28 00:11 libfftw3.a
    lrwxr-xr-x  1 root  admin       16  2 28 00:11 libfftw3.dylib@ -> libfftw3.3.dylib
    -rwxr-xr-x  1 root  admin      920  2 28 00:11 libfftw3.la*
    -rwxr-xr-x  1 root  admin    30936  2 28 00:11 libfftw3_threads.3.dylib*
    -rw-r--r--  1 root  admin    33960  2 28 00:11 libfftw3_threads.a
    lrwxr-xr-x  1 root  admin       24  2 28 00:11 libfftw3_threads.dylib@ -> libfftw3_threads.3.dylib
    -rwxr-xr-x  1 root  admin      995  2 28 00:11 libfftw3_threads.la*
  • 単精度
    Mac:fftw-3.3.4 Supervisor$ make distclean
    Mac:fftw-3.3.4 Supervisor$ ./configure --enable-threads --enable-shared --enable-single --enable-sse2 --prefix=/usr/local
    Mac:fftw-3.3.4 Supervisor$ make && make check && sudo make install
     
    Mac:fftw-3.3.4 Supervisor$ ls -l /usr/local/lib/libfftw3f*
    -rwxr-xr-x  1 root  admin  1509140  2 28 00:24 libfftw3f.3.dylib*
    -rw-r--r--  1 root  admin  2309600  2 28 00:24 libfftw3f.a
    lrwxr-xr-x  1 root  admin       17  2 28 00:24 libfftw3f.dylib@ -> libfftw3f.3.dylib
    -rwxr-xr-x  1 root  admin      926  2 28 00:24 libfftw3f.la*
    -rwxr-xr-x  1 root  admin    26908  2 28 00:24 libfftw3f_threads.3.dylib*
    -rw-r--r--  1 root  admin    31992  2 28 00:24 libfftw3f_threads.a
    lrwxr-xr-x  1 root  admin       25  2 28 00:24 libfftw3f_threads.dylib@ -> libfftw3f_threads.3.dylib
    -rwxr-xr-x  1 root  admin     1002  2 28 00:24 libfftw3f_threads.la*

fltk-1.3.3は単精度、倍精度に関係しないのでそのままコンパイルしますが、どうもMacOSX10.11(El Capitan)だとコンパイルできないみたい。
参照 https://github.com/Homebrew/homebrew/issues/41581
なのでこの参照から下記の様にソースを変更した。
*relionのexternalに付属な fltk-1.3.0.tar.gz も同様の個所でエラーが発生

diff -ru fltk-1.3.3.orig/src/Makefile fltk-1.3.3/src/Makefile
--- fltk-1.3.3.orig/src/Makefile        2014-10-31 01:05:22.000000000 +0900
+++ fltk-1.3.3/src/Makefile     2016-03-05 11:41:47.000000000 +0900
@@ -360,7 +360,7 @@
                -install_name $(libdir)/$@ \
                -current_version 1.3.3 \
                -compatibility_version 1.3.0 \
-               $(IMGOBJECTS)  -L. $(LDLIBS) $(IMAGELIBS) -lfltk
+               $(IMGOBJECTS)  -L. $(LDLIBS) $(IMAGELIBS) -lfltk $(LDFLAGS)
        $(RM) libfltk_images.dylib
        $(LN) libfltk_images.1.3.dylib libfltk_images.dylib
 
diff -ru fltk-1.3.3.orig/src/fl_line_style.cxx fltk-1.3.3/src/fl_line_style.cxx
--- fltk-1.3.3.orig/src/fl_line_style.cxx       2012-03-19 03:48:29.000000000 +0900
+++ fltk-1.3.3/src/fl_line_style.cxx    2016-03-05 11:43:59.000000000 +0900
@@ -35,8 +35,8 @@
 
 #ifdef __APPLE_QUARTZ__
 float fl_quartz_line_width_ = 1.0f;
-static enum CGLineCap fl_quartz_line_cap_ = kCGLineCapButt;
-static enum CGLineJoin fl_quartz_line_join_ = kCGLineJoinMiter;
+static CGLineCap fl_quartz_line_cap_ = kCGLineCapButt;
+static CGLineJoin fl_quartz_line_join_ = kCGLineJoinMiter;
 static CGFloat *fl_quartz_line_pattern = 0;
 static int fl_quartz_line_pattern_size = 0;
 void fl_quartz_restore_line_style_() {
@@ -110,9 +110,9 @@
   DeleteObject(fl_current_xmap->pen);
   fl_current_xmap->pen = newpen;
 #elif defined(__APPLE_QUARTZ__)
-  static enum CGLineCap Cap[4] = { kCGLineCapButt, kCGLineCapButt,
+  static CGLineCap Cap[4] = { kCGLineCapButt, kCGLineCapButt,
                                    kCGLineCapRound, kCGLineCapSquare };
-  static enum CGLineJoin Join[4] = { kCGLineJoinMiter, kCGLineJoinMiter,
+  static CGLineJoin Join[4] = { kCGLineJoinMiter, kCGLineJoinMiter,
                                     kCGLineJoinRound, kCGLineJoinBevel };
   if (width<1) width = 1;
   fl_quartz_line_width_ = (float)width;

その上で

Mac:fltk-1.3.3 Supervisor$ ./configure --enable-shared --prefix=/usr/local
Mac:fltk-1.3.3 Supervisor$ make && ./test/demo && sudo make install

とした。

次にrelion-1.4をコンパイルするが、fltkを/usr/localへ配置、torque対応とかでソースコードを調整したので、
そのパッチ(自作品)を適用する。filerelion-1.4.patch
*勝手に作ったパッチです

Mac:src Supervisor$ bzip2 -cd relion-1.4.tar.bz2 | tar xf - 
 
Mac:src Supervisor$ patch -p0 < relion-1.4.patch
patching file ./relion-1.4/INSTALL.sh
patching file ./relion-1.4/configure
patching file ./relion-1.4/src/displayer.h
patching file ./relion-1.4/src/gui_jobwindow.cpp
patching file ./relion-1.4/src/gui_jobwindow.h
patching file ./relion-1.4/src/image.h
patching file ./relion-1.4/src/manualpicker.h
Mac:src Supervisor$

openMPI対応にするには、GCCでコンパイルされたOpenMPIApple/GCC-4.9.3#i18380b8が必要です。
*MacOSX標準のgcc(clang)でコンパイルされたopenMPIでは作れないみたい

Mac:src Supervisor$ MAC_OSX=1
Mac:src Supervisor$ fltk_cxx=`fltk-config --cxxflags`
Mac:src Supervisor$ fltk_ld=`fltk-config --ldflags`
 
Mac:src Supervisor$ cd relion-1.4
Mac:relion-1.4 Supervisor$ export PATH=/usr/local/gcc493/bin:/usr/local/openmpi-1.10.2-gcc493/bin:/usr/bin:/bin
 
(倍精度)
Mac:relion-1.4 Supervisor$ ./configure --prefix=/usr/local/relion14d --enable-mpi CPPFLAGS="$fltk_cxx" LDFLAGS="$fltk_ld"
Mac:relion-1.4 Supervisor$ make && sudo make install
 
(単精度)
Mac:relion-1.4 Supervisor$ make distclean
Mac:relion-1.4 Supervisor$ ./configure --prefix=/usr/local/relion14s --enable-float --enable-mpi CPPFLAGS="$fltk_cxx" LDFLAGS="$fltk_ld"
Mac:relion-1.4 Supervisor$ make && sudo make install

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-12-28 (木) 00:24:46 (117d)