gpt4 book ai didi

c# - 使用 .Net System.Numeric 的新矢量仅填充矢量长度的一半

转载 作者:行者123 更新时间:2023-12-05 03:01:32 24 4
gpt4 key购买 nike

我正在做一个数字滤波器并使用向量和 SIMD 指令来使其更快,但是在调试过程中我注意到当创建一个新向量时它只初始化了向量中的一半项目,例如在创建一个长度为 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;
}

之后有一些代码可以处理剩下的部分,但它不是一个向量并且工作正常。

最佳答案

这是一个调试器错误:

int capacity = Vector<float>.Count;
float[] testVals = Enumerable.Range(0, capacity).Select(i => (float)i).ToArray();
Vector<float> testV = new(testVals);
float[] returnedVals = Enumerable.Range(0, capacity).Select(i => testV[i]).ToArray();

enter image description here

有趣的是,string.Join 总是根据自己的选择格式化您的向量:

Vector<int> powersOfTwo = new Vector<int>(Enumerable.Range(0, Vector<int>.Count).Select(i => 1 << i).ToArray());
string powersOfTwoString = string.Join("abc", powersOfTwo);

enter image description here

关于c# - 使用 .Net System.Numeric 的新矢量仅填充矢量长度的一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com