我有一组包含数十万个标记0
或1
的数组。
我正在使用BitArray
类来做类似的事情:
result = (BitArray)ab.Clone();
result.And(bc);
很多次......
当然,我必须先在Bitarray
设置标记。
for (int i = 1; i < maxLen; i++) ab[i] = a[i] < b[i];
但是当我设置一次标志后,我就会对它们进行数千次操作and
,or
,xor
,not
(所以按位运算更为重要)
从头开始。
我问你是否采用C#更快的方法来做这件事?
答案 0 :(得分:4)
假设GPU不是一个选项,那么在支持SIMD操作的CPU上,最好的选择是Vector<byte>
。 System.Runtime.CompilerServices.Unsafe
中的方法允许您从不安全的指针(具体为:Vector<T>
)加载Unsafe.Read<Vector<byte>>
,允许它非常有效地用于通过fixed
固定的数组。或者:等到Span<T>
成为主流,然后使用NonPortableCast<byte, Vector<byte>>