ついに念願のMacBook Proを手にしました!
一通り使い勝手のよさを味わったので,こちらでもCythonの作業環境を整えてみることにしました。
まあWindowsじゃないんだしpip install cython
で一瞬だろうと思っていたら,OpenMPの設定で軽くつまずきました。
Cのコンパイラを最新版にして環境変数の設定をいじったところ動くようになったので,その時の対処方法を記事にしました。
環境
OS : macOS Mojave 10.14.1
Python version : 3.7.1
Cython version : 0.29.2
Cythonのインストール後実行するも,コンパイルエラー
前回の記事で扱ったコードを実行してみたいと思います。
(使用コードは,こちらにアップしてあります。)
冒頭で述べたように,Cython自体はpip install cython
の一瞬で入りました。
ただし,そこから.pyx
をコンパイルしようとしたところ,うまくいきませんでした。
tatamiya$ python setup.py build_ext --inplace
(中略)
clang: error: unsupported option '-fopenmp'
error: command 'clang' failed with exit status 1
並列処理に使うOpenMPがどうやら入っていないか認識されていないようです。
Cコンパイラを最新のものにする
調べてみたところ,macOSデフォルトのCコンパイラはgcc, g++ではなくclangというのが使われていて,こちらにはOpenMPがサポートされていないそうです。
(参考:https://qiita.com/ligerbolt/items/6e27c882838fdcc1a490)
なので,コンパイラを最新のgcc, g++に指定しました。
最新版コンパイラのインストール
tatamiya$ brew install gcc
さらに,こちらのページに従ってシンボリックリンクを作成しました。
tatamiya$ ln -s /usr/local/bin/gcc-8 /usr/local/bin/gcc
tatamiya$ ln -s /usr/local/bin/g++-8 /usr/local/bin/g++
環境変数の設定
ただコンパイラをインストールしただけでは動かず,環境変数もいじる必要がありました。
理屈はよくわからないのですが,vimでbash_profile
にこちらのページのように追記したら動くようになりました:
export CC=gcc
export CXX=gcc
export ARCHFLAGS="-arch x86_64"
実行結果
In [1]: %run -t simple_sum_cython.py
IPython CPU timings (estimated):
User : 0.01 s.
System : 0.00 s.
Wall time: 0.01 s.
ちなみに,おおよそ0.01~0.02sくらいでした。
今までのWindows PCでの実行時間が0.5秒程度だったことを考えると,少なくとも20倍は速くなってます。
さすがMacBook Pro!
参考サイト
https://shinaji.bitbucket.io/2014/09/03/Cython_OpenMP.html
https://qiita.com/wawawa/items/50c2c612b0937f28d92b
https://qiita.com/ligerbolt/items/6e27c882838fdcc1a490