Linux編譯Fortran程序_第1頁
Linux編譯Fortran程序_第2頁
Linux編譯Fortran程序_第3頁
Linux編譯Fortran程序_第4頁
Linux編譯Fortran程序_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Linux下下Fortran程序的編譯程序的編譯關(guān)于環(huán)境變量關(guān)于環(huán)境變量2.4 Makefile2.4 Makefile和腳本和腳本2.1 Linux2.1 Linux下的編譯器下的編譯器2.22.2簡(jiǎn)單編譯方法簡(jiǎn)單編譯方法2.3 2.3 模塊和庫文件模塊和庫文件 作用:把高級(jí)語言翻譯成機(jī)器碼,也就是常??梢钥醋饔茫喊迅呒?jí)語言翻譯成機(jī)器碼,也就是常??梢钥吹綌U(kuò)展名為到擴(kuò)展名為EXE、COM的文件。的文件。 相同的程序代碼可用不同廠商的編譯器來編譯,所生相同的程序代碼可用不同廠商的編譯器來編譯,所生成的文件也不會(huì)完全相同。編譯器的好壞主要取決于編譯成的文件也不會(huì)完全相同。編譯器的好壞主要取決于編

2、譯結(jié)果。結(jié)果。1.1 1.1 編譯器簡(jiǎn)介編譯器簡(jiǎn)介啟動(dòng):?jiǎn)?dòng): 開始菜單開始菜單程序組程序組Visual Fortran 5.0Developer Studio退出:退出: 窗口菜單上關(guān)閉窗口菜單上關(guān)閉按鈕按鈕聯(lián)機(jī)幫助:聯(lián)機(jī)幫助: F1鍵可得上下文幫助鍵可得上下文幫助 一、啟動(dòng)和退出一、啟動(dòng)和退出Fortran PowerStationFortran PowerStation1、界面組成:菜單、工具欄、界面組成:菜單、工具欄上端上端 圖圖2.1(p.11)左邊:項(xiàng)目工作區(qū)窗口左邊:項(xiàng)目工作區(qū)窗口右邊:可用于編輯文件和閱讀文檔的主工作區(qū)右邊:可用于編輯文件和閱讀文檔的主工作區(qū)下端:輸出窗口和狀態(tài)

3、欄下端:輸出窗口和狀態(tài)欄見圖見圖2-2(p12)二、二、Developer StudioDeveloper Studio用戶界面用戶界面1、運(yùn)行、運(yùn)行Fortran PowerStation 4.0(Visual Fortran 5.0)2、文件、文件新建新建Workspaces標(biāo)簽:標(biāo)簽: 輸入:輸入:Workspace name; Location默認(rèn)值:默認(rèn)值:c:program Filedevstudio 此步可省略此步可省略,直接進(jìn)入第直接進(jìn)入第3步(最好改為步(最好改為d:)3、File-New-Projects標(biāo)簽標(biāo)簽 選擇:選擇:Win32 Console Applicatio

4、n 輸入:輸入:name 其它采用默認(rèn)值其它采用默認(rèn)值三、開發(fā)自己的簡(jiǎn)單應(yīng)用程序三、開發(fā)自己的簡(jiǎn)單應(yīng)用程序 a、創(chuàng)建、創(chuàng)建project時(shí)將時(shí)將自動(dòng)創(chuàng)建同名的自動(dòng)創(chuàng)建同名的workspace b、生成、生成project name的文件夾(目錄)的文件夾(目錄) 打開后:自動(dòng)形成打開后:自動(dòng)形成Debug目錄,形成目錄,形成*.dsw文件文件4、File-New-File標(biāo)簽:標(biāo)簽: 選擇:選擇:Fortran free Format(自由格式)(自由格式).F90 或或Fortran Fixed Format(固定格式(固定格式 ).For 輸入:文件名(擴(kuò)展名不輸入)輸入:文件名(擴(kuò)展名不

5、輸入) 其它默認(rèn),其它默認(rèn), 選中選中add to project復(fù)選項(xiàng)復(fù)選項(xiàng) 會(huì)自動(dòng)形成會(huì)自動(dòng)形成*.f90或或*.for的文件。的文件。5、輸入文件內(nèi)容、存盤(文件菜等)、輸入文件內(nèi)容、存盤(文件菜等) 注意自由格式和固定格式輸入的區(qū)別。注意自由格式和固定格式輸入的區(qū)別。6、BuildCompile:編譯編譯 BuildBuild: 連接連接 BuildExetuce: 運(yùn)行運(yùn)行重復(fù)重復(fù)36進(jìn)行第二個(gè)源程序進(jìn)行第二個(gè)源程序(注意一個(gè)項(xiàng)目中只能含有注意一個(gè)項(xiàng)目中只能含有1個(gè)主程序文件,不能將兩個(gè)獨(dú)個(gè)主程序文件,不能將兩個(gè)獨(dú)立的程序文件放入同一個(gè)項(xiàng)目中,否則會(huì)導(dǎo)致編譯錯(cuò)誤。立的程序文件放入同一

6、個(gè)項(xiàng)目中,否則會(huì)導(dǎo)致編譯錯(cuò)誤。)或用或用DEL移去已建立的文件,重復(fù)移去已建立的文件,重復(fù)46 注意:注意: 1 1)所移去的文件僅從此項(xiàng)目中移去,目錄下該文件)所移去的文件僅從此項(xiàng)目中移去,目錄下該文件仍仍 然存在。然存在。 2 2)所重復(fù)的不得與以前的文件名同名。)所重復(fù)的不得與以前的文件名同名。7 7、下次重新修改程序時(shí),可直接使用菜單、下次重新修改程序時(shí),可直接使用菜單 File/Open WorkspaceFile/Open Workspace來打開來打開* *.dsw.dsw的工程文件。的工程文件。四、基本編譯和輸入四、基本編譯和輸入1、插入、改寫狀態(tài);、插入、改寫狀態(tài);2、文本塊

7、的使用、選擇(先選擇再使用);、文本塊的使用、選擇(先選擇再使用);3、語法著色:、語法著色:綠色:注釋文本;綠色:注釋文本; 藍(lán)色:關(guān)鍵字;藍(lán)色:關(guān)鍵字; 黑色:代碼。黑色:代碼。1、出錯(cuò)信息(、出錯(cuò)信息(p.351):在):在output窗口窗口內(nèi)顯示內(nèi)顯示 例:例:一般錯(cuò)誤一般錯(cuò)誤 error FOR3592:missing END IF Statement 嚴(yán)重錯(cuò)誤嚴(yán)重錯(cuò)誤 警告警告 warning FOR4227: 運(yùn)行錯(cuò)誤運(yùn)行錯(cuò)誤 Floating point division by zero 邏輯錯(cuò)誤邏輯錯(cuò)誤 結(jié)果有錯(cuò)結(jié)果有錯(cuò)五、出錯(cuò)信息及處理方法五、出錯(cuò)信息及處理方法2、處理方

