C# 检查C中的CPU Popcount#
有人知道如何检查C#中的cpu是否支持popcount(人口计数)?C++是很容易的,但是尝试用一些象棋代码做一些C++到C转换。 非常感谢。欢迎来到Stackoverflow:) 我发现这个问题似乎与这个问题相似,也许你也会觉得它很有用 您还可以查看c#和 -编辑- 更直接地回答您的问题,因为c#被编译为IL而不是机器代码,所以您无法真正进行cpu级优化。公共语言运行库中的JIT编译器能够在代码实际运行时进行一些优化,但无法从语言本身直接访问该进程C# 检查C中的CPU Popcount#,c#,cpu,C#,Cpu,有人知道如何检查C#中的cpu是否支持popcount(人口计数)?C++是很容易的,但是尝试用一些象棋代码做一些C++到C转换。 非常感谢。欢迎来到Stackoverflow:) 我发现这个问题似乎与这个问题相似,也许你也会觉得它很有用 您还可以查看c#和 -编辑- 更直接地回答您的问题,因为c#被编译为IL而不是机器代码,所以您无法真正进行cpu级优化。公共语言运行库中的JIT编译器能够在代码实际运行时进行一些优化,但无法从语言本身直接访问该进程 但是你可以混合C++和托管代码,并在那里做
但是你可以混合C++和托管代码,并在那里做低级别的优化,但它有点失败的目的是移动到C<< /p> < p>我还没有找到一种简单的方法来检测和使用C中的特殊CPU指令。有几个选择,没有一个是好的
- asmjit一个进行popcount的函数
- mono有一个支持数据类型的simd库(我想不是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);
}
//
///计算ulong中设置为1的位数
///
公共静态字节位计数(此ulong值)
{
ulong结果=值-((值>>1)和0x5555UL);
结果=(结果和0x3333UL)+(结果>>2)和0x3333UL);
返回(字节)(未选中((结果+(结果>>4))&0xF0F0FUL)*0x101010101UL)>>56);
}
从.NET Core 3.0开始,您可以使用来测试底层硬件支持
或者,如果您只需要结果,请使用。在<代码>位操作类中,“在底层平台上使用硬件内含物时,使用优化的软件回退”。是否需要在特定的时间点找到CPU使用率?在C++中,这需要一个实现特定的编译器固有的,例如:代码>.非常感谢你提供的信息。我去看看。