回 帖 发 新 帖 刷新版面

主题:fortran77写的程序如何采用Openmp并行?

在这个帖子http://bbs.pfan.cn/post-368849.html
里看到f90程序并行方法,试了下,可以达到目的

!$  call omp_set_num_threads(8)

    !$OMP PARALLEL DEFAULT(PRIVATE)
    threads = omp_get_num_threads()
    print *,threads
    !$OMP DO
    do i=1,10
      myTest = i*i*i-i*i
    end do
    !$OMP END DO
    !$OMP END PARALLEL

改成fortran77格式,好像不好使了

    progranm main
    !$  call omp_set_num_threads(8)

    !$OMP PARALLEL DEFAULT(PRIVATE)
    threads = omp_get_num_threads()
    write(*,*) threads
    !$OMP DO
    do i=1,10
      myTest = i*i*i-i*i
    end do
    !$OMP END DO
    !$OMP END PARALLEL
    end

我又改造了一个fortran77程序,这个好像可以
      progranm main
      !$omp parallel
      !$omp critical
      do  i=1, 10000000
          write(*,*) i, "hello word"
      enddo
      !$omp end critical
      !$omp end parallel
      end
 编译:gfortran -fopenmp hello.f -o hellof
 执行:OMP_NUM_THREADS=2 ./hellof
 可以看到有两个进程,为什么第一个改的程序还是一个进程在跑呢?

注:我是在ubuntu系统下测试的



回复列表 (共13个回复)

11 楼

threads 应该是integer,
threads = omp_get_num_threads() 所以它是当前线程的标号. 不过这也没关系, 只是整数被强行转换成浮点.
看结果, 程序只开了一个线程, 标号为0.
作为fixed格式的话, 叹号要在每行第一个位置上开始, 这是fixed格式omp代码的要求.
******留空的6个位置.
      progranm main
      integer i,myTest
      real threads

!$    call omp_set_num_threads(4)
!$OMP PARALLEL DEFAULT(PRIVATE)
      threads = omp_get_num_threads()
      write(*,*) threads
!$OMP DO
      do i=1,10
        myTest = i*i*i-i*i
        write(*,*) myTest
      end do
!$OMP END DO
!$OMP END PARALLEL
      END

12 楼

直接复制10楼的代码然后发帖出现一堆乱码, 然后再nopad++上黏贴发现很多空白的地方出现"?"字符. 全部替换为空格之后再发帖就正常了. 不知道是论坛问题还是什么其他回事.

13 楼

结贴了,多谢yeg001的指点,多谢各位高手的关注和帮助。

我来回复

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