[英]c# fastest way to do bitwise operations on large block of bits
我有一组成千上万个标志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#中更快的方法呢?
假设不选择GPU,那么最好的选择是在支持SIMD操作的CPU上使用Vector<byte>
。 System.Runtime.CompilerServices.Unsafe
中有一些方法允许您从不安全的指针(特别是Unsafe.Read<Vector<byte>>
)中加载Vector<T>
,从而可以非常有效地将其用于通过固定的数组fixed
。 或者:等到Span<T>
成为主流,然后使用NonPortableCast<byte, Vector<byte>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.