sav*_*ava 1 multicore cpuid rust
我对物理核心感兴趣,而不是逻辑核心。
我知道https://crates.io/crates/num_cpus,但我想使用 cpuid 获取核心数量。我最感兴趣的是适用于 Ubuntu 的解决方案,但跨平台解决方案也是受欢迎的。
我认为您主要有两种方法可以做到这一点。
您可以使用更高级别的库cpuid。有了这个,就这么简单cpuid::identify().unwrap().num_cores(当然,请进行适当的错误处理)。但既然您了解该库num_cpus并且仍然问这个问题,我假设您不想使用外部库。
第二种方法是自己完成这一切。但这种方法大多与 Rust 无关,因为主要困难在于理解 CPUID 指令及其返回的内容。例如,本问答对此进行了解释。这并不简单,所以我不会在这里重复。
Rust 唯一特定的事情是如何在 Rust 中实际执行该指令。一种方法是使用core::arch::x86_64::__cpudid_count. 这是一个返回原始结果(四个寄存器)的不安全函数。调用它后,您必须通过位移和屏蔽来提取您想要的信息,如我上面链接的问答中所述。请咨询core::arch其他架构或更多 cpuid 相关功能。
但同样,手动执行此操作并非微不足道,容易出错,而且显然很难使工作真正跨 CPU。num_cpus因此,我强烈建议使用像任何实际代码一样的库。
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |