漢なら ISPC を aarch64 で動かしたいですね!
やりましょう!
できました.
追記: ISPC が標準で aarch64 対応になりましたので, この repo はもう不要です.
🏆Achievement Unlocked🏆 I've ported ISPC into AARCH64! 🎉🎉🎉🎉🎉🎉🎉🎉🎉😻😻😻😻😻😻😾😾😾😾😾🤩🤩🤩🤩㊗️㊗️㊗️㊗️㊗️㊗️㊗️💪💪💪 aobench runs 2.4x faster per core, 19x for 8 cores on AWS ARM instance! > https://t.co/UirPxyJ90w pic.twitter.com/wcXK2Oqone
— Syoyo Fujita ⚡️ No ray tracing No life (@syoyo) 2018年12月31日
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 コードが生み出されるスキームを確立する旅に出たい.