安装了MPI,可是Fortran仍然不能识别use mpi

作者&投稿:农淑 (若有异议请与网页底部的电邮联系)
intel visual fortran编译器用什么实现MPI并行?是用MPICH2吗?和MPICH2类似的还有些什么?~

用gcc/mingw-gcc编译的就可以调试,vc等其它编译器带有自己的调试器

MPI在定义数据类型时仅定义了Fortran内置的标准的数据类型如integer、real、character、double precesion等,而对于Fortran90所提供的派生数据类型(即type命令定义的结构数据类型)没有提供。这种派生数据类型属于不连续数据,在此种类型中往往包含多种标准数据类型和数组。

在MPI中进行这种派生数据类型的发送和接收时通常有两种处理方式,一种就是利用MPI提供的创建派生数据类型的命令新建与Fortran90程序中已经定义好的派生数据类型一样的数据结构,然后生成一种MPI的派生类型,最后再传递这种MPI的派生数据类型;另外一种方法就是对数据进行封包发送,然后在接收端再解包。最近研究了一下前面一种方法,这里简单介绍一下使用经验。

比如在Fortran90程序中定义如下派生数据类型:
type type_global !INT(5+5),character(2*10),real(3),real*8(2)
integer npoin,nelem,ngroup,nmat,nblks
real x,y,z
real*8 x8,y8
integer icmatrix(5)
character*20 outplot,type_abc
end type type_global
在这种派生数据类型中包含有四种标准数据类型,即整型(10个,包括5个标量和1个含5个元素的数组)、实型(3个)、双精度实型(3个)、字符串型(2个,每个20个字符)。为了传递这种派生类型数据,首先要把它的数据结构定义成一个MPI派生类型,要用到两个MPI命令,即MPI_TYPE_STRUCT和MPI_TYPE_COMMIT,前者用来定义派生数据结构,后者用来提交确认。MPI_TYPE_STRUCT的调用格式如下:
call MPI_TYPE_STRUCT(ndatatype,blocklens_global,offsets_global,oldtypes_global, &
type_global_MPI,ierr)
说明如下:
ndatatype为整型变量,其值为派生数据类型里所包含的标准类型个数(本例中将相同的标准类型数据进行合并),此例子中的值为4,即整型、字符串型、实型和双精度实型;

blocklens_global(0:3)为ndatatype个元素的整型数组,每个元素的值为此派生类型中相应标准数据类型的个数,若以整型、字符串型、实型、双精度实型为顺序,则此数组值为[10,2,3,2];

offsets_global(0:3)为ndatatype个元素的整型数组,每个元素的值为此派生类型中相应标准数据类型的位移偏移,这个需要有派生类型数据结构的类型表的相关知识。简单来说,就是在此派生类型中,第1种标准类型(整型)的位移偏移为0,第2种标准类型(字符串型)的位移偏移应该为前一种(第1种)标准类型的个数乘标准类型在内存中所占的字节数(4字节*10个=40),第3种和第4种标准类型的位移偏移以同样的方法计算。在此例中值为[0,40,80,92],在Fortran90中默认整型点4字节,实型占4字节,双精度实型占8字节,字符串按其长度,一个字符占一个字节来计算。

oldtypes_global(0:3)为ndatatype个元素的整型数组,每个元素的值为此派生类型中相应标准数据类型的MPI类型,按上面的顺序,其值应该为[MPI_INTEGER,MPI_CHARACTER,MPI_REAL,MPI_DOUBLE_PRECESION]

blocklens_global,offsets_global,oldtypes_global这三个数组中各标准数据类型的顺序要一致,哪种在前哪种在后无所谓,但三个数据中的顺序一定要一致。

type_global_MPI为整型变量,定义完成后就成为MPI可以使用的派生数据类型名,可以像MPI_INTEGER、MPI_REAL等一样使用。

ierr是一个整型变量,都应该知道了。

最后,再用call MPI_TYPE_COMMIT(type_global_MPI,ierr)来提交确认后就可以了,后面再用MPI_SEND和MPI_RECV时就可以使用type_global_MPI作为派生数据类型来传递了。

