回 帖 发 新 帖 刷新版面

主题:[讨论]并行计算出错

    PARAMETER(M=500,N=500)
    DIMENSION a(1:m),b(1:m,1:n),c(1:n)    
      character*24 ctime, string
      INTEGER*4  nn, time       
     integer::i,j,K
     nn=time()
      string = ctime( nn )    
      write(*,*) 'ctime: ', string
    DO K=1,60000
c !$OMP PARALLEL DO DEFAULT(NONE) SHARED(a,b,c) PRIVATE(i,j)    
    do i=1,m
    a(i)=0.0
    do j =1,n
    a(i)=a(i)+b(i,j)*c(j)
    enddo
    enddo
c !$OMP END PARALLEL DO    
    ENDDO

     nn=time()
      string = ctime( nn )    
      write(*,*) 'ctime: ', string
    end 
    
我使用了手机和自动分别在intel fortran 11里进行并行计算,两者的计算速度都没有单核计算速度快,到底怎么回事,求高人指点!    

回复列表 (共3个回复)

沙发

计算量过小,线程启动与停止开销过大。并且涉及到伪共享问题,导致数组a无法进入高速缓存。

板凳

请教下,Fortran并行计算需要装并行库吗?
最近程序计算需要的计算时间太长,并行又搞不出。

3 楼

先找热点再优化

并行不是一定快,毕竟都有损耗(自动并行和自动SIMD编译器有检测,会有一个阈值)

我来回复

您尚未登录,请登录后再回复。点此登录或注册