Я делаю цифровой фильтр и использую вектор и SIMD-инструкции, чтобы сделать его быстрее, но во время отладки я заметил, что при создании нового вектора он инициализировал только половину элементов в векторе, например, при создании vector с длиной 8, только первые 4 элемента вектора будут иметь значение, остальные будут 0, даже если массив, который используется для создания вектора, имеет 31 элемент, все отличные от 0. Это вызывает использование фильтра только половина коэффициентов и половина данных.
Соответствующий код указан ниже.
var simdLength = Vector<float>.Count;
var leftOver = m_filterSize % simdLength;
for (int i = 0; i < m_filterSize - leftOver; i += simdLength)
{
var filterVector = new Vector<float>(m_filter, i);
var dataVector = new Vector<float>(data, i);
filteredValueVector += filterVector * dataVector;
}
Существует некоторый код для обработки остатка, но он не является вектором и работает нормально.