CSharp 中是否有任何现有的 API 可以将 IEnumerable<T> 拆分为多个 Vector<T>?

问题描述 投票:0回答:1

现在我有一个大数据结构(Array,List,或IEnumerable),我想将它们拆分为许多Vector,例如Vector64,Vector128或512,.NET中有没有现有的矢量化API来完成这个而不是编写循环?

我们假设我们不需要关心拆分后如何改变 IEnumerable 的“尾部”的长度。

c# .net list algorithm vector
1个回答
0
投票

IEnumerable<T>
是一个高度抽象的API。它可以表示数组、哈希集中的数据或按需生成的数据。这使得界面非常灵活且易于使用,但在某些情况下可能会影响性能。

Vector<T>
类更接近硬件,并且旨在尽可能编译为SIMD指令。为此,所有项目在内存中必须是连续的。 IE。数组或
Span<T>
。 IEnumerable 不能保证任何特定的内存布局。

因此,如果您想使用向量运算处理数据,您可能需要首先将其转换为数组,例如使用

.ToArray()
,或者确保它首先存储在数组中。

如果您只想将数据分割成更小的块,请参阅Enumerable.Chunk

© www.soinside.com 2019 - 2024. All rights reserved.