System.Numerics.Vector<T>
を使用するC#コードを実行していますが、SIMD組み込み関数の利点をすべて得ることはできません。私はUpdate 1でVisual Studio Community 2015を使用していますが、私のclrjit.dllはv4.6.1063.1です。RyuJITはSIMD組み込み関数を完全に使用していません
AVX命令セット拡張機能を実装しているIntel Core i5-3337U Processorで動作しています。したがって、私は256ビットレジスタでほとんどのSIMD命令を実行できるはずです。たとえば、逆アセンブリにはvmovups
、vmovupd
、vaddups
などの指示が含まれ、Vector<float>.Count
は8を返す必要があります。Vector<double>.Count
は4などになるはずですが、それは私が見ているものではありません。
WriteLine($"{Vector<byte>.Count} bytes per operation");
WriteLine($"{Vector<float>.Count} floats per operation");
WriteLine($"{Vector<int>.Count} ints per operation");
WriteLine($"{Vector<double>.Count} doubles per operation");
が生成されます:
は、代わりに私の解体がmovups
、movupd
、addups
、等...そして次のコードのような手順が含まれてい
16 bytes per operation
4 floats per operation
4 ints per operation
2 doubles per operation
はどこで間違ったんですか?すべてのプロジェクト設定などを表示するには、hereプロジェクトが利用可能です。
RyuJITはGitHubのオープンソースなので、コードを確認して開発者と直接話し合うことができます。 –