.NET Coreでのハードウェア最適化命令の話

Several years ago, we decided that it was time to support SIMD code in .NET. We introduced the System.Numerics namespace with Vector2, Vector3, Vector4, Vector, and related types. These types expose a general-purpose API for creating, accessing, and operating on them using hardware vector instructions (when available).

情報源: Hardware Intrinsics in .NET Core | .NET Blog

.NET Core 3.0よりハードウェア最適化とその為のVector2, Vector3, Vector4, VectorというSIMD演算用のクラスが追加されます。

そもそも、.NETがC/C++やnumpyと数学的な演算(特に行列演算)のベンチマークで遅くなる理由が、プロセッサの持つSIMD演算命令のような計算最適化機能を有効に活用できていないためです。これは今流行の深層学習やその結果のモデル演算においても不利に働く場合が多いです。画像・音声・映像関係のライブラリについても同様です。このため、.NETのプラットフォームとしての魅力を維持するためにも、バイナリのより強力なプロセッサ最適化とSIMD命令など(Intelで言えばSSEやAVX, FMA)への対応が急務でした。このため、.NET Core 3.0はよりプロセッサ固定の最適化を行うほか、それを前提としたSIMD演算の為のライブラリが追加されます。(ML.NETなど、これが実現されなければ意味が無い。)

で、この記事はそれらの使用方法の簡単な説明と、現状でのベンチマーク結果です。