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 件のコメント:
コメントを投稿