丸井綜研

-->

線形代数計算ライブラリLLAをWindowsで動かす

Common Lisp用の線形代数計算ライブラリとしてLLA (Lisp Linear Algebra)というものがあります。

github.com

これはBLASやLAPACKをCommon Lispから利用できるようにするラッパーです。高速な行列計算とかが手軽にできるようになります。MacやLinuxでは問題なかったのですが、Windowsにインストールするときに少しだけつまづいたので、以下にメモしておきました。

BLASやLAPACKのバイナリをダウンロードしてインストールすればいいかと思いきや、使えそうなWindowsバイナリが見つからず、ではソースからインストールしようと思ってもうまくいかなかったり、いろいろ問題が発生しました。結局、OpenBLASのWindows用バイナリがあったので、それを利用させてもらいました。

ところがZIPアーカイブの中のlibディレクトリを見ても.dllファイルが見当たりません。.dll.aという拡張子のものはありましたが、Windows用バイナリではなさそうです。.dllファイルはbinディレクトリの中に見つかりました(なぜライブラリファイルがbinの中に……Windowsだとそういうものなのかな?)。OpenBLAS-0.3.27-x64のlibopenblas.dllã‚’C:\Windows\System32の中に放り込んで、インストール完了です。(LispからPortAudioでデバイス情報を得る - 丸井綜研でも書きましたが、システム領域にバイナリをインストールするのは自己責任で!) ローカルディレクトリ(ql:quickload :llaを実行するディレクトリ)に置いてあっても読み込みがされるので、こちらのほうが安全かと思います。

次にSBCLとQuicklispでLLAをインストールすればいいのですが、作業メモリが足りなくなるので、sbcl --dynamic-space-size 4096とメモリ空間を増やしてあげます。SLIMEのREPLからだと起動途中で落ちてしまうことがあるので、ターミナル上で起動したSBCLで(ql:quickload :lla)とするとうまくいきました。

以前に自分で作ったプログラムでやってみた連立方程式の解も以下のように簡単に計算できました。出力はdouble型なのね。

*  (lla:solve #2A((1 2 0) (3 4 4) (5 6 3)) #(3 7 8))
#(-1.4000000000000008d0 2.2000000000000006d0 0.6000000000000001d0)

いままで作ってきたオレオレ統計ライブラリもLLAの上で動くようにしようかな……。