Mono.Simd on .NET does not make sense
id:kaminarioyaji:20081202:1228210788
Mono.Simd.dllはクラスライブラリですが、.NET Frameworkで実行しても意味がありません。動作はするでしょうが、SIMDでは実行されません。
結局のところ、Mono.SimdのコードをSIMD命令に置き換えるのはJITの仕事なのです。Mono.Simdのサポートは、実のところruntimeハッカーが作り出したもので、主要なコードはJIT (mini)上に存在します。MiguelがPDCでディスアセンブリとx86命令まで見せていたポイントもそこにあります。
Mono.Simdの仕組みをごく簡単に説明すると(というか僕はごく簡単にしか知らないのですが)、
- ユーザがMono.Simdを使ったコードを(C#で)書いて実行する
- Mono.Simdをmonoランタイム (mono/mono/metadata) が解釈し、CILメタデータをJIT (mono/mono/mini) に渡す
- miniは(simd最適化が有効になっていたら)そのCILがMono.Simdのものでないかどうかチェックして、SIMDサポートのコードであれば、それを単なるx86命令ではなくSIMD命令として出力する
- JITted codeが実行される
という流れになります。これはmonoランタイムでなければ起こらないことなのです。
今回はSIMDサポートということで話題になりましたが、他のCPUで特に高速化命令を実装したいということになれば、それらはmini JIT上に最適化オプションとして実装することができるでしょう。.NET FrameworkでこういったJITのカスタマイズが可能であるか、可能になるかは、僕にはわかりません。