下面给出一个完整的利用MPI进行Fortran90的派生数据类型传递的代码,主要是用MPI来传递一个派生结构数据,然后在各进程中对其中的数据进行修改,然后再打印出各进程修改后的数据看是否成功。
!==============================================================
program MPI_TypeData_SendRecv
use mpi
character*(MPI_MAX_PROCESSOR_NAME) pcname,text*20
integer,parameter::ndatatype=4
integer myid,npc,namelen,re,ierr,ver,subver,m,n,status(MPI_STATUS_SIZE),ipc
integer type_block_MPI,type_global_MPI, &
blocklens_global(0:ndatatype-1),offsets_global(0:ndatatype-1), &
oldtypes_global(0:ndatatype-1), &
blocklens_block(0:2),offsets_block(0:2),oldtypes_block(0:2)
integer(8)::extent

type type_global !INT(5+5),character(2*10),real(3),real*8(2)
integer npoin,nelem,ngroup,nmat,nblks
real x,y,z
real*8 x8,y8
integer icmatrix(5)
character*20 outplot,type_abc
end type type_global
type type_block
integer,allocatable::appear_process(:,:),matno_process(:,:)
end type type_block
type(type_global) GHM_Global,GHM_Global1
type(type_block) GHM_Blocks
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD,myid,ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD,npc,ierr)
btime=MPI_WTIME()
call MPI_GET_PROCESSOR_NAME(pcname,namelen,ierr)
call MPI_GET_VERSION(ver,subver,ieer)
write(*,1000)myid,npc,trim(pcname),ver,subver
if(myid==0)then !initial type array in processor 0
GHM_Global%npoin=10;GHM_Global%ngroup=5
GHM_Global%nblks=2
do ipc=1,size(GHM_Global%icmatrix)
GHM_Global%icmatrix(ipc)=ipc-1
enddo
GHM_Global%y=0.4;GHM_Global%y8=0.8
GHM_Global%outplot='GID';GHM_Global%type_ABC='VIE'

