< 返回版块

eweca-d 发表于 2021-09-30 22:16

Tags:rayon

如题,假设有如下自定义矩阵乘法的代码:

impl<'a, 'b> Mul<&'b Vector> for &'a Matrix {
    type Output = Vector;

    fn mul(self, other: &'b Vector) -> Self::Output {
            let len = self.r;

            let mut par_iter = (0..len).into_par_iter().map(|i| mul_helper(self, other, i));
            let res: Vec<f64> = par_iter.collect();
    
            Vector { r: other.r, data: res }
    }
}

fn mul_helper(matrix: &Matrix, vector: &Vector, i: usize) -> f64 {
    // ...一些代码
}

那么这个时候rayon能自动识别出我的不可修改的def,从而保证能并发读取matrix和vector吗?还是说需要把数据用rwlock包裹一下,试了下,直接rayon好像反而比自己遍历要慢。(但是手头上目前只有个双核的surface,不好说是不是核心不够的问题)。

PS:这个矩阵乘向量是自定义的,不能使用现成的矩阵库或者稀疏矩阵计算库。

评论区

写评论

还没有评论

1 共 0 条评论, 1 页