【问题标题】:How do I find out the number of CPU cores using cpuid?如何使用 cpuid 找出 CPU 内核的数量?
【发布时间】:2021-05-05 16:35:17
【问题描述】:

我对物理核心感兴趣,而不是逻辑核心。

我知道https://crates.io/crates/num_cpus,但我想使用 cpuid 获取内核数。我最感兴趣的是适用于 Ubuntu 的解决方案,但欢迎跨平台解决方案。

【问题讨论】:

    标签: rust


    【解决方案1】:

    我认为主要有两种方法可以做到这一点。

    您可以使用更高级别的library cpuid。有了这个,就像cpuid::identify().unwrap().num_cores 一样简单(当然,请做适当的错误处理)。但既然你知道库 num_cpus 并且仍然问这个问题,我假设你不想使用外部库。

    第二种方法是自己做这一切。但是这种方法与 Rust 几乎无关,因为主要困难在于理解 CPUID 指令及其返回的内容。例如,in this Q&A 对此进行了解释。不是小事,这里不再赘述。

    唯一特定于 Rust 的事情是如何在 Rust 中实际执行该指令。一种方法是使用core::arch::x86_64::__cpudid_count。这是一个返回原始结果(四个寄存器)的不安全函数。调用它后,您必须通过位移和掩码提取所需的信息,如我上面链接的问答中所述。其他架构或更多cpuid相关功能请咨询core::arch

    但同样,手动执行此操作并非易事,容易出错,而且显然很难真正跨 CPU 工作。所以我强烈建议在任何真实代码中使用像num_cpus 这样的库。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 2010-12-05
      • 2014-05-20
      • 1970-01-01
      相关资源
      最近更新 更多