微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何并行扩展集合?

如何解决如何并行扩展集合?

我有一个 HashMap,我想尽快向其中添加元素。我尝试使用 par_extend,但实际上最终比串行版本慢。我的猜测是它正在并行评估迭代器,但串行扩展集合。这是我的代码

use std::collections::HashMap;
use rayon::prelude::*;
use time::Instant;

fn main() {
    let n = 1e7 as i64;

    // serial version
    let mut t = Instant::Now();
    let mut m = HashMap::new();
    m.extend((1..n).map(|i| (i,i)));
    println!("Time in serial version: {}",t.elapsed().as_seconds_f64());

    // parallel version - slower
    t = Instant::Now();
    let mut m2 = HashMap::new();
    m2.par_extend((1..n).into_par_iter().map(|i| (i,i)));
    println!("Time in parallel version: {}",t.elapsed().as_seconds_f64());
}

是否有一种更快的方法来扩展实际上并行添加元素的 HashMap?或者类似的可以并行扩展的数据结构?我知道使用 FnvHashMap 之类的东西会运行得更快,但似乎也应该可以通过并行来加快速度。 (是的,我正在使用 --release 进行编译)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。