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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大家好,由于一些原因,本人需要接触Fortran,有如下疑问。相关的知识,希望对你有一定的参考价值。

1)在XP下使用Visual Fortran 6.0编译器编写Fortran 77程序,电脑是双核的,想支持OpenMP多线程编程,该怎么做呢?
程序中是不是需要添加头文件或者运行时链接库什么的。可以拿简单的程序示例讲解。

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

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

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

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

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

2)Fortran77、6个空格的是fixed格式,不是Free格式。
强烈推荐你使用fortran90 free格式,并行效率更高。fortran77 fixed格式已是old-fashion。你可以在这方面做些功课。

每行限度为72列,一般都不够用的,不过在编译时加上,-extend-source选项就可以把72列的限制扩展到132列,你查查看。非并行的程序使用使用普通的编译器如ifort、gfortran等,不过既然是使用OMP,编译时就应该用mpiifort。

程序中声明private变量时,应该是用到时再声明,一般不会太长吧。
!$OMP PARALLEL DO PRIVATE (K,J,I)
DO K = 1,KM
DO J = 1,JMT
DO I = 1,IMT
variables (I,J,K)= 0.0
END DO
END DO
END DO

3)linux下,你这是一个主程序调用多个F90程序,推荐你使用make编译、链接,这里是一个例子,比如你有main.F90 其中使用MOD模块mymod,并调用了test1.F90和 test2.F90,那么你的make文件(Makefile)可以这样写:

INCLDIR = -I. -I/usr/include -I/your/mpi/include
CPPFLAGS = -P -traditional
CPP = /usr/bin/cpp $(CPPFLAGS) $(INCLDIR)
NLIB = -L/your/mpi/bin64
###your mpi compile options
FFLAGS = -O2 -no-vec -r8 -i4 -convert big_endian -assume byterecl -save
FC = /your/mpi/bin64/mpiifort $(FFLAGS)
OBJS = mymod.o test1.o test2.o main.o
##########################################################################
###the executive file---run.exe will be created
run.exe: $(OBJS)
$(FC) -o ./run.exe $(OBJS) $(NLIB)

.SUFFIXES : .F90
.F90.o:
$(CPP) $< > $*.f90 ; $(FC) -c $*.f90
clean:
rm -f *.o *.il *.f90 *.f *.mod *.d run.exe

依次执行
$ make clean
$ make
即可编译成可执行文件run.exe,运行之即可。追问

谢谢,很有帮助。

参考技术A 我是在linux下学的fortran没用过windows的
Linux下安装MPI lib就可以编译了,支持f77和f90。写程序的时候和单线程程序有些区别,头文件要加include 'mpif.h',还要call一些mpi里自带的函数来获得cpu的信息,比如cpu的id,个数,然后根据这些信息来把原来单CPU的程序分成几个流程,逐一写出来,最后用mpi提供的编译器编译。百度文库里有好多资料介绍的很详细。

多个文件的编译可以直接用
$ gfortran main.f function.f subroutine.f -o main.x
或者逐一编译成对象文件再添加链接
$ gfortran -c funcion.f 自动生成function.o
$ gfortran -c subroutine.f 自动生成subroutine.o
最后再一起编译
$ gfortran main.f function.o subroutine.o -o main.x追问

首先,感谢你热心细致的回答。
你说的MPI跟我请教的OpenMP的问题还有很大差别。编译的问题现在解决了,编译时加上“- openmp”选项,程序中首行要加入“use OMP_lib”。
再次感谢你的热心解答。

95后妹子对服务器托管了解的自述

大家好,本人95后妹子一枚,平时喜欢研究研究服务器相关知识,知识面还不是很全,写的不好的地方希望大家不要喷嘻嘻。

对于服务器托管对于一些新接触的朋友是一头雾水,本人摘录了一些情况,整理总结给大家参考,对于服务器的托管可以根据以下几点做分析:

一、机房

不同级别的机房,采用的网络设备都是不一样的。不要小看一台交换机,好的和差的价钱相差的可不是一点点,自然会影响价钱。一般比较大型的机房如南通一诺网络采用的都是华为YH3C的交换机和路由器。

二、 网络环境

目前,IDC数据中心业务全国遍地开花,大小机房全国也比比皆是。而网络带宽主要分为骨干节点带宽和IDC业务专区带宽两块。像北京,上海,广州,深圳的机房,直连中国电信骨干路由器,线路资源具有得天独厚的优势。而二三级地市的机房价钱相对就便宜了,带宽质量也没有差到哪去,还是很有性价比的。

三、 服务水平

724小时机房现场服务,但是要真正严格追究起来,目前国内恐怕没几家可以做到这一点。首先,电信企业除了重启,其他的服务都是要客户自己完成的。而代理商虽然有心做好服务,但是在机房里申请一个办公室也不是件容易的事情。而南通一诺属于自建机房 ,客观条件允许,724小时机房现场服务 。这点我觉得做的蛮好的。

合作咨询电话:0513-66611939 QQ:957662167

以上是关于大家好,由于一些原因,本人需要接触Fortran,有如下疑问。的主要内容,如果未能解决你的问题,请参考以下文章

linux ubuntu 安装intel fortran xe时,怎么通过prerequisitus

android内存释放处理

95后妹子对服务器托管了解的自述

fortran与c

算法理解—— 快速排序 v2.0

是否有可能将“include”转移到fortran的模块中?