Common LispでCPUを使った行列演算を高速にやりたいときは、BLASやLAPACKといった、専用に書かれた外部ライブラリを呼ぶことになる。そのためのラッパーライブラリとして、LLA (Lisp Linear Algebra)がある。

LLAでは、普通のReference BLAS以外にもOpenBLAS(旧GotoBLAS)、ATLAS、MKLを使える。このうちマルチスレッド対応なのはATLASとOpenBLAS、MKLだが、ATLASはソースコードからビルドしないとオートチューンが効かない。Ubuntuでapt-getで入るATLASはシングルスレッドでしか動かないらしい（ubuntu 14.04でBLASを使う）。とはいえOpenBLAS と ATLAS の性能を R 上で比較するを見る限り、オートチューンできたとしてもATLASよりはOpenBLASを使った方が多分速い。

OpenBLASのインストール OpenBLASはUbuntuならapt-getですぐに入る。 sudo apt-get install libopenblas-base sudo apt-get install libopenblas-dev

MKLのインストール MKL(Math Kernel Library)はintel謹製の数値計算ライブラリで、intel製のマルチコアCPUの性能をフルに引き出すことができるとされる。

無償版はintelのページで個人情報を登録するとダウンロードできる。1GBくらいある。ダウンロード画面で表示される製品登録キーがインストール時に必要なのでメモっておくことを忘れずに。 インストール自体は、GUIインストーラがあるのでrootで起動して指示に従っていけばいい。その場合インストール先は/opt/intel/以下になる。

LLAのインストールと設定 LLAはquicklispから簡単にインストールできる。 ( ql:quickload :lla ) 外部ライブラリのパスを cl-user::*lla-configuration* に設定する。LLAをロードする以前に設定する必要があるので~/.sbclrc等の処理系の初期化ファイルに書いておくといい。ライブラリのパスは環境によって変わってるかもしれないのでlocate等で適当に調べる。 ( defvar *lla-configuration* '( :libraries ( "/usr/lib/libblas/libblas.so.3.0" ))) ( defvar *lla-configuration* '( :libraries ( "/usr/lib/openblas-base/libblas.so.3" ))) ( defvar *lla-configuration* '( :libraries ( "/usr/lib/x86_64-linux-gnu/libgomp.so.1" "/lib/x86_64-linux-gnu/libpthread.so.0" "/opt/intel/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64_lin/libiomp5.so" "/opt/intel/compilers_and_libraries_2016.1.150/linux/mkl/lib/intel64_lin/libmkl_rt.so" )))