俺得 ISPC AARCH64 版で ISPC を動かすのはこちら.
ISPC を aarch64 で動かす
https://qiita.com/syoyo/items/36f089548323325bb5e1
最近(2019/05), ISPC 本体に AARCH64 対応が入ったようなので, 俺得版ではなく, 本体を AARCH64 対応でビルドしてみます.
対象環境
- Linux(Ubuntu 16.04 or later)
LLVM/clang のビルド
ISPC は LLVM 3.4 とかでも動くようですが, AARCH64 対応が進んでいる LLVM/clang 最新版を使いたいですね. ここでは LLVM/clang 8.0 を使います.
ISPC では LLVM のdump
関数を使っていますが, これは LLVM 5.0 から deprecated になり, prebuilt package などでは dump 関数は有効になっていないため, まずは dump 関数を有効にして LLVM/clang をビルドする必要があります.
を参考にします. 必要なソースコードをダウロードしてビルドするユーティリティ alloy.py
(合金?)スクリプトを使います(上記 dump 機能を有効にして LLVM/clang をビルドします).
LLVM_HOME
にソースコードとビルドのインストール先パス, ISPC_HOME
に ispc repo のパスを設定して起動します. LLVM_HOME
に相対パスを指定すると build ディレクトリがおかしなところに生成されるようなので注意ください.
$ LLVM_HOME=/path/to/llvm-dist ISPC_HOME=/path/to/ispc python alloy.py -b --version=8.0
--force
が追加で必要かもしれません. ビルドが終わるまで待ちます(30 分 ~ 1 時間くらい)
ISPC のビルド
上記でビルドした LLVM バイナリ(bin-8.0
)を PATH に加えて llvm-config
が見つかるようにして, cmake bootstrap します.
ARM_ENABLED=On
にして, ARM 対応で ISPC をビルドします.
$ rmdir build
$ mkdir build
$ cd build
$ PATH=/path/to/llvm/build/bin-8.0:$PATH cmake -DARM_ENABLED=On ..
$ make
ISPC がビルドできました. ispc のヘルプを出して, --arch
に aarch64
があれば成功です.
AARM64 向けコードの生成
--target
に neon 系を指定します.
$ ispc --arch=aarch64 --target=neon-i32x4 ...
generic だと現状実行時エラーになりますので注意ください.
TODO
クロスコンパイルされたバイナリを Raspberry Pi 3(ARM64 kernel) などで動くか確認する