8、法:、處理方法: 1* 編譯連接錯(cuò)誤編譯連接錯(cuò)誤:output窗口中窗口中雙擊錯(cuò)誤信息雙擊錯(cuò)誤信息(高亮度顯示)指針指向編輯窗口源程序中包含錯(cuò)(高亮度顯示)指針指向編輯窗口源程序中包含錯(cuò)誤的相應(yīng)的行。誤的相應(yīng)的行。 2*光標(biāo)放在光標(biāo)放在output窗口內(nèi)窗口內(nèi), F4切換到下一個(gè)錯(cuò)誤;切換到下一個(gè)錯(cuò)誤; SHIFT+F4 切換到上一個(gè)錯(cuò)誤切換到上一個(gè)錯(cuò)誤 注意:注意: 連接錯(cuò)誤不會(huì)出現(xiàn)在具體的某一行上。連接錯(cuò)誤不會(huì)出現(xiàn)在具體的某一行上。第二章第二章FORTRAN語言的發(fā)展簡(jiǎn)史語言的發(fā)展簡(jiǎn)史2.1 Fortran2.1 Fortran語言的發(fā)展簡(jiǎn)史語言的發(fā)展簡(jiǎn)史一、一、FORTRAN 含義及其適

9、用范圍含義及其適用范圍 FORmula TRANslator 公式翻譯器公式翻譯器 科學(xué)和工程計(jì)算問題的程序設(shè)計(jì)語言科學(xué)和工程計(jì)算問題的程序設(shè)計(jì)語言二、發(fā)展簡(jiǎn)史二、發(fā)展簡(jiǎn)史 代表性:代表性:19571958 FORTRAN1962 FORTRAN1978 FORTRAN771991.FORTRAN 901997. FORTRAN95 FORRAN95不象不象FORTRAN90在在FORTRAN77添加很添加很多內(nèi)容,只能視為多內(nèi)容,只能視為90的修正版,加強(qiáng)了并的修正版,加強(qiáng)了并行運(yùn)算方面的支持行運(yùn)算方面的支持2.2 FORTRA902.2 FORTRA90源程序基本結(jié)構(gòu)源程序基本結(jié)構(gòu)例:見書

10、例:見書P15頁例題頁例題2-12-22-3。1、由若干個(gè)程序單元(位)組成:、由若干個(gè)程序單元(位)組成: 主程序、外部子程序、模塊、塊數(shù)據(jù)單元主程序、外部子程序、模塊、塊數(shù)據(jù)單元2、主程序結(jié)構(gòu)主程序結(jié)構(gòu) program 程序名稱程序名稱一般省略一般省略 聲明語句部分聲明語句部分 執(zhí)行語句部分執(zhí)行語句部分 ENDprogram 程序名稱程序名稱3、END停止運(yùn)行停止運(yùn)行結(jié)束標(biāo)記結(jié)束標(biāo)記書寫格式書寫格式Fortran程序代碼的編寫格式有兩種:程序代碼的編寫格式有兩種: Free Format(自由格式)(自由格式) 擴(kuò)展名:擴(kuò)展名:.F90 建議所有程序全部改用自由格式來編程建議所有程序全部改

11、用自由格式來編程 Fixed Format(固定格式固定格式)本教材不采用)本教材不采用 擴(kuò)展名:擴(kuò)展名:.F或或.FOR書寫格式書寫格式Fixed Format(固定格式)(固定格式)第第1個(gè)字符個(gè)字符如果是字母如果是字母c、C或或*,這一行文本會(huì)當(dāng)成說明或批注,這一行文本會(huì)當(dāng)成說明或批注,不會(huì)被編譯。不會(huì)被編譯。第第15個(gè)字符個(gè)字符如果是數(shù)字,就是用來給這一行程序代碼取個(gè)代號(hào),如果是數(shù)字,就是用來給這一行程序代碼取個(gè)代號(hào),不然只能是空格。不然只能是空格。第第6個(gè)字符個(gè)字符如果是非如果是非0非空的任何字符,表示這一行程序會(huì)接續(xù)非空的任何字符,表示這一行程序會(huì)接續(xù)上一行。上一行。第第772個(gè)字

12、符個(gè)字符Fortran程序代碼的編寫區(qū)域。程序代碼的編寫區(qū)域。第第73個(gè)字符以后個(gè)字符以后不使用這些列,語句超過該列的部分會(huì)被忽略,有不使用這些列,語句超過該列的部分會(huì)被忽略,有的編譯器會(huì)發(fā)出錯(cuò)誤信息。的編譯器會(huì)發(fā)出錯(cuò)誤信息。書寫格式書寫格式1.C FIXED FORMAT DEMO PROGRAM MAIN WRITE (*,*) HELLO WRITE (*,*) 1HELLO100 WRITE (*,*)HELLO10 STOP END 程序代碼命令之間的空格,不會(huì)有任何意義。程序代碼命令之間的空格,不會(huì)有任何意義。FIXED FORMAT是為了配合早期使用穿孔卡片輸入程序所發(fā)明的格式。

13、是為了配合早期使用穿孔卡片輸入程序所發(fā)明的格式。Free Format(自由格式)(自由格式) 基本上允許非常自由的編寫格式,它沒有規(guī)定每一基本上允許非常自由的編寫格式,它沒有規(guī)定每一行的第幾個(gè)字符有什么作用,但要注意:行的第幾個(gè)字符有什么作用,但要注意:1.!感嘆號(hào)后面的文本都是注釋。感嘆號(hào)后面的文本都是注釋。2.每行可以編寫每行可以編寫132個(gè)字符。個(gè)字符。3.行號(hào)放在每行程序的最前面。行號(hào)放在每行程序的最前面。4.一行程序代碼的最后如果是符號(hào)一行程序代碼的最后如果是符號(hào)&,代表下一行程序會(huì),代表下一行程序會(huì)和這一行連接。如果一行程序代碼的開頭是符號(hào)和這一行連接。如果一行程序代碼的

14、開頭是符號(hào)&,代,代表它會(huì)和上一行程序連接。表它會(huì)和上一行程序連接。5.程序命令之間的空格,無意義。程序命令之間的空格,無意義。書寫格式書寫格式書寫格式書寫格式1. !Free Format2. program main3. write(*,*)”Hello” !這也是注釋這也是注釋4. write(*,*)&5. ”Hello”6. wri&7. &te(*,*)”Hello”8. end 如果把如果把Fortran的關(guān)鍵字分為兩行書寫,則兩行都要加續(xù)行符號(hào)。的關(guān)鍵字分為兩行書寫,則兩行都要加續(xù)行符號(hào)。如如6、7行。行。注釋語句注釋語句:!后的所有字符都被編譯

15、器忽略:!后的所有字符都被編譯器忽略(非語句行非語句行) 可獨(dú)占一行,可在其它語句之后,可獨(dú)占一行,可在其它語句之后, 空行為注釋行空行為注釋行(固定格式用固定格式用C和和*)語句行語句行: 可執(zhí)行語句:輸入、賦值、輸出可執(zhí)行語句:輸入、賦值、輸出 說明語句:用于說明變量的類型、屬性等說明語句:用于說明變量的類型、屬性等注意:注意:行的書寫行的書寫(行的長(zhǎng)度、分行、續(xù)行行的長(zhǎng)度、分行、續(xù)行) 一行可以是一行可以是0132個(gè)字符,空格有意義,個(gè)字符,空格有意義, 語句最長(zhǎng)不超過語句最長(zhǎng)不超過2640個(gè)字符個(gè)字符 一行可以有多個(gè)語句,用一行可以有多個(gè)語句,用“;”分隔分隔 一個(gè)語句可分行寫,讀行標(biāo)

