首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改人造丝使用的线程数?

问如何更改人造丝使用的线程数?
EN

Stack Overflow用户
提问于 2019-12-06 00:27:38
回答 2查看 4.2K关注 0票数 7

我在用人造丝库:

代码语言:javascript
复制
extern crate rayon;

const N: usize = 1_000_000_000;
const W: f64 = 1f64/(N as f64);

fn f(x: f64) -> f64 {
    4.0/(1.0+x*x)
}

fn main() { 
    use rayon::prelude::*;
    let sum : f64 = (0..N)
        .into_par_iter()
        .map(|i| f(W*((i as f64)+0.5)))
        .sum::<f64>();
    println!("pi = {}", W*sum);
}

我希望使用不同数量的线程来运行这段代码: 1、2、3和4。

我读过关于人造丝会产生多少个线程?的文档,其中说:

默认情况下,Rayon使用的线程数与可用CPU数相同。注意,在启用超线程的系统上,这等于逻辑核的数量,而不是物理核的数量。 如果要更改生成的线程数,可以将环境变量RAYON_NUM_THREADS设置为所需的线程数,或使用函数方法。

然而,这些步骤对我来说并不清楚。我怎样才能在我的Windows 10 PC上做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2019-12-06 01:19:43

只需在fn main()中包含。num_threads接受线程数。

rayon::ThreadPoolBuilder::new().num_threads(4).build_global().unwrap();

票数 11
EN

Stack Overflow用户

发布于 2022-02-27 23:31:40

如果不想设置全局函数,则可以创建一个名为“create _pool”的函数。此助手函数从ThreadPool构造一个Rayon num_threads对象。

代码语言:javascript
复制
pub fn create_pool(num_threads: usize) -> Result<rayon::ThreadPool, YOURERRORENUM> {
   match rayon::ThreadPoolBuilder::new()
      .num_threads(num_threads)
      .build()
   {
      Err(e) => Err(e.into()),
      Ok(pool) => Ok(pool),
   }
}

然后从这个create_pool内部调用您的代码。这将限制所有的人造丝功能到您设置的num_threads。

代码语言:javascript
复制
[...]
    create_pool(num_threads)?.install(|| {
       YOURCODE
     })?;
[...]

有关更多信息,请参见https://towardsdatascience.com/nine-rules-for-writing-python-extensions-in-rust-d35ea3a4ec29

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59205184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档