研究
ソフトウェア⾼速化
ハードウェアの性能を限界まで使いたい
ソフトウェアの⾼速化、特にアセンブリ⾔語レベルでのCPUに密着した最適化に興味があります。 プログラミング⾔語やコンパイラ‧ハードウェアの進展に伴い、そういった細かい最適化をする機会は減っていますが、ブラウザの暗号通信、⽣成AIの中⼼部分などではまだまだ必要な場⾯があります。
Xbyak
Xbyakと呼ばれる実行時コード生成可能なJITアセンブラを開発しています。 C++は速度が必要な場面で使われることが多いプログラミング言語ですが、実行バイナリはコンパイル時に確定しています。 Xbyakを使うと実行時に状況に応じた最適なコードを生成し、実行できるプログラミング手法を支援します。
高機能暗号でしばしば使われるペアリングと呼ばれる数学の関数をXbyakを使って実装することで何度か世界最速性能を達成しています。 また、CPUのエミュレータや主にIntel CPU向けAIフレームワークoneDNNやOpenVINOなどの実行エンジンで利用されています。
これは、AIフレームワークでは実行時に決まったパラメータに応じた最適化や、実行するCPUに応じて最新命令セットを活用する場面が多いからです。 発売前のCPUの命令セットに対応することもあり、GitHub上でIntelの開発者からしばしば機能追加の依頼を受けています。 CPUに応じたアセンブリ言語の詳細な知識が必要なため、活用するためのハードルは高いですがうまくはまるとよいパフォーマンスを得られます。
対応CPUの拡大
Intel CPU向けだったoneDNNをスーパーコンピューター富岳でも動かそうというプロジェクトの中で、富岳のCPU(A64FXというARMv8.2-AベースのCPU)向けのXbyakaarch64の開発に関わりました。gihyp.jpにはその時の記事富岳のディープラーニング処理を支えるJITコンパイラ「Xbyakaarch64」誕生秘話が掲載されています。 またRISC-V用Xbyak_riscvも開発し、少しずつですが利用され始めています。
配列に対する指数関数や対数関数の高速実装
C/C++のfloatに対する標準関数std::exp()やstd::log()の配列に対するAVX/AVX-512を利用した近似実装を行いました。アセンブリ言語レベルで最適なアルゴリズムを研究し、GCCに比べて10倍以上の高速化を達成しています。 詳細はfmathをご覧ください。
コンパイラへの貢献
2026年の暗号と情報セキュリティシンポジウムSCIS2026で「3B1-1 定数整数除算・剰余算最適化再考」という発表を行いました。 これはIntelやAppleの64ビットCPU(x86-64やAArch64)においてx/7などの定数整数除算をアセンブリ言語レベルで高速化する手法の提案です。そしてその改善手法に基づいて、コンパイラ基盤LLVMに対してパッチを送りllvm:mainにマージされました。 詳細はLLVMに対する32ビット定数除算の改善をご覧ください。