ngroup=GHM_Global%ngroup
nblks=GHM_Global%nblks
allocate(GHM_Blocks%appear_process(ngroup,nblks), &
GHM_Blocks%matno_process(ngroup,nblks))
GHM_Blocks%appear_process=0;GHM_Blocks%matno_process=0
endif
blocklens_global(0)=10 ! 10 integer
offsets_global(0) =0
oldtypes_global(0) =MPI_INTEGER
call MPI_TYPE_EXTENT(MPI_INTEGER,extent,ierr)
blocklens_global(1)=40 ! 40 character
offsets_global( www.cshangzj.com 1) =offsets_global(0)+blocklens_global(0)*extent
oldtypes_global(1) =MPI_CHARACTER
call MPI_TYPE_EXTENT(MPI_CHARACTER,extent,ierr)
blocklens_global(2)=3 ! 3 real
offsets_global(2) =offsets_global(1)+blocklens_global(1)*extent
oldtypes_global(2) =MPI_REAL
call MPI_TYPE_EXTENT(MPI_REAL,extent,ierr)
blocklens_global(3)=2 ! 2 real*8
offsets_global(3) =offsets_global(2)+blocklens_global(2)*extent
oldtypes_global(3) =MPI_DOUBLE_PRECISION
call MPI_TYPE_EXTENT(MPI_INTEGER,extent,ierr)
write(*,'(a,10i4)')'myid_int =',myid,extent
call MPI_TYPE_EXTENT(MPI_REAL,extent,ierr)
write(*,'(a,10i4)')'myid_real=',myid,extent
call MPI_TYPE_EXTENT(MPI_DOUBLE_PRECISION,extent,ierr)
write(*,'(a,10i4)')'myid_doub=',myid,extent
call MPI_TYPE_EXTENT(MPI_CHARACTER,extent,ierr)
write(*,'(a,10i4)')'myid_char=',myid,extent,offsets_global
call MPI_TYPE_STRUCT(ndatatype,blocklens_global,offsets_global,oldtypes_global, &
type_global_MPI,ierr)
call MPI_TYPE_COMMIT(type_global_MPI,ierr)
if(myid==0)then ! send GHM_Global from 0 processor to other processors
do ipc=1,npc-1
call MPI_SEND(GHM_Global,1,type_global_MPI,ipc,9,MPI_COMM_WORLD,ierr)
enddo
else
call MPI_RECV(GHM_Global1,1,type_global_MP

个人经验啊,你要确定一下你的编译器的设置是否包含mpi的头文件目录,
options/directories 有没有你安装的mpi目录
.../mpich/sdk/include

.../mpich/sdk/lib
而且在你的工程里面要有
ws2_32.lib和mpich.lib这两个库

我没用过windows下的mpi啊,个人觉得还是在linux下比较好。

VF的 Tools - options - Directories 下面
Include files 和 Library files 中,添加MPICH2目录下相应的路径

===============================

换一个非中文目录,而且不带空格的目录名,再试试

VF/DF不支持全路径中包含字母数字之外的符号,比如中文

====================================================

那个难道不是 MPI_GET_PROCESSOR_NAME ?
为什么要用 _MPI_GET_PROCESSOR_NAME ?

==================================

我只能建议暂时试着去掉Include files 和 Library files 中和IMSL有关的部分,再编译看看。

.

这和是不是在Linux下面工作有毛关系?
PGI、Intel编译器都有 for windows的,
在Windows下面用起来还不是一样的方便?
和在Linux下有什么本质区别?

导致楼主折腾半天的原因是CVF6.6太古老了,而不是因为windows

你要是Unix/Linux下做这些工作的话会变得异常简单和直观!


为什么我安装STEP7时 提示:未找到SSF文件啊
SSF文件错误是因为路径过长或者说是因为路径中含有无法识别的字母造成的。解决方案:如果是英文系统可能就是路径中含有了中文字符等,只要将其移动到没有含有特殊字符的盘符就可以避免这个问题。

奥地利施泰尔MPI69式9MM冲锋枪
另外,内部结构稍有改变,使理论射速增加到700发/min左右#*[5]。瞄准装置MPi69式和MPi81式配有机械瞄准具和单点式瞄准镜。机械瞄准具的准星为柱形,表尺为L形,两个觇孔照门的射程装定分别为100m和200m。单点式瞄准镜由螺栓固定在机匣上面的连接座上。弹药 这两种枪均发射9mm帕拉贝鲁姆手枪弹。

蔷薇少女水银灯的正版美图,在网上的没几个正版,请各位帮忙找找正版的...
请务必相信这是正版官方图。http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/ab4a51ee058424cfb3fb959f.jpg这个是漫画里的http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/5d7f04f401d57ce27709d707.jpghttp:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/e6bd04339c1e4ff51b4cff21.jpghttp:\/\/imgsrc.baidu....

男名星穿白袜子的照片 最好是张杰的 谢谢啦
http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/1d5bc2fd0056695ad7887d6f.jpg http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/67ad9a50b7976d7584352467.jpg http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/91df21a4e876b1e09152ee67.jpg http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/2296934582f...

给我一张李玟最最性感,狂野的图
http:\/\/hiphotos.baidu.com\/498221901\/pic\/item\/8b1581189d406a5e43a9ad86.jpg http:\/\/hiphotos.baidu.com\/snowrosey\/pic\/item\/7042eacdbd63960d00e9281c.jpg http:\/\/img1.cache.netease.com\/2008\/2008\/8\/5\/200808051049560d4e5.jpg http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/eefbb2fbe...

【求救】要男生侧面全身的动漫图
如下 O(∩_∩)O哈哈~~\\(≥▽≤)\/~啦啦啦

求草莓100 向井梢图片
http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/7a475d60c6c5b3cd8db10d93.jpg http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/d946e824caf444134c088d93.jpg http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/67fd86d64b12733d07088b93.jpg http:\/\/imgsrc.baidu.com\/forum\/mpic\/item\/177fb2de61ee3...

找一种白色非主流女生图片
这个不、、、

求 华丽动漫图片
http:\/\/hiphotos.baidu.com\/513790908\/mpic\/item\/d3305cd8003e66cc38012f35.jpg http:\/\/hiphotos.baidu.com\/513790908\/mpic\/item\/4ad50df44bd1fe00bd310936.jpg http:\/\/hiphotos.baidu.com\/513790908\/mpic\/item\/77f4083932028e01b9998f31.jpg http:\/\/hiphotos.baidu.com\/513790908\/abpic\/item...

鞋子鞋子!这个鞋子是什么的。
我见过! 名为: 布鞋 很普通的鞋子,实在要买就去卖针头线脑的地方或百货大厦买吧 一般没牌子~你要认为它很漂亮,就穿吧!不要在意别人的眼光。这种鞋很便宜, 一般价位在十五到二十左右,做工精良的要三十。个人建议表买,因为我认为不算太好看!不过如果你喜欢,买了也是无妨的!!分~!~~...

阳朔县18582013018: 安装了MPI,可是Fortran仍然不能识别use mpi -
东郭疤盐酸: 个人经验啊,你要确定一下你的编译器的设置是否包含mpi的头文件目录,options/directories 有没有你安装的mpi目录.../mpich/sdk/include.../mpich/sdk/lib 而且在你的工程里面要有 ws2_32.lib和mpich.lib这两个库 我没用过windows下的mpi啊,个人觉得还是在linux下比较好.

阳朔县18582013018: linux下如何配置MPI,如何在MPI环境下编译fortran并行程序? -
东郭疤盐酸: 先安装 MPICH然后可以用 mpif77,这个其实是调用 gfortran 等编译器的脚本而已

阳朔县18582013018: 求助,安装了Intel Fortran 2013,使用出现错误 -
东郭疤盐酸: 1,假设2个文件(license和源文件)存放在/usr/src/intel目录下,我去年12月份下载的最新版本是10.1.008,别的也一样的装.解压安装文件 tar xzvf l_fc_p_10.1.008.tar.gz2安装并指定协议,将编译器安装在/opt/intel_fc_80目录下,协议则在该目...

阳朔县18582013018: fortran实现mpi执行有错,跪求高手帮忙! -
东郭疤盐酸: 在程序的开头处加上: include “mpif.h” 或 use mpi

阳朔县18582013018: 关于MPI并行计算 fortran语言 -
东郭疤盐酸: 这个很容易实现. 用三个CPU(编号0 1 2)执行程序,在初始化完成之后 0为主进程 两个循环可这样实现, if myid .eq. 1do ***enddo endifif myid .eq. 2do***enddo endif数据发送和接受用MPI_SEND 和 MPI_RECV实现,具体代码要看你要传递数据的类型,数量等. 你想编好这个程序得简单了解MPI编程的FORTRAN实现建议你看一本书http://wenku.baidu.com/view/f1e376649b6648d7c1c74636.html

阳朔县18582013018: 我在64位win7安装了fortran powerstion4.0可是运行不了,这么解决? -
东郭疤盐酸: 首先看看你的电脑上是否装了visio,如果装了的话 应该就不可以,这两个之间有冲突,如果没有的话,可以换更高的版本,比如6.5的fortran ,因为低版本的64的系统是不兼容的.希望能帮到您!

阳朔县18582013018: 为什么Fortran调试无错误运行不出结果 -
东郭疤盐酸: 有输出语句吗?调试无错误并不能说明对所有可能均无错误.

阳朔县18582013018: 安装了vs2010和Visual.Fortran.Composer.XE.,但打开vs后就是找不到fortran是怎么回事啊,求解答 -
东郭疤盐酸: 有如下原因可能使得打开vs后找不到fortran. 第一、安装顺序有问题,正确的安装顺序是先安装vs2010,再安装Visual fortran 第二、安装版本有问题,这个问题可能性不大,但是有可能.可以到网盘里下载vs2013和vf2013sp1.网盘地址:https:...

阳朔县18582013018: fortran6.6创建不了工程 -
东郭疤盐酸: 安装好VISUAL FORTRAN后1、运行Developer studio即可开始编译FORTRAN程序2、选择File菜单中的New选项3、在弹出的对话框选择projects标签,其他标签不用管,projects格式选用Fortran console application;在project name里命名(最...

阳朔县18582013018: 运行FORTRAN时候出现Microsoft developer studio如何解决 -
东郭疤盐酸: 我不知道你安装的是哪一款fortran编译器.但是有不少的fortran编译器以microsoft developer studio 作为编译开发环境,比如compaq visual fortran.如果你安装的是compaq visual fortran,那么你就可以在 microsoft developer studio 中书写并编译 fortran 代码了.如果你的意思是,打开出现 microsoft delevolper studio 错误.则可能你使用的windows7操作系统,该系统无法运行 compaq visual fortran,毕竟后者是三十多年前的产品了.建议你更换其他编译器.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网