[英]How can I change the number of threads Rayon uses?
我正在使用人造丝库:
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 会产生多少线程的文档? 其中说:
默认情况下,Rayon 使用与可用 CPU 数量相同的线程数。 请注意,在启用了超线程的系统上,这等于逻辑内核的数量而不是物理内核的数量。
如果要更改生成的线程数,可以将环境变量
RAYON_NUM_THREADS
设置为所需的线程数或使用ThreadPoolBuilder::build_global
function方法。
但是,这些步骤对我来说并不清楚。 如何在我的 Windows 10 PC 上执行此操作?
只需包含在 fn main() 中。 num_threads 接受线程数。
rayon::ThreadPoolBuilder::new().num_threads(4).build_global().unwrap();
如果你不想设置全局,你可以创建一个名为'create_pool'的function。 这个 helper function 从 num_threads 构建了一个 Rayon ThreadPool object。
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 中调用你的代码。 这会将所有 Rayon 函数限制为您设置的 num_threads。
[...]
create_pool(num_threads)?.install(|| {
YOURCODE
})?;
[...]
有关更多信息,请参阅https://towardsdatascience.com/nine-rules-for-writing-python-extensions-in-rust-d35ea3a4ec29
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.