ZACKYこと山崎進です。
私たちはFAISの研究助成金を受けて研究を進めています! 今日はFAISの谷口コーディネーターとミーティングでした。とても貴重なご意見をいただけて,前向きに研究計画を修正することにしました!
今までの研究計画について
「micro Elixir / ZEAM ロードマップ(2018年度)」 に書きましたが,今までは次の4段階のロードマップからなる計画でした。
今までの研究計画
|> ロードマップ第1段階: Polymorphic LLVM インラインアセンブラによる型多相・型安全なコード生成 (2018年10月リリース)
|> ロードマップ第2段階: Elixir制御構造のサポート (2018年12月リリース)
|> ロードマップ第3段階: リスト構造と Enum.map のサポート (2019年1月リリース)
|> ロードマップ第4段階: Enum.map による SIMD 命令のサポート(Hastega: ヘイスガ) (2018年2月リリース)
谷口コーディネーターの指摘
谷口コーディネーターは一通り話しを頷きながら聞いてくださった上で,次のように指摘しました。
「Hastega の実現によって高速化することが目的であれば,ロードマップ第2段階はパスできるのでは?」
この言葉に「ハッ」となりました。確かに,現在開発しているロジスティック写像のGPUベンチマークや,線形回帰,ディープラーニングの範囲であれば,制御構造なしでも Enum 推しで行ける!!
さらなる考察
谷口コーディネーターの言葉を受けて,さらに @piacere_ex さんの[「Elixirは何故whileやメンバー変数が無いの?」に答えてみる①]
(https://qiita.com/piacere_ex/items/11cd08c1a74694309482)の考察も受けて,計画の見直しをかけました。
- x86_64アーキテクチャが前提であれば SIMD 命令を前提にできることもあり,ロードマップ第3段階とロードマップ第4段階を最初から統合した形で研究・開発を進められそうです。
- case や cond などの制御構造を含む関数は,その関数を呼び出す関数とインライン展開し,さらに定数伝播などを行うことで,制御構造の制御式を確定できて結果として制御構造を不要にできる可能性が高いです。ガード条件についても同様の最適化をかけることができそうです。
- 制御構造を使うよりも,Enum.filter を推した方が,スッキリ最適化できそうな感じ。
ロードマップを見直した結果
新しい研究計画
|> ロードマップ第1段階: Polymorphic LLVM インラインアセンブラによる型多相・型安全なコード生成 (2018年10月リリース)
|> ロードマップ第2段階: リスト構造と Enum.map,SIMD命令のサポート (Hastega: ヘイスガ) (2018年12月リリース)
|> ロードマップ第3段階: インライン展開・定数伝播と,最適化前提のElixir制御構造のサポート (2018年3月リリース)
FAISの研究「機械学習ライブラリの研究開発」に必要なロードマップ第2段階までが年内に終わりそうな見通しとなりました。
次回は「ZEAM開発ログ v.0.4.10 マクロを使って micro Elixir のフロントエンドを作ってみる (試行錯誤編)」です。お楽しみに!