16、記為一個(gè)語句可分行寫,讀行標(biāo)記為&(放在尾部),但如為(放在尾部),但如為關(guān)鍵字,關(guān)鍵字,首尾均加首尾均加&。 最多可有最多可有511個(gè)續(xù)行個(gè)續(xù)行。 例例 pro& &gram main書寫格式書寫格式空格:關(guān)鍵字、變量、常量?jī)?nèi)部不能用空格,但相鄰兩者之間空格:關(guān)鍵字、變量、常量?jī)?nèi)部不能用空格,但相鄰兩者之間須用空格須用空格語句前標(biāo)號(hào)僅用于標(biāo)識(shí)一個(gè)語句,與運(yùn)行順序無關(guān)。語句前標(biāo)號(hào)僅用于標(biāo)識(shí)一個(gè)語句,與運(yùn)行順序無關(guān)。語句有位置規(guī)定語句有位置規(guī)定 說明語句必須出現(xiàn)在可執(zhí)行語句之前,格式說明語句說明語句必須出現(xiàn)在可執(zhí)行語句之前,格式說明語句(FORMAT語句)除外。語

17、句)除外。書寫格式書寫格式2.3 2.3 語言元素語言元素 Fortran90的語言元素是指在程序設(shè)計(jì)中所用到的基本的語言元素是指在程序設(shè)計(jì)中所用到的基本成分,例如字符集、常量、變量、記號(hào)以及其它的基本結(jié)構(gòu)等。成分,例如字符集、常量、變量、記號(hào)以及其它的基本結(jié)構(gòu)等。只有了解并掌握了這些基本要素,才可能正確自如地使用該種只有了解并掌握了這些基本要素,才可能正確自如地使用該種語言。語言。 2.3.1 FORTRAN902.3.1 FORTRAN90字符集:字符集: 編寫編寫Fortran90程序時(shí),所能使用的所有字符及符號(hào)。程序時(shí),所能使用的所有字符及符號(hào)。 AZ(az)程序中不區(qū)分大小寫)程序中

18、不區(qū)分大小寫 26個(gè)個(gè) 在大多數(shù)處理系統(tǒng)中允許使用小寫字母,除了字符在大多數(shù)處理系統(tǒng)中允許使用小寫字母,除了字符串內(nèi)的字符外,小寫字母等價(jià)于相應(yīng)的大寫字母。串內(nèi)的字符外,小寫字母等價(jià)于相應(yīng)的大寫字母。 09 10個(gè)個(gè) 空格空格 = + - * / ( ) , : . $ 22個(gè)個(gè) _(下劃線下劃線)、!、!、”、%、&、;、;、?、? 注意:注意:1、在、在FOR源程序中,只能使用以上字符源程序中,只能使用以上字符 2、字符型數(shù)據(jù)內(nèi)可以出現(xiàn)任意字符、字符型數(shù)據(jù)內(nèi)可以出現(xiàn)任意字符(包括漢字包括漢字) 命名規(guī)則命名規(guī)則:131個(gè)字符,由字母、數(shù)字、下劃線組成,第一個(gè)字符,由字母、數(shù)字、下劃

19、線組成,第一個(gè)字符為字母?jìng)€(gè)字符為字母 全局名全局名:主程序單元、外部過程、數(shù)據(jù)塊、模塊:主程序單元、外部過程、數(shù)據(jù)塊、模塊2.3.1 FORTRAN902.3.1 FORTRAN90字符集字符集 在在Fortran90中,中,將字母、數(shù)字或?qū)S米址幕居行У男蛄袑⒆帜?、?shù)字或?qū)S米址幕居行У男蛄蟹Q為稱為記號(hào),它包括記號(hào),它包括標(biāo)號(hào)、關(guān)鍵字、名字、常數(shù)、運(yùn)算符和定界符標(biāo)號(hào)、關(guān)鍵字、名字、常數(shù)、運(yùn)算符和定界符。例如:。例如: A * SIN(x)+5.3 這個(gè)表達(dá)式包括這個(gè)表達(dá)式包括6個(gè)記號(hào),即個(gè)記號(hào),即A、*、SIN、x、+、5.3。注意:注意: 在字符串內(nèi)部,不能隨意地添加空格。在字符串

20、內(nèi)部,不能隨意地添加空格。 在記號(hào)內(nèi)部,也不許隨意地使用空格。在記號(hào)內(nèi)部,也不許隨意地使用空格。 記號(hào)與記號(hào)之間的空格可以隨意地使用。記號(hào)與記號(hào)之間的空格可以隨意地使用。 多個(gè)空格在語法上與一個(gè)空格的作用相同。多個(gè)空格在語法上與一個(gè)空格的作用相同。 一個(gè)記號(hào)與相鄰關(guān)鍵字、名字、常數(shù)或標(biāo)號(hào)之間,應(yīng)當(dāng)用一個(gè)或多個(gè)一個(gè)記號(hào)與相鄰關(guān)鍵字、名字、常數(shù)或標(biāo)號(hào)之間,應(yīng)當(dāng)用一個(gè)或多個(gè)空格分開,以避免錯(cuò)誤,同時(shí)也使結(jié)構(gòu)清晰??崭穹珠_,以避免錯(cuò)誤,同時(shí)也使結(jié)構(gòu)清晰。2.3.2 2.3.2 記號(hào)記號(hào) 常量的定義常量的定義:常量是程序執(zhí)行過程中不能變化的量。:常量是程序執(zhí)行過程中不能變化的量。 基本數(shù)據(jù)類型有五種:基

21、本數(shù)據(jù)類型有五種: 整型、實(shí)型、復(fù)型、字符型和邏輯型整型、實(shí)型、復(fù)型、字符型和邏輯型 前三種屬于數(shù)值類型,后兩種為非數(shù)值類型,主要用于文前三種屬于數(shù)值類型,后兩種為非數(shù)值類型,主要用于文字處理和控制。字處理和控制。.3基本類型常量基本類型常量FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型 種別參數(shù)種別參數(shù)是由內(nèi)在詢問函數(shù)是由內(nèi)在詢問函數(shù)KIND送回的。提供的最小送回的。提供的最小范圍是由內(nèi)在函數(shù)范圍是由內(nèi)在函數(shù)Selected_int_kind送回的。表示十進(jìn)送回的。表示十進(jìn)制冪的范圍是由內(nèi)在函數(shù)制冪的范圍是由內(nèi)在函數(shù)range送回的。送回的。 缺省種別是指有符號(hào)或無符號(hào)的整

22、數(shù)值??稍跀?shù)值后用缺省種別是指有符號(hào)或無符號(hào)的整數(shù)值??稍跀?shù)值后用下劃線標(biāo)明種別,沒有下劃線為缺省種別。缺省種別整數(shù)的下劃線標(biāo)明種別,沒有下劃線為缺省種別。缺省種別整數(shù)的范圍一般取決于所用計(jì)算機(jī)的字長(zhǎng)。說明了種別參數(shù)后,提范圍一般取決于所用計(jì)算機(jī)的字長(zhǎng)。說明了種別參數(shù)后,提高了程序的可移植性。高了程序的可移植性。 簡(jiǎn)而言之,種別即決定數(shù)值在計(jì)算機(jī)中存儲(chǔ)的字節(jié)數(shù)。簡(jiǎn)而言之,種別即決定數(shù)值在計(jì)算機(jī)中存儲(chǔ)的字節(jié)數(shù)。整型數(shù)據(jù):微機(jī)支持整型數(shù)據(jù):微機(jī)支持3種種kind_Value:1,2,4 (1) 范圍:范圍: -128127 (2) 范圍:范圍: -3276832767 (4) -214748364

