RでIntel Math Kernel Libraryを使う方法


Intel Math Kernel Library(以下MKL。フリーソフトウェアではないが無料)を使うようにRをビルドして高速化する方法です。R benchmarksで公開されているR benchmark 2.5なら,3倍くらい速くなります。こんな手間をかけなくても,Microsoft R Openを入れるだけで同じ効果を得られるのですが,「-O3 -march=native」でビルドしたら速いのかな?などと思う方のためのメモです。

https://software.intel.com/en-us/mklで「Free Download」をクリックします。サインアップあるいはサインインして,Intel Math Kernel Libraryをクリックすると,l_mkl_2018.1.163.tgzのようなファイルがダウンロードされます。

ダウンロードしたファイルのあるディレクトリで,以下を実行します。

tar zxf l_mkl_2018.1.163.tgz
cd l_mkl_2018.1.163
sed 's/ACCEPT_EULA=decline/ACCEPT_EULA=accept/' silent.cfg > s.cfg
sudo ./install.sh --silent ./s.cfg
cd ..

Rのソースをダウンロードし,展開します。

wget https://cloud.r-project.org/src/base/R-3/R-3.4.2.tar.gz
tar zxf R-3.4.2.tar.gz
cd R-3.4.2

ビルドに必要なパッケージを入れます。

sudo apt install r-base xorg-dev libcurl4-openssl-dev -y

MKLのための環境変数を設定します。

source /opt/intel/mkl/bin/mklvars.sh intel64

MKL="-Wl,--no-as-needed -lmkl_gf_lp64 -Wl,--start-group -lmkl_gnu_thread  -lmkl_core  -Wl,--end-group -fopenmp  -ldl -lpthread -lm"

configure! (Anacondaをふつうに入れていると,システムのcurlが隠されているせいで失敗します。この作業の間だけのことなので,AnacondaをPATHからはずすか,$HOME/anaconda3の名前を変えておきましょう。)

CFLAGS="-O3 -march=native" CXXFLAGS="$CFLAGS" FFLAGS="$CFLAGS" FCFLAGS="$CFLAGS" ./configure --with-blas="$MKL" --with-lapack

ビルドします。

make -j $(nproc)

bin/Rで実行します。make installでインストールできますが,そこまでしなくてもいいでしょう。

参考:R でインテル® MKL を使用する

本を書きました。『基礎からしっかり学ぶC++の教科書』


4822298930
『基礎からしっかり学ぶC++の教科書』(日経BP, 2017)

プログラミング言語なんて,Python一択になるんじゃないの?という向きは,TensorFlowのコードや,世界コンピュータ将棋選手権の参加チームの使用言語をご覧になるといいでしょう。「どうしてJavaやC++よりも遅いPythonが機械学習で使われているの?」などという話もあります。

『文法からはじめるプログラミング言語 MS Visual C++入門(マイクロソフト公式解説書)』(日経BP, 2009)の改訂版という位置付けですが,かなりの部分を書き直しました。

新しい話

  • C++11, C++14に対応しました。新しい話題は,型推論・ラムダ・ムーブ・新しい標準ライブラリ(ハッシュテーブル・並列処理・乱数・時間)などです。
  • Visual C++に加えて,GNU C++とClangでも,サンプルコードの動作を確認しています。
  • (実用的かどうかはともかく)C++の高速性が活きる例として,組み合わせパズルを解きます。(何を勘違いしたか,初刷では幅優先探索の英語が間違ってますな!)

なくしたもの

  • GUI(GUIアプリを作るならC++でなくてもいいだろうと考えてのことです。)
  • C++/CLI(旧版で,マネージ拡張という失敗例を紹介したわけですが・・・)

C++入門書の執筆は,プログラミング初心者からは「難しい」,C++のプロからは「いいかげん」と言われる,負けの決まった戦いです。(いいわけ)

関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間


4798043761岡部健『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』(秀和システム, 2015)

「愛情の裏返しか」と思わせるほどネットでたたかれている本書。同じ用語だけど定義を変えてきたな,言いたいことはなんとなくわかるけどこれじゃ伝わらないな,などと考えながら読むと意外に楽しめる。文章を書くのと違って,プログラミングには,コンピュータが指示どおりに動くかどうかが表現の明確さの一つの指標になるという特徴がある。この特徴を生かして,バシっとプログラムで表現すればよかったのにと思わせる部分は多い。

参考文献リストなし・索引なし

HTMLとCSSだけで作るマルバツ


マルバツを題材にしたプログラミング入門書を紹介したときに,「自分ならどうするか」を考えると楽しいと書きました。

私の場合,HTML+CSS+JavaScriptで作ることを最初に考えますが,HTMLとCSSだけ,つまりJavaScriptなしというのも面白いですね。根性があれば,プログラミングは不要です。(CSSも本質的には不要ですが,見た目があまり貧弱だとイヤなので・・・)

COMは負けないマルバツ+αのつもりです。勝つ場合の手数は考慮していません。

Manifold JSで別のプラットフォーム用に変換できます。

1594746877Tic Tac Tome は,この記事でやっているのとと同じことを紙で試みているすごい本です(1ページ1局面,一部両面印刷で約700枚!)。残念なことに,先手が人で後手が最善の場合は網羅されているようですが,後手が人の場合は,先手が真ん中を選ぶケースしか扱っていないようです。つまり,上述の「COMが先手」のパターン1と2は扱われていません(上の実装なら,1ページ1局面,一部両面印刷で約230枚程度で足りるはずです)。

この本がマルバツを理解しているかというと,そういうわけではないと思いますが,そういうことを考えるのも楽しいものです。

参考:1人で「三目並べ」を遊ぶことができるゲームブック「Tic Tac Tome: The Autonomous Tic Tac Toe Playing Book」

世界が変わるプログラム入門


4480689389山本貴光『世界が変わるプログラム入門』(筑摩書房, 2015)

マルバツゲームの開発を例に,プログラミングとは何かを解説する入門書。使っている言語は擬似的なもので,実際に動かして試すことはできない。プログラムは動くことが最重要だという私の好みには合わないが,面白い試みではある。残念なのは,例がすべて手続き的なため,マルバツとはいえ,その規模がかなり大きくなってしまっていることだ。マルバツを作れるようになったくらいの人が,自分ならどうするかと考えながら読むと楽しめるかもしれない。

参考:HTMLとCSSだけで作るマルバツ