LoginSignup
1
0

More than 1 year has passed since last update.

ISPC を aarch64 で動かす

Last updated at Posted at 2018-12-31

漢なら ISPC を aarch64 で動かしたいですね!

やりましょう!

できました.

追記: ISPC が標準で aarch64 対応になりましたので, この repo はもう不要です.

ISPC は SPMD 形式のコードを SIMD を使う命令に変換し, プログラムの実行を高速にする言語的なツールです.

arm(32bit)は一応ありましたが, aarch64(64bit)はありませんでした.
昨今はスマホの ARM チップも 64bit が標準ですし, サーバ用も 64bit ですしので, aarch64 対応してみました.

aobench でだいたいコアあたり 2.5 倍になりました.
(AWS EC2 の a1 ARM 8 スレッドインスタンスで確認)

llvm intrinsics

ispc では, ビルトイン関数のいくつかを llvm intrinsics 直指定(.ll の ASCII 形式)で行っていますが, 既存の arm neon(32bit) と, aarch64 では op 名が変わっています.
(e.g. 逆平方根推定命令 vrsqrts -> frsqrts など)
とりあえず aobench が動くように最低限の修正をしましたが, 実際に使うには llvm のコードや aarch64 の命令セットを見ていろいろなおさないといけません.

テスト

ispc のテストでは FileCheck を使っていますが, これは clang/llvm prebuilt パッケージには含まれていません. したがって ispc のテストを走らせるにはまず LLVM をソースからビルドする必要があります...(のでテストは動かしていない)

TODO

  • builtin intrinsics で未対応のものを直す
  • テストをする
  • 優秀な ispc 若人さまが, 人類史上最速で優秀な aarch64 ispc 若人さまへと昇華なされ, 高速な aarch64 コードが生み出されるスキームを確立する旅に出たい.
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0