23、82147483647(-231231-1) Integer 默認(rèn)默認(rèn)kind_Value的值為的值為41.整型常量(整型常量(INTEGER) 整型常量又叫整數(shù),整數(shù)值的集合就是數(shù)學(xué)整數(shù)的子集。123_2 & kind_Value常量也可如此指定常量也可如此指定FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型 在在FORTRAN90中,也可以表示二進(jìn)制、八進(jìn)制、中,也可以表示二進(jìn)制、八進(jìn)制、十六進(jìn)制形式的無符號(hào)整數(shù)。其形式如下:十六進(jìn)制形式的無符號(hào)整數(shù)。其形式如下:二進(jìn)制數(shù):二進(jìn)制數(shù):B101101 或或 B”101101”八進(jìn)制數(shù):八進(jìn)制數(shù):O76210 十六進(jìn)制數(shù):十六進(jìn)制數(shù):Z

24、1FA2FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型2.實(shí)型常量(實(shí)型常量(REAL) 實(shí)型常量又叫實(shí)數(shù),它具有數(shù)學(xué)實(shí)數(shù)的近似值。實(shí)型常量又叫實(shí)數(shù),它具有數(shù)學(xué)實(shí)數(shù)的近似值。 實(shí)數(shù)最常見的兩種表示形式是:小數(shù)形式和指數(shù)形式實(shí)數(shù)最常見的兩種表示形式是:小數(shù)形式和指數(shù)形式 小數(shù)形式:小數(shù)形式:由十個(gè)數(shù)字、小數(shù)點(diǎn)及數(shù)符組成的數(shù)。由十個(gè)數(shù)字、小數(shù)點(diǎn)及數(shù)符組成的數(shù)。 指數(shù)形式:指數(shù)形式:對(duì)絕對(duì)值相對(duì)較小或很大的實(shí)數(shù)對(duì)絕對(duì)值相對(duì)較小或很大的實(shí)數(shù) 。規(guī)格化指數(shù)形式:規(guī)格化指數(shù)形式: (兩種形式)(兩種形式) 1。數(shù)字部分的值小于。數(shù)字部分的值小于1,且小數(shù)點(diǎn)后的第一位數(shù)字非,且小數(shù)點(diǎn)后的第一位數(shù)字非0 2

25、。數(shù)字部分有且僅有一位非零的整數(shù)。數(shù)字部分有且僅有一位非零的整數(shù)。FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型一般分為兩種一般分為兩種 realreal(4 4)單精度(默認(rèn))單精度(默認(rèn)) realreal(8 8)雙精度)雙精度小數(shù)形式:小數(shù)形式:+/-m.n,+/-m.,+/-.n 例例 100.0 .5 5. 注:小數(shù)點(diǎn)必須有。注:小數(shù)點(diǎn)必須有。 指數(shù)形式:指數(shù)形式:數(shù)字部分?jǐn)?shù)字部分E指數(shù)部分指數(shù)部分e 科學(xué)計(jì)數(shù)法科學(xué)計(jì)數(shù)法 0.876=87610-3 876E-3 =87.6 10-2 87.6E-2 =0.0876 10+1 0.0876E+1 。 數(shù)字部分?jǐn)?shù)字部分小數(shù)形式實(shí)數(shù)

26、整數(shù)FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型 指數(shù)部分:指數(shù)部分:e只能為整數(shù)只能為整數(shù) 錯(cuò)例:錯(cuò)例:4E5.6 數(shù)字部分不能丟;數(shù)字部分不能丟; 例:例:10-4: E-4(錯(cuò))錯(cuò)) 1E-4(正確)正確) 以標(biāo)準(zhǔn)化形式輸出(以標(biāo)準(zhǔn)化形式輸出(=1) 實(shí)數(shù):實(shí)數(shù):存儲(chǔ)存儲(chǔ)7位有效數(shù)字。位有效數(shù)字。如:如:2.300000 上溢:上溢:overflow 下溢:當(dāng)下溢:當(dāng)0處理處理 4. 實(shí)數(shù)種別為實(shí)數(shù)種別為8時(shí)常量的表示(時(shí)常量的表示(雙精度數(shù)雙精度數(shù)) 有效位:有效位:15位;位; 數(shù)字部分?jǐn)?shù)字部分De 例:例:0D0FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型3.復(fù)數(shù)(復(fù)數(shù)(C

27、OMPLEX) 復(fù)型常數(shù)又叫復(fù)數(shù)。具有數(shù)學(xué)復(fù)數(shù)的近似值。在科學(xué)和工程計(jì)算中被復(fù)型常數(shù)又叫復(fù)數(shù)。具有數(shù)學(xué)復(fù)數(shù)的近似值。在科學(xué)和工程計(jì)算中被廣泛用到。復(fù)數(shù)是實(shí)數(shù)的有序?qū)?,將兩個(gè)實(shí)數(shù)中間用逗號(hào)分隔,然后再放廣泛用到。復(fù)數(shù)是實(shí)數(shù)的有序?qū)?,將兩個(gè)實(shí)數(shù)中間用逗號(hào)分隔,然后再放在一對(duì)括號(hào)中就構(gòu)成了一個(gè)復(fù)數(shù)。在一對(duì)括號(hào)中就構(gòu)成了一個(gè)復(fù)數(shù)。 復(fù)數(shù)以復(fù)數(shù)以a+bi的形式來表示數(shù)值,復(fù)數(shù)中的的形式來表示數(shù)值,復(fù)數(shù)中的a、b稱為實(shí)部和虛部??煞Q為實(shí)部和虛部??蔀閷?shí)數(shù),也可為整數(shù)。為實(shí)數(shù),也可為整數(shù)。 Complex(4)(Complex(4)(默認(rèn)默認(rèn)) ) 例例: Complex(4):b: Complex(4):

