Я запускаю некоторый код С#, который использует System.Numerics.Vector<T>
, но насколько я могу судить, я не получаю в полной мере преимущества встроенных SIMD. Я использую Visual Studio Community 2015 с Update 1, а мой clrjit.dll - v4.6.1063.1.
Я запускаюсь на процессоре Intel Core i5-3337U, который реализует расширения набора инструкций AVX. Поэтому я считаю, что я должен выполнить большинство SIMD-инструкций в 256-битном регистре. Например, дизассемблер должен содержать команды типа vmovups
, vmovupd
, vaddups
и т.д., И Vector<float>.Count
должен возвращать 8, Vector<double>.Count
должен быть 4 и т.д. Но это не то, что я видя.
Вместо этого моя разборка содержит инструкции типа movups
, movupd
, addups
и т.д.... и следующий код:
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");
Выдает:
16 bytes per operation
4 floats per operation
4 ints per operation
2 doubles per operation
Где я ошибаюсь? Для просмотра всех параметров проекта и т.д. Проект доступен здесь.