标签: cpuid

如何检查CPU是否支持SSE3指令集?

以下代码是否有效以检查CPU是否支持SSE3指令集?

使用该IsProcessorFeaturePresent()功能显然不适用于Windows XP(请参阅http://msdn.microsoft.com/en-us/library/ms724482(v=vs.85).aspx).

bool CheckSSE3()
{
    int CPUInfo[4] = {-1};

    //-- Get number of valid info ids
    __cpuid(CPUInfo, 0);
    int nIds = CPUInfo[0];

    //-- Get info for id "1"
    if (nIds >= 1)
    {
        __cpuid(CPUInfo, 1);
        bool bSSE3NewInstructions = (CPUInfo[2] & 0x1) || false;
        return bSSE3NewInstructions;     
    }

    return false;      
}
Run Code Online (Sandbox Code Playgroud)

c++ sse instruction-set avx cpuid

59
推荐指数
5
解决办法
3万
查看次数

C#中的x86/x64 CPUID

我的其他问题相关,请帮我调试"未知模块中发生未处理的类型'System.AccessViolationException'异常.附加信息:尝试读取或写入受保护的内存.这通常表明其他内存已损坏." 逐步执行代码,一切都会一直运行,直到实际调用del()并在该行中失败.

这段代码基于本文的示例python代码,它在python中运行.我无法得到代码示例,因为它可以工作(相同的例外),但我希望它只是有点过时或者其他东西.

编辑:如果你关心我们如何到达这里,看看编辑历史,这是无趣的.

完成工作版:

public static class CpuID
{
    public static byte[] Invoke(int level)
    {
        IntPtr codePointer = IntPtr.Zero;
        try
        {
            // compile
            byte[] codeBytes;
            if (IntPtr.Size == 4)
            {
                codeBytes = x86CodeBytes;
            }
            else
            {
                codeBytes = x64CodeBytes;
            }

            codePointer = VirtualAlloc(
                IntPtr.Zero,
                new UIntPtr((uint)codeBytes.Length),
                AllocationType.COMMIT | AllocationType.RESERVE,
                MemoryProtection.EXECUTE_READWRITE
            );

            Marshal.Copy(codeBytes, 0, codePointer, codeBytes.Length);

            CpuIDDelegate cpuIdDelg = (CpuIDDelegate)Marshal.GetDelegateForFunctionPointer(codePointer, typeof(CpuIDDelegate));

            // invoke
            GCHandle handle = default(GCHandle);
            var buffer = new byte[16];

            try
            { …
Run Code Online (Sandbox Code Playgroud)

c# inline-assembly cpuid

31
推荐指数
3
解决办法
2万
查看次数

应用程序如何确定指令集是否可用并在可用时使用它?

有趣的是它在游戏和其他软件中的工作原理。
更准确地说,我正在寻求一个解决方案C++
就像是:

if AMX available -> Use AMX version of the math library
else if AVX-512 available -> Use AVX-512 version of the math library
else if AVX-256 available -> Use AVX-256 version of the math library
etc.  
Run Code Online (Sandbox Code Playgroud)

我的基本想法是在不同的 DLL 中编译库并在运行时交换它们,但这对我来说似乎不是最好的解决方案。

c++ windows assembly instruction-set cpuid

18
推荐指数
2
解决办法
2873
查看次数

CPUID的内在函数如信息?

考虑到我用C++编写代码,如果可能的话,我想使用类似内在函数的解决方案来阅读有关硬件的有用信息,我的顾虑/注意事项是:

  • 我不太了解汇编,只是获得这种信息是一项相当大的投资(尽管它看起来像CPU只是翻转值和读取寄存器.)
  • asm(英特尔和AT&T)至少有两种流行的语法,所以它是碎片化的
  • 奇怪的是,Intrinsics比asm代码更受欢迎和支持
  • 并非现在雷达中的所有编译器都支持内联asm,MSVC 64位是一个; 我担心我会发现其他类似的缺陷,同时深入研究我必须使用的不同编译器的功能集.
  • 考虑到这个交易,我认为对我来说更有效率的是它可以打赌Intrinsics,它应该比任何asm代码更容易.

我要回答的最后一个问题是:如何用内在函数做类似的事情?因为我没有找到除CPUID操作码以外的任何东西来获取这种信息.

c++ intrinsics cpuid

15
推荐指数
5
解决办法
7205
查看次数

是否有用于检测iOS上的CPU功能的API?

我有一些具有多个实现的加密代码,根据运行的CPU的功能在运行时选择哪个实现.到目前为止移植这一点非常简单,Windows,Linux和Android都很容易.

但在iOS中它似乎并不容易.虽然x86 CPU具有cpuid检测功能的指令,但即使从用户模式也是如此,ARM等效功能具有特权.如果没有OS协作,就无法在ARM上检测CPU功能.

在Windows中,IsProcessorFeaturePresent用于检测ARM CPU功能.在Linux上,/proc/cpuinfo是要走的路.Android有一个cpufeatures库(/proc/cpuinfo仍然可以工作).Mac OS提供了sysctlbynamehw.optional.*.

但iOS呢?iOS内核hw.optional.*与Mac OS类似,但它在iOS 10中被锁定.(因此,我的问题不是这个问题的重复,因为情况已经改变了.)另外,获取这些列表似乎很难 - Apple的开源网站运行一个自动化流程,从公开发布的操作系统源中清除所有特定于ARM的代码,以使越狱者更加努力.

arm neon cpuid ios arm64

13
推荐指数
1
解决办法
759
查看次数

CPUID 如何在混合架构上工作?

我想知道当前处理器上的二级缓存大小是多少。幸运的是,有一个名为的库cpu_features可以实现这一点,甚至更多。在内部,它使用cpuid指令来获取所有这些信息。

我想知道,如果我尝试在混合架构(例如 Alder Lake)上使用它会发生什么?其效率和性能核心具有不同的特点。我假设该cpuid指令返回有关当前线程运行的核心的信息。所以基本上,如果它被安排在性能核心上运行,它会描述性能核心。

这样做的问题是操作系统可以决定稍后将线程移动到效率核心,在这种情况下,从中接收到的任何信息都cpuid不再正确。并且该程序甚至不知道它已被迁移。这可以通过手动将线程“固定”到核心并设置其亲和力来解决。为了区分性能和效率核心,我可以按顺序将线程固定到每个核心,并比较cpuid.

不过,我想知道cpuid结果是否确实依赖于核心,以及是否有更好的方法来查询有关处理器的信息,而无需循环遍历所有核心,只需将它们分类为其中一个两类。

c++ x86 cpu-architecture cpuid

12
推荐指数
0
解决办法
186
查看次数

这条线在Python中意味着什么?

此代码尝试检索哪些CPU信息.此代码是更大包的一部分.我不是Python程序员,我想将此代码转换为C#.

from ctypes import c_uint, create_string_buffer, CFUNCTYPE, addressof
CPUID = create_string_buffer("\x53\x31\xc0\x40\x0f\xa2\x5b\xc3")
cpuinfo = CFUNCTYPE(c_uint)(addressof(CPUID))
print cpuinfo()
Run Code Online (Sandbox Code Playgroud)

如果您是一名Python程序员并且知道这段代码在做什么,那对我来说将是一个很大的帮助.

c# python windows cpu cpuid

9
推荐指数
2
解决办法
1048
查看次数

我怎样才能在java中获得cpuid?

我想用java创建加密; 我如何获得CPU ID或任何东西在PC中是独一无二的,如BIOS或...

例如System.getCpuId(); :)这只是一个例子;)

非常感谢 ...

java encryption drm uniqueidentifier cpuid

9
推荐指数
2
解决办法
2万
查看次数

为什么在没有它的处理器上报告支持超线程?

我正在尝试收集系统信息并在Intel Xeon E5420上注意到以下内容:

执行后CPUID(EAX=1),EDX [28]设置,表示支持超线程,尽管处理器在英特尔网站上列为不支持超线程(ark.intel.com)

有没有人对此有解释?

x86 intel hyperthreading cpuid

9
推荐指数
1
解决办法
993
查看次数

从PHP获取计算机唯一ID

我已经使用PHP创建了一个应用程序,我将把它卖给我当地的市场.我个人会去他们的位置安装/配置Apache和MySQL以及安装我自己的代码.

我想要一个安全系统,以便如果有人试图将我的代码复制到未经授权的机器,它将无法运行.

我知道没有人可以阻止逆向工程应用程序.甚至.exe(二进制)文件都被破解,并且PHP(源代码)任何人都可以做.

在我的国家,那些反向工程师真的很难找到,所以我想提出最小的安全选项,如:

1)创建类(比如说Navigation),它标识系统信息,如CPU ID,计算机名称或硬件ID的任意组合,以生成UNIQUE_ID并与我给定的UNIQUE_ID(我向其销售应用程序的个人)匹配.如果有效,则返回导航菜单.否则它只会破坏数据库并通过抛出异常来停止执行,可能就像:

class Navigation {

    public function d() {
        return current system UNIQUE_ID;
    }

    public function get() {
        $a = file_get_contents('hash');
        $c = $this->d();
        if (crypt($c) != $a) {
            //destory database
            throw new Exception('');
        } else {
            return "<ul><li><a>home</a></li></ul>"; //navigation menu
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

2)然后在安装过程中,我将在"hash"文件中更改系统UNIQUE_ID,创建一个对象,并将其保存到文件(nav.obj)中:

(install.php了)

<?php
      $a=new Navigation;
      $out=serialize($a);
      file_put_contents('nav.obj', $out);
Run Code Online (Sandbox Code Playgroud)

3)在header.php中(包含在每个文件中):

<?php
     $menu=file_get_contents('nav.obj');
     $menu=unserialize($a);
     echo $menu->get();
 ?>
Run Code Online (Sandbox Code Playgroud)

我知道这种方法不是完全证明,但我很确定大约60%的PHP开发人员无法破解它!

现在我只需要获取当前系统UNIQUE_ID.

php hardware-id cpuid unique-id

9
推荐指数
1
解决办法
3万
查看次数