новый вектор с использованием .Net System.Numeric заполняет только половину длины вектора - PullRequest
0 голосов
/ 12 апреля 2019

Я делаю цифровой фильтр и использую вектор и SIMD-инструкции, чтобы сделать его быстрее, но во время отладки я заметил, что при создании нового вектора он инициализировал только половину элементов в векторе, например, при создании vector с длиной 8, только первые 4 элемента вектора будут иметь значение, остальные будут 0, даже если массив, который используется для создания вектора, имеет 31 элемент, все отличные от 0. Это вызывает использование фильтра только половина коэффициентов и половина данных.

enter image description here

Соответствующий код указан ниже.

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;
    }

Существует некоторый код для обработки остатка, но он не является вектором и работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...