Sto eseguendo un codice C# che utilizza System.Numerics.Vector<T>
ma, per quanto posso dire, non sto ottenendo il massimo vantaggio dalle intrinseche SIMD. Uso Visual Studio Community 2015 con Update 1 e my clrjit.dll è v4.6.1063.1.RyuJIT non utilizza completamente le intrinseche SIMD
Sono in esecuzione su un Intel Core i5-3337U Processor, che implementa le estensioni del set di istruzioni AVX. Pertanto, immagino, dovrei essere in grado di eseguire la maggior parte delle istruzioni SIMD su un registro a 256 bit. Ad esempio, lo smontaggio dovrebbe contenere istruzioni come vmovups
, vmovupd
, vaddups
, ecc., E Vector<float>.Count
dovrebbe restituire 8, Vector<double>.Count
dovrebbe essere 4, ecc ... Ma non è quello che sto vedendo.
Invece il mio smontaggio contiene istruzioni come movups
, movupd
, addups
, ecc ... e il seguente codice:
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");
produce:
16 bytes per operation
4 floats per operation
4 ints per operation
2 doubles per operation
Dove sto andando male? Per vedere tutte le impostazioni del progetto ecc. Il progetto è disponibile here.
RyuJIT è open source su GitHub in modo da poter controllare il suo codice e discutere direttamente con gli sviluppatori. –