28、b Complex(8) Complex(8) 雙精度雙精度 Complex(8):c,d,eComplex(8):c,d,e 常量:常量: 符號(hào)符號(hào)(實(shí)部實(shí)部_kind_Value,_kind_Value,虛部虛部 _ _kind_Value)kind_Value) 例:例:f=f=(1 1,2.0_8)2.0_8)FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型復(fù)型常量的表示:復(fù)型常量的表示: 數(shù)學(xué)數(shù)學(xué) 2+3i2+3i 一般形式:(實(shí)部系數(shù),虛部系數(shù))一般形式:(實(shí)部系數(shù),虛部系數(shù))一對(duì)常量一對(duì)常量整整實(shí)實(shí)錯(cuò)例:(錯(cuò)例:(1.0/21.0/2,3 3)正例:)正例:6i6i,(,(0 0

29、,6 6) 當(dāng)復(fù)數(shù)的實(shí)部或虛部為變量或表達(dá)式進(jìn)行賦值時(shí),當(dāng)復(fù)數(shù)的實(shí)部或虛部為變量或表達(dá)式進(jìn)行賦值時(shí),必須使用必須使用CMPLXCMPLX()函數(shù)。()函數(shù)。 FORTRAN90 FORTRAN90 (2 2,3 3)FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型4.字符(字符(CHARACTER) 計(jì)算機(jī)除了存儲(chǔ)數(shù)字之外,也可以在內(nèi)存中記錄一段文本,字符類型可計(jì)算機(jī)除了存儲(chǔ)數(shù)字之外,也可以在內(nèi)存中記錄一段文本,字符類型可以記錄的東西非常廣,從鍵盤輸入的任何東西,不論是數(shù)字、文本或任何特以記錄的東西非常廣,從鍵盤輸入的任何東西,不論是數(shù)字、文本或任何特殊符號(hào),它都可以記錄,只記錄一個(gè)字母、符號(hào)

30、時(shí)的數(shù)據(jù)類型稱為殊符號(hào),它都可以記錄,只記錄一個(gè)字母、符號(hào)時(shí)的數(shù)據(jù)類型稱為“字符字符”,記錄一連串的字符時(shí),就稱為記錄一連串的字符時(shí),就稱為“字符串字符串”,記錄一個(gè)西文字符需要一個(gè)字節(jié),記錄一個(gè)西文字符需要一個(gè)字節(jié)的存儲(chǔ)空間。一個(gè)漢字為兩個(gè)字節(jié)的存儲(chǔ)空間。的存儲(chǔ)空間。一個(gè)漢字為兩個(gè)字節(jié)的存儲(chǔ)空間。kind kind 指明計(jì)算機(jī)系統(tǒng)支持的字符種類指明計(jì)算機(jī)系統(tǒng)支持的字符種類. . 字符常量字符常量: :例例:ASCII_:ASCII_”abcdeabcde” !kindkind值放在常量前面值放在常量前面例例:Character(LEN=10,kind=GREEK):Greek_word:Ch

31、aracter(LEN=10,kind=GREEK):Greek_word len=10 len=10可以直接寫為可以直接寫為10 10 或缺省長(zhǎng)度為或缺省長(zhǎng)度為1 1; 如只有一個(gè)沒有命名的參數(shù)如只有一個(gè)沒有命名的參數(shù), ,一定是長(zhǎng)度整數(shù)一定是長(zhǎng)度整數(shù)FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型字符常量的表示:字符常量的表示: 一串字符一串字符或或“一串字符一串字符”(雙引號(hào))(雙引號(hào))空格空格 算一個(gè)算一個(gè)“ “ 算一個(gè)算一個(gè)起止界不算起止界不算長(zhǎng)度可為長(zhǎng)度可為0 0 字符中含字符中含改寫為改寫為 ababcdcd 長(zhǎng)度:長(zhǎng)度: 字符的個(gè)數(shù)字符的個(gè)數(shù) 注:注: 區(qū)分字符大小寫區(qū)分字符大

32、小寫 a a A A 空格有效空格有效 a ba b ababFortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型5.邏輯判斷(邏輯判斷(LOGICAL) 邏輯判斷只能保存兩種邏輯結(jié)果,分別為邏輯判斷只能保存兩種邏輯結(jié)果,分別為“truetrue”和和“falsefalse”。 LOGICAL(_kind_value)LOGICAL(_kind_value) LOGICAL(1) LOGICAL(1) LOGICAL(2) LOGICAL(2) LOGICAL(4)(LOGICAL(4)(默認(rèn)默認(rèn), ,值存儲(chǔ)在第一個(gè)字節(jié)中值存儲(chǔ)在第一個(gè)字節(jié)中) ) 對(duì)數(shù)據(jù)的二進(jìn)制最低位進(jìn)行判斷,如果為對(duì)數(shù)據(jù)的二進(jìn)

33、制最低位進(jìn)行判斷,如果為1 1,則接受為真,則接受為真,否則接受為假。否則接受為假。FortranFortran的數(shù)據(jù)類型的數(shù)據(jù)類型2.3.4 名字名字對(duì)于名字有下列要求:對(duì)于名字有下列要求: 1.名字的長(zhǎng)度不能超過名字的長(zhǎng)度不能超過31個(gè)字符個(gè)字符 2.名字的組成成分可以是字母、數(shù)字和下劃線名字的組成成分可以是字母、數(shù)字和下劃線 3.名字的第一個(gè)字符必須是字母名字的第一個(gè)字符必須是字母 4.在名字中不能出現(xiàn)空格在名字中不能出現(xiàn)空格 提倡使用具有一定含義的名字,提高程序的清晰度和可提倡使用具有一定含義的名字,提高程序的清晰度和可讀性。讀性。1 1、定義:程序運(yùn)行過程中值可變化的量、定義:程序運(yùn)

34、行過程中值可變化的量2 2、命名的規(guī)則、命名的規(guī)則 字母、數(shù)字、下劃線組成字母、數(shù)字、下劃線組成字母開頭字母開頭長(zhǎng)度長(zhǎng)度1-311-31個(gè)個(gè)錯(cuò)例錯(cuò)例 3A 3A 、 x-3 x-3 、3.14 3.14 、A3 $A3 $2.3.5 變量變量3 3、變量含義:實(shí)際是內(nèi)存中的一個(gè)存儲(chǔ)單元,存放變、變量含義:實(shí)際是內(nèi)存中的一個(gè)存儲(chǔ)單元,存放變量的值。量的值。 特性:取之不盡,一沖就跑,總采用當(dāng)前值參與運(yùn)算。特性:取之不盡,一沖就跑,總采用當(dāng)前值參與運(yùn)算。 例:例:A=2.0 A BA=2.0 A B B=3.0 B=3.0 A=A+B 5.0 15.0 A=A+B 5.0 15.0 B=A B=A

35、* *B B 注:注:A A、B B必須有確定值,如未定義,值不可預(yù)測(cè)必須有確定值,如未定義,值不可預(yù)測(cè)(有時(shí)按(有時(shí)按0 0處理)處理)2.03.04 4、變量類型:基本類型有五種,同常量、變量類型:基本類型有五種,同常量 I-NI-N規(guī)則(隱式說明):在程序變量名中,凡以字母規(guī)則(隱式說明):在程序變量名中,凡以字母I I、J J、K K、L L、M M、N N六個(gè)字母開頭的變量為整型變量。六個(gè)字母開頭的變量為整型變量。 implizcit none implizcit none 可以取消可以取消I-NI-N規(guī)則。規(guī)則。五種變量的類型說明關(guān)鍵字:五種變量的類型說明關(guān)鍵字:整型:整型:INT

36、EGER INTEGER 實(shí)型:實(shí)型: REALREAL復(fù)型:復(fù)型:COMPLEXCOMPLEX 邏輯型:邏輯型:LOGICALLOGICAL字符型:字符型:CHARACTERCHARACTER 待說明的變量放在后面,中間用雙分隔符待說明的變量放在后面,中間用雙分隔符:隔開,對(duì)于同時(shí)隔開,對(duì)于同時(shí)說明多個(gè)變量,變量之間用逗號(hào)分隔。說明多個(gè)變量,變量之間用逗號(hào)分隔。 Fortran90關(guān)于變量說明的新功能:關(guān)于變量說明的新功能: 1.在變量說明的同時(shí),可以給變量賦初值。在變量說明的同時(shí),可以給變量賦初值。 INTEGER:I=5,J=126 REAL:X=7.2,Z,W=774.2 2.在說明變

37、量的同時(shí)也可說明其種別在說明變量的同時(shí)也可說明其種別 3.在說明變量的同時(shí),還可說明變量的屬性在說明變量的同時(shí),還可說明變量的屬性 INTEGER,PARAMETER:I=5,J=123 REAL,DIMENSION(1:10):A2.3.6 派生數(shù)據(jù)類型派生數(shù)據(jù)類型 根據(jù)需要而由基本數(shù)據(jù)類型定義新的數(shù)據(jù)類型。在一個(gè)派根據(jù)需要而由基本數(shù)據(jù)類型定義新的數(shù)據(jù)類型。在一個(gè)派生類型中可包含多個(gè)基本類型。生類型中可包含多個(gè)基本類型。如:如: TYPE STUDENT (定義開始定義開始) CHARACTER(LEN=20):DEPARTMENT CHARACTER(LEN=10):CLASS CHARA

38、CTER(LEN=15):NAME INTEGER:NUMBER (成員定義)(成員定義) END TYPE STUDENT (定義結(jié)束)(定義結(jié)束)派生類型變量的定義:派生類型變量的定義: TYPE(STUDENT):PERSON變量的賦值:變量的賦值: PERSON=(”COMPUTER”,”92_2”,”LI LIN”,21)成員的表示:成員的表示: PERSON%CLASS=“92_2” PERSON%NAME=“LI LIN”2.3.7 基本類型數(shù)組基本類型數(shù)組 數(shù)組是具有相同類型的元素的有序集合。數(shù)組在使用之前必須說明。數(shù)組是具有相同類型的元素的有序集合。數(shù)組在使用之前必須說明。數(shù)

39、組的說明:數(shù)組的說明: INTEGER,DIMENSION(1:50):X;數(shù)組名為;數(shù)組名為X,類型為整型,元素個(gè)數(shù)為,類型為整型,元素個(gè)數(shù)為50。 INTEGER,DIMENSION(5,3):B;數(shù)組名為;數(shù)組名為B,類型為整型,元素個(gè)數(shù)為,類型為整型,元素個(gè)數(shù)為5*3個(gè)個(gè) 維界:維界:1:50 上界:下界上界:下界 缺省下界為缺省下界為1 數(shù)組中元素的個(gè)數(shù)稱為它的大小,維數(shù)稱為秩,每維中元素的個(gè)數(shù)稱數(shù)組中元素的個(gè)數(shù)稱為它的大小,維數(shù)稱為秩,每維中元素的個(gè)數(shù)稱為維的長(zhǎng)度,長(zhǎng)度的序列稱為形。為維的長(zhǎng)度,長(zhǎng)度的序列稱為形。數(shù)組的引用:數(shù)組的引用: 通過指定下標(biāo)值的辦法來實(shí)現(xiàn)。下標(biāo)值可為整數(shù)或

40、整型通過指定下標(biāo)值的辦法來實(shí)現(xiàn)。下標(biāo)值可為整數(shù)或整型表達(dá)式。下標(biāo)值不能越界,個(gè)數(shù)必須與數(shù)組的秩相等。表達(dá)式。下標(biāo)值不能越界,個(gè)數(shù)必須與數(shù)組的秩相等。注意:注意:1.允許對(duì)數(shù)組名進(jìn)行運(yùn)算。允許對(duì)數(shù)組名進(jìn)行運(yùn)算。 2.允許對(duì)數(shù)組片段進(jìn)行操作。允許對(duì)數(shù)組片段進(jìn)行操作。 所謂數(shù)組片段是指數(shù)組中某些連續(xù)元素的重新組合。數(shù)所謂數(shù)組片段是指數(shù)組中某些連續(xù)元素的重新組合。數(shù)組片段也是一個(gè)數(shù)組。組片段也是一個(gè)數(shù)組。2.3.8 字符子串字符子串 字符型常量又叫字符串。一個(gè)字符串的一部分稱為子字符字符型常量又叫字符串。一個(gè)字符串的一部分稱為子字符串或字符子串。串或字符子串。字符數(shù)組字符數(shù)組: CHARACTER(L

41、EN=1),),DIMENSION(80):ROW引用:引用: ROW(I)字符串:字符串: CHARACTER(LEN=80):ROW引用:引用: ROW(I:I););ROW(4:7)特殊:特殊:ROW(:I) 相當(dāng)于相當(dāng)于 ROW(1:I) ROW(I:) 相當(dāng)于相當(dāng)于 ROW(I:80) ROW(:) 相當(dāng)于相當(dāng)于 ROW(1:80)特定長(zhǎng)度字符數(shù)組:特定長(zhǎng)度字符數(shù)組:CHARACTER(LEN=80),DIMENSION(25):ROWC引用:引用:ROWC(I)()(J:J)2.3.9 數(shù)據(jù)對(duì)象和子對(duì)象數(shù)據(jù)對(duì)象和子對(duì)象由一個(gè)名引用的對(duì)象:由一個(gè)名引用的對(duì)象:有名標(biāo)量有名標(biāo)量有名數(shù)組

42、有名數(shù)組由子對(duì)象標(biāo)志符引用的子對(duì)象是:由子對(duì)象標(biāo)志符引用的子對(duì)象是:數(shù)組元素?cái)?shù)組元素?cái)?shù)組片段數(shù)組片段結(jié)構(gòu)分量結(jié)構(gòu)分量子串子串2.4 程序單元概念程序單元概念 程序單元是程序單元是FORTRAN語言的基本成分。程序單元可以語言的基本成分。程序單元可以是主程序、子程序、模塊或塊數(shù)據(jù)程序單元。子程序可以是是主程序、子程序、模塊或塊數(shù)據(jù)程序單元。子程序可以是函數(shù)子程序或子例行子程序。模塊包含的說明是對(duì)其它的程函數(shù)子程序或子例行子程序。模塊包含的說明是對(duì)其它的程序單元形成可訪問性。塊數(shù)據(jù)單元用來對(duì)有名公用區(qū)中的數(shù)序單元形成可訪問性。塊數(shù)據(jù)單元用來對(duì)有名公用區(qū)中的數(shù)據(jù)對(duì)象賦初值。(據(jù)對(duì)象賦初值。(F90中

43、不提倡使用)中不提倡使用)2.4.1 主程序主程序 主程序是不包含主程序是不包含SUBROUTINE、FUNCTION、MODULE或或BLOCK DATA語句作為其第一條語句的程序單元。語句作為其第一條語句的程序單元。 主程序的可執(zhí)行部分不能包含有主程序的可執(zhí)行部分不能包含有RETURN語句或者語句或者ENTRY語句。語句。 程序名對(duì)可執(zhí)行程序是全局的,而且不得于該可執(zhí)行程序中的任何程序名對(duì)可執(zhí)行程序是全局的,而且不得于該可執(zhí)行程序中的任何其它程序單元名、外部過程名或公用塊名相同,也不得于主程序內(nèi)的任其它程序單元名、外部過程名或公用塊名相同,也不得于主程序內(nèi)的任何局部名相同。何局部名相同。

44、在主程序的作用范圍內(nèi)的說明不得包含在主程序的作用范圍內(nèi)的說明不得包含OPTIONAL語句、語句、INTENT語句、語句、PUBLIC語句或它們的等價(jià)屬性,在主程序內(nèi)語句或它們的等價(jià)屬性,在主程序內(nèi)SAVE語語句不起作用。句不起作用。 主程序內(nèi)的任何內(nèi)部過程的定義必須跟在主程序內(nèi)的任何內(nèi)部過程的定義必須跟在CONTAINS語句之后。語句之后。2.3.2 子程序子程序 子程序是可以完成某一獨(dú)立算法或功能的程序單元,子程序是可以完成某一獨(dú)立算法或功能的程序單元,但它功能的具體體現(xiàn)要通過主程序(或子程序)的調(diào)用但它功能的具體體現(xiàn)要通過主程序(或子程序)的調(diào)用來實(shí)現(xiàn)。來實(shí)現(xiàn)。 按子程序與主程序的位置關(guān)系

45、分為內(nèi)部過程和外部按子程序與主程序的位置關(guān)系分為內(nèi)部過程和外部過程。過程。 內(nèi)部過程可以出現(xiàn)在主程序、外部過程或模塊內(nèi)。內(nèi)部過程可以出現(xiàn)在主程序、外部過程或模塊內(nèi)。2.4.3 模塊模塊 模塊也是一種在程序單元之外獨(dú)立編寫的程序單元。它有模塊也是一種在程序單元之外獨(dú)立編寫的程序單元。它有獨(dú)特的形式,即模塊程序單元內(nèi)沒有可執(zhí)行語句,除了說明語獨(dú)特的形式,即模塊程序單元內(nèi)沒有可執(zhí)行語句,除了說明語句外,最多包含內(nèi)部過程。模塊的主要作用是供其它程序單元句外,最多包含內(nèi)部過程。模塊的主要作用是供其它程序單元引用。引用。 程序單元引用模塊,實(shí)際是將模塊內(nèi)的全部語句復(fù)制到本程程序單元引用模塊,實(shí)際是將模塊內(nèi)

