从 .NET Core 3.0 开始,您可以用来Popcnt.IsSupported
测试底层硬件支持。
或者,如果您只需要结果,请使用BitOperations.PopCount
. 该类中的方法BitOperations
“在底层平台上可用时使用硬件内在函数;否则,它们使用优化的软件后备”。
我还没有找到一种简单的方法来检测和使用C#中的特殊CPU指令。有几种选择,没有一个很好。
我从来没有那样去实现过C#popcount。
/// <summary>
/// Count the number of bits set to 1 in a ulong
/// </summary>
public static byte BitCount(this ulong value)
{
ulong result = value - ((value >> 1) & 0x5555555555555555UL);
result = (result & 0x3333333333333333UL) + ((result >> 2) & 0x3333333333333333UL);
return (byte)(unchecked(((result + (result >> 4)) & 0xF0F0F0F0F0F0F0FUL) * 0x101010101010101UL) >> 56);
}
Run Code Online (Sandbox Code Playgroud)
由于 C# 被编译为 IL 而不是机器代码,因此您无法真正进行 CPU 级别的优化。公共语言运行时中的 JIT 编译器能够在代码实际运行时进行一些优化,但语言本身无法直接访问该过程。
然而,您可以混合 C++ 和托管代码并在那里进行低级优化,但这有点违背了迁移到 C# 的目的。
归档时间: |
|
查看次数: |
3114 次 |
最近记录: |