16

新しい RyuJIT コンパイラはベクトル (SIMD) CPU 命令を生成しますか? また、いつ生成しますか?

補足: System.Numerics 名前空間には、ネイティブ コードに直接コンパイルするかどうかにかかわらず、CPU、CLR バージョン、JITer バージョンに応じて SIMD 命令を生成する場合と生成しない場合がある Vector 操作を明示的に使用できる型が含まれています。この質問は、非ベクター コード (C# や F# など) がいつ SIMD 命令を生成するかに関するものです。

4

1 に答える 1

14

RuyJIT での SIMD コード生成は、System.Numerics.Vectors 名前空間の型に厳密に制限されています。Universal SIMD のサポートには、CLR の大幅な改訂が必要になります。そのようなコードは、SIMD 変数が適切に配置されている場合にのみ効率的になります。少なくとも SSE2 では 16 まで、AVX2 を使用するには 32 まで、今後の AVX-512 では 64 まで。

32 ビット CLR は 4、64 ビット バージョンは 8 にしか整列できません。32 ビット コードと 64 ビット コードの "自然な" 整列です。必要な変更は、CLR のすべての部分、ガベージ コレクター、およびクラス ローダーに影響を与えます。このような大きな変更が検討されているという噂はありません。そして、それが CoreCLR プロジェクトで考慮されたという兆候はなく、最も明白なターゲット バージョンだったでしょう。

System.Numerics.Vectors での現在のサポートを超えて SIMD を利用したい場合は、C++ コンパイラを使用し、C++/CLI または C++/CX 言語拡張機能を使用して相互運用します。

于 2016-02-20T16:17:03.617 に答える