C# 使用.Net System.Numeric创建的新向量仅填充向量长度的一半

C# 使用.Net System.Numeric创建的新向量仅填充向量长度的一半,c#,.net,vector,numeric,simd,C#,.net,Vector,Numeric,Simd,我正在做一个数字滤波器,使用向量和SIMD指令来加快速度,但在调试过程中我注意到,当创建一个新向量时,它只初始化了向量中的一半项,例如,当创建一个长度为8的向量时,只有向量的前4项有值,其余项为0,即使用于创建向量的数组有31个项,它们都不同于0。这导致滤波器仅使用一半的系数和一半的数据 相关代码如下 var simdLength = Vector<float>.Count; var leftOver = m_filterSize % simdLength; for (in

我正在做一个数字滤波器,使用向量和SIMD指令来加快速度,但在调试过程中我注意到,当创建一个新向量时,它只初始化了向量中的一半项,例如,当创建一个长度为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;
    }
var simdleength=Vector.Count;
var剩余=m_filterSize%simdLength;
对于(int i=0;i

之后会有一些代码来处理剩余部分,但它不是一个向量,工作正常。

这是唯一的调试程序视图。。。你的数据仍然在那里不,我只是做了一个测试,做了同样的数学,没有向量化,只是在问题上的代码有相同的值,答案不同,所以向量似乎真的初始化不正确。我也碰到了这个问题。我正在64位windows上运行最新的.NET Core 3.1。我使用的是
Vector.One
,返回的向量包含8个条目,但只有前4个元素被设置为1。其余的设置为0。不要紧,它实际上只是调试器:计算差异是由于矢量化代码中其他地方的错误造成的。