gpt4 book ai didi

c - csc中spmv的openmp并行化

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:14 25 4
gpt4 key购买 nike

一个 OpenMP 如何在稀疏矩阵 vector 乘法之后并行化,其中矩阵是压缩的稀疏列格式?

do i=1,lastcol
do k=ia(i),ia(i+1)-1
ind=ja(k)
y(ind)=y(ind)+x(i)*a(k)
end do
end do

这里ia、ja、a分别是矩阵的列指针、行索引和非零值。谢谢。

最佳答案

以下是否适合您(使用 ATOMIC 子句更新以防止 Massimiliano 发现的问题)

!$ OMP PARALLEL DO PRIVATE(k, ind, temp)
do i=1,lastcol
do k=ia(i),ia(i+1)-1
ind=ja(k)
temp = x(i)*a(k)
!$ OMP ATOMIC
y(ind)=y(ind)+temp
!$ OMP END ATOMIC
end do
end do
!$ OMP END PARALLEL DO

这应该将外部循环的“工作”分配给多个不同的处理器,同时确保内部循环变量 kind 有单独的副本>

自从我使用 OMP 以来已经有一段时间了 - 如果这对您不起作用,请使用评论告诉我。同时有一个非常好的引用/教程 here

另外 - 你会发现一个 similar question was asked earlier - 虽然语言是 C,但基本的循环结构非常相似。那里的谈话表明,当矩阵变得非常大(超过缓存的大小)时,并行化的加速是最小的。

关于c - csc中spmv的openmp并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17557677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com