回 帖 发 新 帖 刷新版面

主题:[原创]【求助】有关fortran77使用OpenMP并行编程的问题

大家好,由于一些原因,本人非IT专业但需要接触Fortran,有如下疑问。

请问:

1)在XP下使用Visual Fortran 6.0编译器编写Fortran 77程序,电脑是双核的,想支持OpenMP多线程编程,该怎么做呢?

程序中是不是需要添加头文件或者运行时链接库什么的。,可以拿简单的程序示例讲解哈。

2)Fortran77好像有个编程格式叫Free格式,每行程序前面必须要有6个空格,一行程序长度超过多少列来着就得换行,之后要在第六列添加‘&’符号才行。那么,如果使用OpenMP声明一些private 、public等变量太多,需要换行,是不是也这么处理?请有经验的讲解下。

3)如果在Linux下编译Fortran 95程序,程序包含主程序文件和多个子程序文件,这种情况该怎么编译呢?

4)之前看了个帖子,说的是多个线程访问共享变量造成竞争使程序运行时间变长,那么如果我有多个数组是共享变量,但不同的线程读写的是数组不同的元素部分,就是说线程根据不同的下标来访问数组,还会有竞争吗?

5)如果对同一个共享变量,多个线程都是同时读而非写,这样会产生竞争吗?会影响并行效率么?

问题待补充中......

 

签名档
有大家的帮助,不胜感激。

回复列表 (共14个回复)

11 楼

OMP_NUM_THREADS 是环境变量. 我倒是不知道可以这么设置.parameter(OMP_NUM_THREADS=10)
这样设置不会让编译器把OMP_NUM_THREADS错误地认为是fortran中的一个变量而已? (环境变量我都是在linux的profile里面设置的, windows同样有设置环境变量的地方.)
我把你的这一句删掉, 并换上IMPLICIT NONE. 注意, gfortran编译的时候是使用 -fopenmp. 编译通过并运行正常(显示有12个进程, 因为环境变量是12个线程).


[****]$ gfortran -fopenmp pitest.f90 
[****]$ ./a.out
 Enter number of intervals
 number of thread is            1
 thread id            1
 thread id            2
 thread id           11
 thread id            9
... 以下省略

12 楼

pfan现在很奇怪, 所有回复的排版都无效, 必须回复后修改并确认后原来的排版才能生效... 无语了.

13 楼

9楼问题原因找到,“-openmp”选项改为“-fopenmp”:
gfortran -fopenmp omptest4.f -o omptest4.gccout

14 楼

请看我11楼的编译命令...

我来回复

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