【发布时间】:2021-05-05 16:35:17
【问题描述】:
我对物理核心感兴趣,而不是逻辑核心。
我知道https://crates.io/crates/num_cpus,但我想使用 cpuid 获取内核数。我最感兴趣的是适用于 Ubuntu 的解决方案,但欢迎跨平台解决方案。
【问题讨论】:
标签: rust
我对物理核心感兴趣,而不是逻辑核心。
我知道https://crates.io/crates/num_cpus,但我想使用 cpuid 获取内核数。我最感兴趣的是适用于 Ubuntu 的解决方案,但欢迎跨平台解决方案。
【问题讨论】:
标签: rust
我认为主要有两种方法可以做到这一点。
您可以使用更高级别的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 这样的库。
【讨论】: