導航:首頁 > 源碼編譯 > mpif90編譯參數

mpif90編譯參數

發布時間:2023-02-15 19:21:32

『壹』 【Fortran並行科學計算】——Hello World程序

MPI(message passing interface),是一個消息傳遞介面。MPI的函數總共有287個。

想實現一個MPI並行計算的程序的話,只要掌握MPI的工作機理和6個簡單的MPI函數便可以了,本文介紹4個簡單MPI函數:MPI_INIT、MPI_COMM_RANK、MPI_COMM_SIZE和MPI_FINALIZE。

注意:以下調用格式為Fortran格式,大部分教程都是C語言的MPI介紹,這里以及以後的文章都是以Fortran為基礎,尤其要注意Fortran不分大小寫。

先給出一個最簡單的Hello_world的Fortran + MPI的程序,在此基礎上來分析MPI的4個最簡單的函數——MPI_INIT、MPI_COMM_RANK、MPI_COMM_SIZE和MPI_FINALIZE。

MPI_Init用來初始化MPI執行環境,建立多個MPI進程之間的聯系,為後續通信做准備。

MPI_Finalize則是結束MPI執行環境。

MPI_Comm_rank就是來標識各個MPI進程的,告訴調用該函數的進程「我是誰?」。

MPI_COMM_SIZE用來標識相應進程組中有多少個進程。

2.1. 將以上內容保存為hello_world.f90,上傳到伺服器的文件夾/home/xldeng/mpi裡面:

2.2. 編譯hello_world.f90為hello_world,並用ls查看內容:

2.3. 使用伺服器裡面的命令來調用不同的節點上面的核來計算:

3.1 . 注意程序中的一個小細節:

含義為調用mpi的庫函數,因為使用的是Intel MPI + Fortran90,所以調用的方式為:use mpi。Fortran77可能需要 include "mpif.h"。

3.2 . 在2.2節中的mpiifort是ifort的並行使用方法,檢驗mpiifort的用法:which mpiifort或者是mpiifort -v。

3.3 . 在2.3節中的說明:本程序的運行平台為伺服器上,所以使用的是 MPI使用指南 | 武漢大學超算中心 中提供的提交方法。如果在單台伺服器上面,可以使用如下命令:

來運行程序。

『貳』 mpif90是誰的編譯器

不是誰的編譯器,這只是一段程序。mpif90是可以從不同的編譯器編譯得到的,而伺服器上提供給你的mpicc,mpicxx和mpif90可能只是某一種程序。

『叄』 編譯vasp出現錯誤,求幫助,如能幫助,不勝感激

安裝環境centOS6.5+Intel parallel studio xe 2013+openmpi+fftw
這是修改過makefile後make出現的錯誤:
fpp -f_com=no -free -w0 base.F base.f90 -DMPI -DHOST=\\"linuxIFC\\" -DIFC -DCACHE_SIZE=4000 -DPGF90 -Davoidalloc -DNGZhalf -DMPI_BLOCK=8000 -Duse_collective -DscaLAPACK -DRPROMU_DGEMV -DRACCMU_DGEMV
mpif90 -FR -names lowercase -assume byterecl -O2 -ip -I/opt/intel/composer_xe_2013.2.146/mkl/include/fftw -c base.f90
mpif90: error while loading shared libraries: libimf.so: cannot open shared object file: No such file or directory
make: *** Error 127
這是我的修改過的makefile:
1 .SUFFIXES: .inc .f .f90 .F
2 #-----------------------------------------------------------------------
3 # Makefile for Intel Fortran compiler for Pentium/Athlon/Opteron
4 # based systems
5 # we recommend this makefile for both Intel as well as AMD systems
6 # for AMD based systems appropriate BLAS (libgoto) and fftw libraries are
7 # however mandatory (whereas they are optional for Intel platforms)
8 # For Athlon we recommend
9 # ) to link against libgoto (and mkl as a backup for missing routines)
10 # ) odd enough link in libfftw3xf_intel.a (fftw interface for mkl)
11 # feedback is greatly appreciated
12 #
13 # The makefile was tested only under Linux on Intel and AMD platforms
14 # the following compiler versions have been tested:
15 # - ifc.7.1 works stable somewhat slow but reliably
16 # - ifc.8.1 fails to compile the code properly
17 # - ifc.9.1 recommended (both for 32 and 64 bit)
18 # - ifc.10.1 partially recommended (both for 32 and 64 bit)
19 # tested build 20080312 Package ID: l_fc_p_10.1.015
20 # the gamma only mpi version can not be compiles
21 # using ifc.10.1
22 # - ifc.11.1 partially recommended (some problems with Gamma only and intel fftw)
23 # Build 20090630 Package ID: l_cprof_p_11.1.046
24 # - ifort.12.1 strongly recommended (we use this to compile vasp)
25 # Version 12.1.5.339 Build 20120612
26 #
27 # it might be required to change some of li

『肆』 安裝mpi 在mac 上~ 後來編譯很簡單的程序。但是出現錯誤,不知道在安裝上出現什麼錯誤了~

mpi裝錯了

『伍』 老大們請問下編譯mpi的問題

1、icc

Intel C/C++編譯器接受遵守ANSI C/C++ , ISO C/C++ standards,GNU inline ASM for IA-32 architecture標準的輸入。與linux下常用的gcc兼容並支持更大的C語言擴展,包括源文件、命令行參數、目標文件。不支持gcc的inline方式的匯編。例,f.c

#include

int main(int argc, char* argv[]){

printf("Hello\n");

return 0;

}

編譯:icc -c f.cpp -o f.o

鏈接:icc f.o -o f

運行:./f

注意,編譯與鏈接都由icc來完成,icc常用命令行參數:

-o 輸出文件命名

-I include路徑

-L lib路徑

-l 包含的lib名

-c 僅生成目標文件(*.o),不鏈接

-On n=0,1,2,3 編譯器優化選項,n=0關閉編譯器優化,n=3使用最激進的優化

-c99[-] 打開/關閉 c99規范的支持

詳細的請參照icc的manpage.

2、ifort

Intel Fortran編譯器支持F77/90/95標准並與CFV(Compaq Visual Fortran)兼容。例,f.f90

program f

print *, "Hello"

stop

end

編譯:ifort -c f.f90 -o f.o

鏈接:ifort f.o -o f

運行:./f

編譯與連接同樣由ifort來完成,ifort常用命令行參數:

-o 輸出文件命名

-I include路徑

-L lib路徑

-l 包含的lib名

-c 僅生成目標文件(*.o),不鏈接

-On n=0,1,2,3 編譯器優化選項,n=0關閉編譯器優化,n=3使用最激進的優化

-std90 使用F90標准編譯

-std95 使用F 95標准編譯

-f77rtl 編譯使用F77運行方式的代碼(用於解決特殊問題)

These options optimize application performance for a particular Intel? processor or family of processors. The compiler generates code that takes advantage of features of the specified processor.

Option

Description
tpp5 or G5 Optimizes for Intel? Pentium? and Pentium? with MMX? technology processors.
tpp6 or G6 Optimizes for Intel? Pentium? Pro, Pentium? II and Pentium? III processors.
tpp7 or G7 Optimizes for Intel? Pentium? 4, Intel? Xeon?, Intel? Pentium? M processors, and Intel? Pentium? 4 processors with Streaming SIMD Extensions 3 (SSE3) instruction support.
On Intel? EM64T systems, only option tpp7 (Linux) or G7 (Windows) is valid.

About tpp:

Intel Fortran Compiler Options:

Intel(R) Fortran Compiler Options:

ifort編譯器提供了非常多的優化參數

$ ifort --help | more 查看就可以
也可以定位到某個參數

$ifort --help | grep -5 '-mkl'
-5表示顯示查找到的行及下面5行的內容。

3、Intel MKL數學庫針對Intel系列處理器進行了專門的優化,主要包含的庫有:

基本線形代數運算(BLAS)

向量與向量、向量與矩陣、矩陣與矩陣的運算

稀疏線形代數運算

快速傅立葉變換(單精度/雙精度)

LAPACK(求解線形方程組、最小方差、特徵值、Sylvester方程等)

向量數學庫(VML)

向量統計學庫(VSL)

高級離散傅立葉變換

編譯:

icc multi.c -I/opt/intel/mkl/include –L/intel/mkl/lib –lmpi_ipf –o multi

4、MPI程序編譯

消息傳遞介面(MPI)並行程序設計模型程序的編譯命令。例,f.c

include

#include

main(argc,argv)

int argc;

char *argv[];

{

char name[BUFSIZ];

int length;

MPI_Init(&argc,&argv);

MPI_Get_processor_name(name, &length);

printf("%s: hello world\n", name);

MPI_Finalize();

}

編譯與連接均使用mpicc,參數與mpicc中定義的編譯器相同,這里與icc相同。

mpicc –c hello.c –o hello.o

mpicc hello.o –o hello

運行使用mpirun 命令,將運行需要的節點定義在文件中並在-machinfile中制定。

文件: nodelist

node1

node1

node2

node3

運行:

$mpirun –machefile nodelist –np 4 ./hello

node1: hello world

node1: hello world

node2: hello world

node3: hello world

5、32位向64位的移植

32位程序到64位移植中應注意的常見問題:

數據截斷:

由於long類型變數的運算(賦值、比較、移位等)產生。long定義在x86上為32bits,而在ia64上為64bits.容易在與int型變數運算時出現異常。

處理方法:盡量避免不同類型變數間的運算,避免將長度較長的變數賦值到較短的變數中,統一變數長度可以解決這個問題。簡單的對於32位轉移到64位可以將所有long定義轉換為int定義。

『陸』 如何在 Oracle Solaris 11 上編譯和運行 MPI 程序

要使用 OMPT,需要在系統上安裝和運行 Oracle Solaris 11。除了安裝過程中使用的 root 許可權之外,運行任何 OMPT 實用程序通常無需任何其他特殊許可權。

如果您想編譯 MPI 程序,則需要安裝 Oracle Solaris Studio 12.1 或更高版本。在運行 MPI 程序的節點集群上,可以在其中一個節點上安裝 Oracle Solaris Studio 並僅在該節點上編譯 openmpi-15 程序包,但在所有節點上都安裝該程序包。

要獲取 OMPT,請安裝 openmpi-15 程序包,該程序包由一個映像包管理系統 (IPS) 信息庫託管,您的系統上應配置有該信息庫。要驗證是否配置了 IPS 信息庫,請運行 pkg publisher 命令。

如果尚未 配置 IPS 信息庫,請在嘗試添加 openmpi-15 程序包之前配置它。否則,程序包添加將失敗。

系統應配置了網路訪問(如果是通過網路訪問 IPS 信息庫)或本地配置的從同一系統提供服務的 IPS 信息庫。

本文示例使用了本地配置的 IPS 信息庫,如 pkg publisher 命令的以下輸出所示,該輸出指示 IPS 信息庫通過 HTTP 託管在 localhost 上。

root@solarix:/usr/share/distro_const# pkg publisher
PUBLISHER TYPE STATUS URI
solaris origin online http://localhost/

驗證配置了信息庫之後,以 root 身份運行 pkg install openmpi-15 命令添加該分發構造器程序包。然後從 IPS 信息庫下載 openmpi-15 程序包並立即安裝。

pkg install openmpi-15 命令顯示進程的狀態,如清單 1 所示,這樣便於觀察進度。

清單 1:pkg install openmpi-15 命令的輸出
root@solarix:~# pkg install openmpi-15

Creating Plan

Packages to install: 2
Create boot environment: No

DOWNLOAD PKGS FILES XFER (MB)
service/picl 0/2 0/1430 0.0/11.9[K
developer/openmpi-15 1/2 1430/1430 11.9/11.9[K
Completed 2/2 1430/1430 11.9/11.9[K

PHASE ACTIONS
Install Phase 1639/1639

PHASE ITEMS
Package State Update Phase 1/2
Package State Update Phase 2/2

Image State Update Phase 1/2
Image State Update Phase 2/2

PHASE ITEMS
Reading Existing Index 1/8
Reading Existing Index 5/8
Reading Existing Index 8/8

Indexing Packages 2/2

安裝完 openmpi-15 程序包之後,只需在 PATH 變數中包括 /usr/openmpi/ompi-15/bin,然後就一切准備妥當。

使用 OMPT 編譯 MPI 程序
使用 OMPT 編譯 MPI 程序有兩種方式。您可以使用程序包中包含的編譯器包裝器(mpicc、mpiCC、mpif77 和 mpif90)或者直接調用編譯器。

因為需要包含的 include、library 和 run 路徑,建議採用第一種方法。包裝器將其不了解的所有選項都傳給 Oracle Solaris Studio 編譯器,因此您應能夠使用包裝器實用程序替換 makefile 中編譯器的所有實例。

以清單 2 作為示例 MPI 程序,可以使用一行命令編譯程序:

mpicc hello.c -o hello.x

清單 2:示例 hello.c 程序
#include <stdio.h>
#include <mpi.h>

int main(int argc, char **argv) {
int np, me;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&np);
MPI_Comm_rank(MPI_COMM_WORLD,&me);
printf("hello from %d of %d\n", me, np);
MPI_Finalize();
return 0;
}

還可以執行兩階段的編譯和鏈接:

mpicc -c hello.c
mpicc hello.o -o hello.x

如果要直接執行編譯器而不使用包裝器,可以通過向包裝器提供 -showme 選項來確定包裝器使用的選項:

mpicc -showme hello.c -o hello.x

使用 OMPT 運行 MPI 程序
編譯完可執行文件並與 OMPT 庫鏈接之後,可以單獨運行該程序或使用並行作業啟動器實用程序 mpirun 來運行。

要單獨運行程序,只需運行該可執行文件,就跟普通非並行可執行文件一樣。但是,隨後將由該程序來負責調用相應的 MPI API(如 MPI_Comm_spawn 或 MPI_Comm_spawn_multiple)來生成 MPI 作業的其他進程。

要一開始就創建運行多個進程的 MPI 作業,請使用 mpirun 實用程序。例如,如果您要使用總共 8 個進程在 2 個節點上運行我們的示例 MPI 程序,可以使用以下命令:

mpirun -np 8 -host hostname1,hostname2 hello.x

有幾個選項可以與 mpirun 一起用來控制綁定、布局、輸出重定向等等。通過執行 mpirun -h 或 man mpirun 可以獲取有關這些選項的更多信息。

『柒』 linux用GCC和mpif90編譯程序,出現undefined reference to `..Dm_mpi』錯誤。請問什麼原因呢

是undefined reference to `MPI_Init' 嗎?
編譯器不知道MPI_Init,您沒有定義。

MPI_Init應該是自己定義的一個板子初始化函數,要把這個初始化程序的代碼准備好。
不行的話那麼您需要include定義MPI_Init的頭文件。

『捌』 mpi並行問題,MPI_Barrier直接報錯

這個是正常的。
因為雖然邏輯上的確如此,但是輸出是有緩存的,也就是說輸出的順序不一定是邏輯的順序。。大致是這個意思,,我也不是計算機系的,表述可能不嚴格。
如果你在mpi_barrier()後加上fflush(stdout)應該輸出的就是邏輯的順序了。。

『玖』 RedHat伺服器要用到mpif90,腳本里和.bashrc里都修改了,但是為什麼腳本還是調用默認的gfortran

這個是系統配置有問題, 還沒有生效的, 能看看wo 的網名的嗎?----->就是專門解決這個問題的!!

『拾』 linux下,如何覆蓋全局環境變數里的可執行文件

在你的自己的home下編譯的話,你自己定義的PATH應該可以替代全局PATH。

閱讀全文

與mpif90編譯參數相關的資料

熱點內容
php微信圖片防盜鏈 瀏覽:795
安卓1怎麼讀音 瀏覽:286
農業app怎麼開通快捷支付 瀏覽:908
pythonredisdict 瀏覽:382
如何攻擊別人網賭伺服器 瀏覽:878
隱私與應用加密的圖案密碼 瀏覽:34
陳情令王一博解壓 瀏覽:35
c編譯器使用說明 瀏覽:703
鄭州前端程序員私活有風險嗎 瀏覽:10
小型螺桿機壓縮機 瀏覽:516
成人解壓最好的方法 瀏覽:48
最小製冷壓縮機 瀏覽:490
xampp支持python 瀏覽:367
深圳周立功單片機 瀏覽:61
圓上點與點之間角度演算法 瀏覽:869
怎麼知道微信關聯了哪些app 瀏覽:702
android事件驅動 瀏覽:888
簽約大屏系統源碼 瀏覽:808
安卓系統怎麼轉入平板 瀏覽:429
安卓手機相機怎麼提取文字 瀏覽:219