2020年2月10日月曜日

xbyakによる実装

Xbyakは、Intelのアセンブリ言語命令を実行時に生成するC++のライブラリです。
今の時代、LLVMがあるので、C++コードのJITコンパイルも可能になっており、その必要性は狭まってはいますが、Xbyakで記述した方が手軽な場合もあります。

例えば、IntelのMKL-DLLという深層学習用の高速化ライブラリがありますが、そのエンジンには、Xbyakが使われているそうです。

https://blog.cybozu.io/entry/2019/04/15/170000

またスパコンCPU aarch64(ARMの64ビットアークテクチャ)にも移植されているようです。

Xbyakの概要はこちら

今回の使用目的は、機械・深層学習用ではなくて、AL4の高速化です。AL4は、数理的ソルバーですが、部分問題を解く必要があり、そのための新しいアイデアに対する実装に使用します。
コンパイル時定数であれば、C++テンプレートでC++コンパイラが勝手に最適化してくれますが、RUNTIME時定数では、テンプレートは何の役にも立ちません。RUNTIME時定数というメリットを最大限使って高速化を図ります。Xbyakの使用は、初めてで、SSE2も初めてなので、初めてのXbyakによるSSE2ということで、実装中のコードを使用して、この先書きたいと思います。

0 件のコメント:

コメントを投稿