gpt4 book ai didi

c# - 如何根据数组索引从数组复制到 Vector256,反之亦然?

转载 作者:行者123 更新时间:2023-12-04 07:57:59 33 4
gpt4 key购买 nike

据说我有一个 int[]数组或 Vector256<int>秒。如何使用数组索引将值从一个复制到另一个?

目前我必须遍历数组索引并一个一个地复制值:

int[] input = ...; // length divisible by Vector256<int>.Count
int[] output = new int[intput.Length];

for (int i = 0; i < input.Length; i += Vector256<int>.Count)
{
Vector256<int> v = Vector256.Create(
array[i], array[i + 1], array[i + 2], array[i + 3],
array[i + 4], array[i + 5], array[i + 6], array[i + 7]);

Vector256<int> v2 = DoSomeWork(v);

for (int j = 0; j < Vector256<int>.Count; ++j)
{
output[i + j] = v2.GetElement(i + j);
}
}

在 Java SDK 16 中,有一些函数可以完全满足我的需要。 C#中有类似的函数吗?

int[] input = ...;
int[] output = new int[values.length];

for (int i = 0; i < input.length; i += IntVector.SPECIES_256.length()) {
IntVector v = IntVector.fromArray(IntVector.SPECIES_256, input, i);
IntVector v2 = DoSomeWork(v);
v2.intoArray(output, i);
}

最佳答案

您可以使用 System.Numerics 中的 Vector。像这样:

var vector = new Vector<int>(new Span<int>(ints, i, 8));
Vector256<int> v = vector.AsVector256();
......
v2.AsVector().CopyTo(output, i);

您也可以尝试直接使用 System.Numerics.Vector 进行计算。

也可以使用unsafeAvx.LoadVector256和来自 System.Runtime.Intrinsics.X86Avx.Store。像这样:

fixed (int* ptr = input) 
fixed (int* ptrRes = output)
{
var vectorCount = Vector256<int>.Count;
for (int i = 0; i <= input.Length - vectorCount; i += vectorCount)
{
var v = Avx.LoadVector256(ptr + i);
....
Avx.Store(ptrRes + i, v2);
}
}

关于c# - 如何根据数组索引从数组复制到 Vector256,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66605902/

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