46、的全部語句復(fù)制到本程序單元。模塊的引用采用語句:序單元。模塊的引用采用語句: USE 模塊模塊1,模塊,模塊2,2.4.4 塊數(shù)據(jù)程序單元塊數(shù)據(jù)程序單元 塊數(shù)據(jù)程序單元對(duì)有名公用塊內(nèi)的數(shù)據(jù)對(duì)象提供塊數(shù)據(jù)程序單元對(duì)有名公用塊內(nèi)的數(shù)據(jù)對(duì)象提供初值。初值。 由于塊數(shù)據(jù)程序單元賴以支持的由于塊數(shù)據(jù)程序單元賴以支持的COMMON語句語句和和DATA語句在語句在F90中已成為過時(shí)特性,因此,不提中已成為過時(shí)特性,因此,不提倡使用塊數(shù)據(jù)程序單元。倡使用塊數(shù)據(jù)程序單元。2004年4月54/149GNU CompilerGNU Compiler自由軟件,一般操作系統(tǒng)都自帶支持C/C+、Fortran77、Jav

47、a、COBAL等等許多語言支持大部分硬件平臺(tái)高性能計(jì)算中常用的:C/C+:GCC (GNU C/C+ Compiler)Fortran 77:G77不支持Fortran 90/ 95不支持OpenMP是最常用的編譯器,性能一般(相對(duì)于一些針對(duì)特定平臺(tái)優(yōu)化的編譯器)由于缺少對(duì)Fortran 90/ 95,限制了其在高性能計(jì)算中的使用2004年4月55/149PGI CompilerPGI Compiler由Portland公司開發(fā)的編譯器支持AMD Opteron/Althon處理器、Intel Xeon處理器等,在Opteron上同時(shí)支持32-bit和64-bit()支持Linux、Windo

48、ws支持C/C+(pgcc)、Fortran77(pgf77)、Fortran90/95(pgf90)、HPF(High Performance Fortran)支持多線程和OpenMP最新版本:10.1需要購買,但可以從網(wǎng)上得到15天試用版本 http:/ 2004年4月56/149Intel CompilerIntel Compiler由Intel公司針對(duì)Intel處理器開發(fā)(Xeon、Pentium)支持Linux、Windows支持C/C+(icc:Intel C/C+ Compiler)、Fortran77/90/95(ifc: Intel Fortran Compiler)支持多線

49、程和OpenMP需要購買,但可以從網(wǎng)上得到30天試用版本 http:/ 2004年4月57/149編譯優(yōu)化編譯優(yōu)化對(duì)于計(jì)算密集型程序的性能提高非常幫助優(yōu)化消耗CPU資源最多的那部分,即計(jì)算密集部分一般采用-O2、-O3可以采用SIMD指令集,eg: Intel和AMD處理器的MMX、SSE1、SSE2具體編譯優(yōu)化的選項(xiàng)和編譯器以及CPU相關(guān),參見編譯器手冊(cè)對(duì)于有些應(yīng)用程序,過分的優(yōu)化會(huì)導(dǎo)致計(jì)算結(jié)果錯(cuò)誤2004年4月58/149編譯優(yōu)化在雙路Intel Xeon平臺(tái)上,采用SSE2優(yōu)化和不采用SSE2優(yōu)化,所獲得的HPL性能。在這種情況下,采用SSE2技術(shù)得到的性能高出近90 0.00.51.0

50、1.52.02.53.02000400080001200014000問題規(guī)模問題規(guī)模峰值(GFlops)峰值(GFlops)Without SSE2With SSE22004年4月59/149編譯簡(jiǎn)介在Linux系統(tǒng)中,可執(zhí)行文件沒有統(tǒng)一的后綴,系統(tǒng)從文件的屬性來區(qū)分可執(zhí)行文件和不可執(zhí)行文件大部分編譯器通過后綴來區(qū)別輸入文件的類別,下面來介紹常用的一些后綴.c:C語言源代碼文件.f:Fortran 77語言源代碼文件.o:編譯后的目標(biāo)文件.a:由目標(biāo)文件構(gòu)成的檔案庫文件.C、.cc、.cxx:C+源代碼文件.f90:Fortran 90語言源代碼文件.h:程序所包含的頭文件2004年4月60/

51、149基本的用法cc/f77/f90 options filenames 編譯器名 編譯參數(shù) 編譯文件其中options就是編譯器所需要的參數(shù),filenames給出相關(guān)的文件名稱2004年4月61/149常用編譯參數(shù)-c:只編譯,不連接成為可執(zhí)行文件,編譯器只是由輸入的.c/.f等源代碼文件生成.o為后綴的目標(biāo)文件,通常用于編譯不包含主程序的子程序文件。-o output_filename:確定輸出文件的名稱為output_filename,同時(shí)這個(gè)名稱不能和源文件同名。如果不給出這個(gè)選項(xiàng),就給出預(yù)設(shè)的可執(zhí)行文件a.out-g:產(chǎn)生符號(hào)調(diào)試工具所必要的符號(hào)資訊,要想對(duì)源代碼進(jìn)行調(diào)試,我們就必

