首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMP稀疏雅可比

OpenMP稀疏雅可比
EN

Stack Overflow用户
提问于 2017-02-17 10:14:38
回答 1查看 277关注 0票数 0

我正在尝试确定是否有一种方法可以使用稀疏矩阵格式(特别是压缩行格式)并行化Jacobi方法。

我有一个有效的稀疏矩阵Jacobi。我不知道我能不能

!$OMP并行执行

中间的指令循环,因为x既被写入也被读取。我猜内部的do循环可以有它,但是相同的t被覆盖了,所以我也不知道它是否可能存在。我是不是忽略了什么?谢谢。

代码语言:javascript
复制
x(:) = 0
do p = 1, numIterations
    do i=1, n
        t=b(i)
        do j = IA(i), IA(i+1) - 1
            if j=i
                d=A(j)
            else
                t = t - A(j) * x(jA(j))
            end if
        end do
        x(i) = t/d
    end do
end do
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-17 14:09:33

确实,您在内部循环中依赖于t,因为它用作累加器。然而,这也意味着您可以在每个线程中拥有t的私有副本(因为数组Ax不是在循环中写入的,所以t的值只取决于j的值,它也是线程私有的)。

下面的代码应该可以工作:

代码语言:javascript
复制
x(:) = 0
do p = 1, numIterations
    do i=1, n
        t=0
        !$OMP PARALLEL DO
        !$OMP REDUCTION(+:t)
        do j = IA(i), IA(i+1) - 1
            if j=i
                d=A(j)
            else
                t = A(j) * x(jA(j))
            end if
        end do
        x(i) = (b(i)-t)/d
    end do
end do

请注意,d只能由其中一个线程编写,因此变量可以在线程之间共享,而不是对d的循环依赖。

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

https://stackoverflow.com/questions/42288231

复制
相关文章

相似问题

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