我用矩阵*向量乘法编码了一个以crs格式存储的矩阵。 这是我的代码:
call cpu_time(time3)
!$OMP PARALLEL DO
do o = 1, b2
do p = row(o), row(o+1)-1
ergcrs(o) = ergcrs(o) + val(p)*v(col(p))
end do
end do
!$OMP END PARALLEL DO
call cpu_time(time4)
它可以使用和不使用openmp,但如果启用它,我的代码运行速度比没有openmp时慢。
2个问题:1。如果我尝试运行并行和2,为什么我的代码会变慢?我可以在并行执行循环中运行第二个do循环吗?
如果我运行这个测试程序,就会发生同样的事情:
program test
use omp_lib
implicit none
integer :: i, n = 1000000000, counter = 0
real :: time1, time2
call cpu_time(time1)
!$OMP PARALLEL DO
do i = 1, N
counter = counter + 1
end do
!$OMP END PARALLEL DO
call cpu_time(time2)
print *,time2-time1
end program test
是我的问题,我将结果存储在共享变量中(第一个代码段中的ergcrs(o)和第二个中的计数器)?
如果是的话,有没有办法解决它?
非常感谢你的帮助!