52、須加入這個(gè)選項(xiàng)。-O:對(duì)程序進(jìn)行優(yōu)化編譯、連接,采用這個(gè)選項(xiàng),整個(gè)源代碼會(huì)在編譯、連接過程中進(jìn)行優(yōu)化處理,這樣產(chǎn)生的可執(zhí)行文件的執(zhí)行效率可以提高,但是,編譯、連接的速度就相應(yīng)地要慢一些。-O2、-O3、-O4:比-O更好的優(yōu)化編譯、連接,當(dāng)然整個(gè)編譯、連接過程會(huì)更慢。(具體和編譯器相關(guān))2004年4月62/149常用編譯參數(shù)-Idirname:將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過程中使用的參數(shù)。C程序中的頭文件包含兩種情況:A)#include B)#include “myinc.h” 其中,A類使用尖括號(hào)(),B類使用雙引號(hào)(“ ”)。對(duì)于A類,預(yù)處理程序cp

53、p在系統(tǒng)預(yù)設(shè)包含文件目錄(如/usr/include)中搜尋相應(yīng)的文件,而對(duì)于B類,cpp在當(dāng)前目錄中搜尋頭文件,這個(gè)選項(xiàng)的作用是告訴cpp,如果在當(dāng)前目錄中沒有找到需要的文件,就到指定的dirname目錄中去尋找。在程序設(shè)計(jì)中,如果我們需要的這種包含文件分別分布在不同的目錄中,就需要逐個(gè)使用-I選項(xiàng)給出搜索路徑。2004年4月63/149常用編譯參數(shù)-Ldirname:將dirname所指出的目錄加入到程序函數(shù)檔案庫文件的目錄列表中,是在連接過程中使用的參數(shù)。在預(yù)設(shè)狀態(tài)下,連接程序ld在系統(tǒng)的預(yù)設(shè)路徑中(如/usr/lib)尋找所需要的檔案庫文件,這個(gè)選項(xiàng)告訴連接程序,首先到-L指定的目錄中

54、去尋找,然后到系統(tǒng)預(yù)設(shè)路徑中尋找,如果函數(shù)庫存放在多個(gè)目錄下,就需要依次使用這個(gè)選項(xiàng),給出相應(yīng)的存放目錄。-lname:在連接時(shí),裝載名字為“l(fā)ibname.a”的函數(shù)庫,該函數(shù)庫位于系統(tǒng)預(yù)設(shè)的目錄或者由-L選項(xiàng)確定的目錄下。例如,-lm表示連接名為“l(fā)ibm.a”的數(shù)學(xué)函數(shù)庫。 上面我們簡(jiǎn)要介紹了編譯器最常用的功能和主要參數(shù)選項(xiàng),更為詳盡的資料可以參看Linux系統(tǒng)的聯(lián)機(jī)幫助。2004年4月64/149GCC應(yīng)用舉例1.gcc hello.c生成a.out2. gcc o hello helo.c生成hello3. gcc O o hello hello.c 生成hello4. gcc O2

55、 o hello hello.c 生成hello5. gcc c hello.c生成hello.o gcc o hello hello.o生成hello6. gcc c hello1.c生成hello1.o gcc c hello2.c生成hello2.o gcc o hello hello1.o hello2.o 生成hello7. gcc o test test1.o lm I/home/czn/include2004年4月65/149講座主要內(nèi)容提示并行系統(tǒng)安裝和常用命令并行機(jī)群系統(tǒng)調(diào)試編譯環(huán)境常用編譯器編譯優(yōu)化如何編譯并行環(huán)境曙光集群管理系統(tǒng)-GridviewMPIMPI的安裝的安裝安

56、裝:安裝: #tar -xzvf mpich-1.2.6.tar.gz#tar -xzvf mpich-1.2.6.tar.gz #cd mpich-1.2.6 #cd mpich-1.2.6 #./configure -with-device=ch_p4 #./configure -with-device=ch_p4 -prefix=/usr/local/mpich-1.2.6 -prefix=/usr/local/mpich-1.2.6 #make #make #make install #make install環(huán)境變量設(shè)置環(huán)境變量設(shè)置 #vi /etc/profile #vi /etc

57、/profile 加入下面的行加入下面的行 export MPI_ROOT=/usr/local/mpich-1.2.6export MPI_ROOT=/usr/local/mpich-1.2.6 export PATH=$MPI_ROOT/bin:$PATH export PATH=$MPI_ROOT/bin:$PATH export MANPATH=$MPI_ROOT/man:$MANPATH export MANPATH=$MPI_ROOT/man:$MANPATH #source /etc/profile #source /etc/profileMPIMPI的使用的使用mpirunmp

58、irun的基本格式為的基本格式為: : mpirun mpirun-options mpirun mpirun-options options options 其中其中 mpirun-optionsmpirun-options, , 主要選項(xiàng)如下:主要選項(xiàng)如下:-np -np 要加載的進(jìn)程個(gè)數(shù)要加載的進(jìn)程個(gè)數(shù), ,系統(tǒng)讀系統(tǒng)讀machines.LINUXmachines.LINUX的內(nèi)容的內(nèi)容-p4pg -p4pg 按照按照p4filep4file文件中的要求加載用戶進(jìn)程文件中的要求加載用戶進(jìn)程 -machinefile -machinefile 按照按照machinesfilemachine

59、sfile文件中的節(jié)點(diǎn)名個(gè)數(shù)加載進(jìn)程文件中的節(jié)點(diǎn)名個(gè)數(shù)加載進(jìn)程p4filep4file文件文件該文件的格式為:該文件的格式為: 第一行:第一行: 第二行:第二行: . 第第 n n行:行: 其中其中n n為用戶要加載進(jìn)程的個(gè)數(shù)。結(jié)點(diǎn)名可以相同,也可以不同。且用戶使用此為用戶要加載進(jìn)程的個(gè)數(shù)。結(jié)點(diǎn)名可以相同,也可以不同。且用戶使用此選項(xiàng)后選項(xiàng)后, -np, -np選項(xiàng)無效。選項(xiàng)無效。machines.LINUXmachines.LINUX文件和文件和machinefilemachinefile文件內(nèi)容:文件內(nèi)容: nodeX:Y nodeX:Y . . nodeZ:W nodeZ:WX-Z:X-

60、Z:機(jī)群節(jié)點(diǎn)名(系統(tǒng)名字)比如節(jié)點(diǎn)機(jī)群節(jié)點(diǎn)名(系統(tǒng)名字)比如節(jié)點(diǎn)1-201-20Y Y、W W節(jié)點(diǎn)名對(duì)應(yīng)的節(jié)點(diǎn)名對(duì)應(yīng)的CPUCPU個(gè)數(shù)個(gè)數(shù)MPIMPI使用簡(jiǎn)例使用簡(jiǎn)例最簡(jiǎn)單的運(yùn)行一個(gè)最簡(jiǎn)單的運(yùn)行一個(gè)MPIMPI應(yīng)用程序的例子是:應(yīng)用程序的例子是:#mpirun -np 4 a.out#mpirun -np 4 a.out, #mpirun #mpirun machinefile machinefile a.outmachinefile machinefile a.out #mpirun #mpirun p4pg ./p4file a.outp4pg ./p4file a.out它將在并行機(jī)上加載個(gè)用戶執(zhí)行程序它將在并行機(jī)上加載個(gè)用戶執(zhí)行程序 一般情況下最好用一般情況下最好

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論