Haskell

lts-13.19でaccelerate-llvmを使う時の備忘録

やっぱり並列計算したいじゃないですか。HaskellではAccelerateを使えばお手軽らしいんですが、lts-13.19でバックエンドをaccelerate-llvmにして使おうとしたら色々とやることがあったのでメモ。


  • lts-13.9

  • Ubuntu 18.04 bionic


stack.yamlに色々書いとく

resolver: lts-13.19

packages:
- .

extra-deps:
- accelerate-1.2.0.1
- accelerate-llvm-1.2.0.1
- accelerate-llvm-native-1.2.0.1
- llvm-hs-8.0.0
- llvm-hs-pure-8.0.0
- tasty-hedgehog-0.2.0.0

flags:
llvm-hs:
shared-llvm: true

extra-depsはstackが指示してきたバージョンを入れればOK。flagsは静的リンクするかしないかっぽい?


llvmのバージョンを上げておく

llvmがバージョン8を要求するので https://apt.llvm.org/ に従いバージョンを上げておく。

deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-8 main

deb-src http://apt.llvm.org/bionic/ llvm-toolchain-bionic-8 main

/etc/apt/sources.listに追加しておくのを忘れずに。これの意味を忘れていて手間取った。


libffiのバージョンを上げる

llvmがlibffiを使ってるようだがlibffiのバージョンも上がったらしく7を要求される。が、Ubuntuだと6パッケージがまでしかない。なのでソースコードを https://github.com/libffi/libffi/releases から引っ張ってきて手前でmakeする。2019年5月2日現在では公式ページに最新版の情報がないので注意!


/usr/local/libからsoファイルを参照するようにする

そのままだと上記ディレクトリにインストールされるのでconfigure時にディレクトリを変えておくか、以下のページを参考にディレクトリを参照するようにしておく。

/usr/local/libの共有ライブラリ(.so)を参照しないとき - 計算機と戯れる日々

http://d.hatena.ne.jp/n9d/20080820/1219228809

以上でaccelerateのサンプルが動くはず。手軽に並列計算!