我感兴趣的是物理核心,而不是逻辑核心。
我知道https://crates.io/crates/num_cpus,但我想使用cpuid获得内核的数量。我最感兴趣的是在Ubuntu上运行的解决方案,但跨平台的解决方案是受欢迎的。
我主要看到两种方法。
您可以使用更高级别的库cpuid
。有了这个,它就像cpuid::identify().unwrap().num_cores
一样简单(当然,请做适当的错误处理(。但是,由于您知道库num_cpus
,并且仍然会问这个问题,我认为您不想使用外部库。
第二种方法是自己完成。但这种方法大多与Rust无关,因为主要的困难在于理解CPUID指令及其返回的内容。这在本问答中有解释;A、 例如。这不是小事,所以我不在这里重复了。
唯一与Rust相关的是如何在Rust中实际执行该指令。一种方法是使用core::arch::x86_64::__cpudid_count
。这是一个不安全的函数,返回原始结果(四个寄存器(。调用它之后,您必须通过移位和掩蔽来提取您想要的信息,如Q&A我在上面链接了。有关其他体系结构或更多cpuid相关函数,请参阅core::arch
。
但同样,手动完成这项工作并非易事,容易出错,而且显然很难真正跨CPU工作。因此,我强烈建议在任何实际代码中使用num_cpus
这样的库。