2015-06-23 33 views
-2

我對Fortran代碼正在與MPI和特定subroutine介紹以下MPI命令的Fortran與MPI錯誤

call MPI_Gather(nlocal,1,MPI_INTEGER,counts,1,MPI_INTEGER,0& 
     &,comm_cart,ierror) 

與給出以下錯誤:

This name does not have a type, and must have an explicit type. [MPI_INTEGER] 

據我所知,編譯器不承認此代碼的MPI部分。但是,除Fortran MPI數據類型MPI_INTEGER之外,所有其他相關變量(如nlocal, counts and comm_cart)都被識別。有人可以扔光,我做錯了嗎?

注:編譯器是英特爾編譯

+1

你是如何在變量空間中包含MPI_INTEGER的? – Ross

+1

您應該始終顯示更多的代碼,即您的所有符號來自哪裏以及您的聲明放置在哪裏。降價可能來自於未能顯示所有相關細節。問題本身是合法的。 –

回答

2

你必須告訴有關MPI的東西(主要變量)的編譯器。

現代的方式在每個範圍內引入

use mpi 

在過去它是使用

include "mpif.h" 

也做了,但有幾個缺點。也就是說,因爲它與FORTRAN 77兼容,所以它不會爲任何MPI子程序引入顯式接口,因此錯誤檢查不如use mpi。現代方法將幫助您更好地保持您的代碼正確。

另一方面,如果您使用use mpi,模塊mpi必須使用編譯程序時使用的編譯器(有時甚至是相同版本)進行編譯。