Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查C中的CPU Popcount#_C#_Cpu - Fatal编程技术网

C# 检查C中的CPU Popcount#

C# 检查C中的CPU Popcount#,c#,cpu,C#,Cpu,有人知道如何检查C#中的cpu是否支持popcount(人口计数)?C++是很容易的,但是尝试用一些象棋代码做一些C++到C转换。 非常感谢。欢迎来到Stackoverflow:) 我发现这个问题似乎与这个问题相似,也许你也会觉得它很有用 您还可以查看c#和 -编辑- 更直接地回答您的问题,因为c#被编译为IL而不是机器代码,所以您无法真正进行cpu级优化。公共语言运行库中的JIT编译器能够在代码实际运行时进行一些优化,但无法从语言本身直接访问该进程 但是你可以混合C++和托管代码,并在那里做

有人知道如何检查C#中的cpu是否支持popcount(人口计数)?C++是很容易的,但是尝试用一些象棋代码做一些C++到C转换。 非常感谢。

欢迎来到Stackoverflow:) 我发现这个问题似乎与这个问题相似,也许你也会觉得它很有用

您还可以查看c#和

-编辑-

更直接地回答您的问题,因为c#被编译为IL而不是机器代码,所以您无法真正进行cpu级优化。公共语言运行库中的JIT编译器能够在代码实际运行时进行一些优化,但无法从语言本身直接访问该进程


但是你可以混合C++和托管代码,并在那里做低级别的优化,但它有点失败的目的是移动到C<< /p> < p>我还没有找到一种简单的方法来检测和使用C中的特殊CPU指令。有几个选择,没有一个是好的

  • asmjit一个进行popcount的函数
  • mono有一个支持数据类型的simd库(我想不是popcount)
  • 使用C++ DLL(可能由于开销而变慢)
我从来没有这样做过,实现了一个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);
    }
//
///计算ulong中设置为1的位数
/// 
公共静态字节位计数(此ulong值)
{
ulong结果=值-((值>>1)和0x5555UL);
结果=(结果和0x3333UL)+(结果>>2)和0x3333UL);
返回(字节)(未选中((结果+(结果>>4))&0xF0F0FUL)*0x101010101UL)>>56);
}

从.NET Core 3.0开始,您可以使用来测试底层硬件支持


或者,如果您只需要结果,请使用。在<代码>位操作类中,“在底层平台上使用硬件内含物时,使用优化的软件回退”。

是否需要在特定的时间点找到CPU使用率?在C++中,这需要一个实现特定的编译器固有的,例如:代码>.非常感谢你提供的信息。我去看看。