Posted at

2017年のCommon LispのGPGPUライブラリはこれだ!

More than 1 year has passed since last update.

(某記事の形式に似せてますが、某氏とは無関係ですのでお間違えなのないよう)

これはNextremer Advent Calendar 2016の5日目の記事です。

2016年のCommon LispのGPGPU事情としては、QuicklispへのOpenCL及びCUDAのライブラリが追加され、開発しやすい状況が整った一年でした。


cl-cuda (これがおすすめだ!)

takagi氏により開発されている、Common LispからCUDAを扱うためのライブラリです。

以前からビルドの問題でQuicklisp入りが進んでいませんでしたが、2016年後半になり遂にQuicklispに入りました。

今後cl-cudaを使ったライブラリが増えていく事でしょう。

機械学習ライブラリのmglも最新版はcl-cudaに依存しています。

cl-cudaは本家CUDAと同様、ホスト側もデバイス側もCommon Lispで記述も出来ます。


その他


cl-oclapi

OpenCL 1.2のAPIに対応したCommon Lispバインディングです。

2016年前半にQuicklispに入りました。

CUDAライブラリはcl-cudaしかない状態ですが、OpenCLのAPIについては数年前から様々な人が書いています。

ですが、Quicklispに入っているものが扱いやすいでしょう。


oclcl

S式のDSLからOpenCL 1.2のCコードを生成します。

2016年前半にQuicklispに入りました。

これ自体はOpenCL Cのコードを生成するだけなので、生成結果を使って呼出し側は他の言語で書くことも出来ますが、cl-oclapiを使うことで1ファイルで完結する形でのOpenCLプログラムをCommon Lispのみで書くことが出来ます。

cl-cudaからフォークしてカーネル周りのコードを利用しているため、似て非なる何かになっています。

(まあそもそもCUDAとOpenCLとの関係が。。。)


mgl-mat

melisgl氏によって開発されている行列演算ライブラリで、内部でcl-cudaやcuBLASを利用しています。

2016年後半にQuicklispに入りました。


eazy-opencl

guicho271828氏によって開発されている、3b氏のcl-opencl-3bから派生しOpenCL 2.0のAPIに対応したCommon Lispバインディングです。

一度Quicklisp登録申請されたものの、cffiとのバージョンアップとの兼ね合いでコンパイルが出来ずその後登録が取り下げられておりQuicklispに入ってません。

ですが、OpenCL 2.0のAPIを使いたい場合にはこれがいいでしょう。