rust 如何使用cpuid找出CPU核心的数量?

iyfjxgzm  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(409)

我感兴趣的是物理内核,而不是逻辑内核。
我知道https://crates.io/crates/num_cpus,但我想使用cpuid获得内核的数量。我最感兴趣的是在Ubuntu上工作的解决方案,但跨平台的解决方案也很受欢迎。

6ojccjat

6ojccjat1#

我认为你主要有两种方法来做到这一点。
您可以使用更高级别的library cpuid,它就像cpuid::identify().unwrap().num_cores一样简单(当然,请做适当的错误处理),但是既然您知道num_cpus库,并且仍然问这个问题,我假设您不想使用外部库。
第二种方法是自己完成所有操作。但是这种方法与Rust几乎没有关系,因为主要的困难在于理解CPUID指令及其返回的内容。例如,in this Q&A解释了这一点。这并不是微不足道的,所以我在这里不再重复。
Rust唯一的特性是如何在Rust中执行指令。一种方法是使用core::arch::x86_64::__cpudid_count。这是一个返回原始结果(4个寄存器)的不安全函数。调用它后,您必须通过上面链接的Q&A I中描述的位移位和掩码提取所需的信息。有关其他架构或更多cpuid相关函数,请参考core::arch
但是同样,手动执行这些操作也不是小事,容易出错,而且显然很难真正跨CPU工作,所以我强烈建议在任何真实的代码中使用num_cpus这样的库。

相关问题