編譯制導法
1. 編譯原理的內容簡介
本書介紹編譯器構造的一般原理和基本實現方法,主要內容包括詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成等。除了介紹命令式編程語言的編譯技術外,本書還介紹面向對象語言和函數式編程語言的實現技術。本書還強調一些相關的理論知識,如形式語言和自動機理論、語法制導的定義和屬性文法、類型論和類型系統等。
本書取材廣泛新穎、圖文並茂,注意理論聯系實際。本書可作為高等學校計算機科學及相關專業的教材,也可供計算機軟體工程技術人員參考使用。
2. 並行程序設計的類別
目前並行編程類型逐漸匯聚於兩類:用於PVP,SMP和DSW的共享變數的單地址空間模型和用於MPP和機群的消息傳遞的多地址空間模型.
並行編程模型逐漸匯聚於三類標准模型:數據並行(如:HPF),消息傳遞(如:MPI和PVM),和共享變數(如OpenMp).
現在人們希望高性能的並行機應是 具有單一系統映像的巨大的工作站,使得很多用戶都能利用增強處理能力和儲存容量來運行多個串列作業,這就是所謂的串列程序並行系統SPPS.
當我們在實際的並行機上設計並行程序時,絕大部分均是採用擴展Fortran和C語言的辦法,目前有三種擴展的辦法:一是庫函數法:除了串列語言所包含的庫函數外,一組新的支持並行性和交互操作的庫函數(如MPI消息傳遞庫和POSIXPthreads多線程庫)引入到並行程序設計中。二是新語言結構法:採用某些新的語言結構來幫助並行程序設計以支持並行性和交互操作(如Fortran 90 中的聚集數組操作); 三是編譯制導法:程序設計語言保持不變,但是將稱之為編譯制導的格式注釋引入到並行程序中.
3. 什麼是計算機體系結構中的並行性
並行處理(Parallel Processing)是計算機系統中能同時執行兩個或更多個處理機的一種計算方法。處理機可同時工作於同一程序的不同方面。並行處理的主要目的是節省大型和復雜問題的解決時間。為使用並行處理,首先需要對程序進行並行化處理,也就是說將工作各部分分配到不同處理機中。而主要問題是並行是一個相互依靠性問題,而不能自動實現。此外,並行也不能保證加速。但是一個在 n 個處理機上執行的程序速度可能會是在單一處理機上執行的速度的 n 倍。
計算機體系結構(ComputerArchitecture)是程序員所看到的計算機的屬性,即概念性結構與功能特性。按照計算機系統的多級層次結構,不同級程序員所看到的計算機具有不同的屬性。一般來說,低級機器的屬性對於高層機器程序員基本是透明的,通常所說的計算機體系結構主要指機器語言級機器的系統結構。經典的關於"計算機體系結構(computerarchitecture)"的定義是1964年C.M.Amdahl在介紹IBM360系統時提出的,其具體描述為"計算機體系結構是程序員所看到的計算機的屬性,即概念性結構與功能特性" 。
利用計算機語言進行並行性描述的時候主要有三種方案:
1.語言擴展方案:也就是利用各種語言的庫函數來進行並行性功能的擴展。
2.編譯制導法:也稱為智能編譯,它是隱式並行策略的體現,主要是由並行編譯系統進行程序表示、控制流的分析、相關分析、優化分析和並行化劃分,由相關分析得到方法庫管理方案,由優化分析得到知識庫管理方案,由並行化劃分得到程序重構,從而形成並行程序。
3.新的語言結構法:這是顯式並行策略的體現。也就是建立一種全新的並行語言的體系,而這種並行語言通過編譯就能直接形成並行程序。
4. 一、簡述openmp編譯制導指令master,single,critical,atomic的功能
參考http://technet.microsoft.com/en-us//library/2kwb957d(v=vs.110).aspx
1.critical:每次允許一個線程執行
2.single:只由一個線程執行一次
3.automic:功能類似critical,不過所屬指令為簡單的表達式,這樣減少開銷
4.master:僅由主線程執行
5.omp_set_num_threads:設置線程數,用在程序中
6.omp_get_num_threads:獲取線程總數
7.omp_get_thread_num:獲取當前線程序號id
8.OMP_NUM_THREADS:環境變數級別的線程總數限定,優先順序最低,omp_set_num_threads是程序級別的,優先順序較高;子句num_threads(i)是block級別,優先順序最高
最近也在學
5. 編譯原理
編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 編譯原理是計算機專業設置的一門重要的專業課程。編譯原理課程是計算機相關專業學生的必修課程和高等學校培養計算機專業人才的基礎及核心課程,同時也是計算機專業課程中最難及最挑戰學習能力的課程之一。編譯原理課程內容主要是原理性質,高度抽象[1]。
中文名
編譯原理[1]
外文名
Compilers: Principles, Techniques, and Tools[1]
領域
計算機專業的一門重要專業課[1]
快速
導航
編譯器
編譯原理課程
編譯技術的發展
編譯的基本流程
編譯過程概述
基本概念
編譯原理即是對高級程序語言進行翻譯的一門科學技術, 我們都知道計算機程序由程序語言編寫而成, 在早期計算機程序語言發展較為緩慢, 因為計算機存儲的數據和執行的程序都是由0、1代碼組合而成的, 那麼在早期程序員編寫計算機程序時必須十分了解計算機的底層指令代碼通過將這些微程序指令組合排列從而完成一個特定功能的程序, 這就對程序員的要求非常高了。人們一直在研究如何如何高效的開發計算機程序, 使編程的門檻降低。[2]
編譯器
C語言編譯器是一種現代化的設備, 其需要藉助計算機編譯程序, C語言編譯器的設計是一項專業性比較強的工作, 設計人員需要考慮計算機程序繁瑣的設計流程, 還要考慮計算機用戶的需求。計算機的種類在不斷增加, 所以, 在對C語言編譯器進行設計時, 一定要增加其適用性。C語言具有較強的處理能力, 其屬於結構化語言, 而且在計算機系統維護中應用比較多, C語言具有高效率的優點, 在其不同類型的計算機中應用比較多。[3]
C語言編譯器前端設計
編譯過程一般是在計算機系統中實現的, 是將源代碼轉化為計算機通用語言的過程。編譯器中包含入口點的地址、名稱以及機器代碼。編譯器是計算機程序中應用比較多的工具, 在對編譯器進行前端設計時, 一定要充分考慮影響因素, 還要對詞法、語法、語義進行分析。[3]
1 詞法分析[3]
詞法分析是編譯器前端設計的基礎階段, 在這一階段, 編譯器會根據設定的語法規則, 對源程序進行標記, 在標記的過程中, 每一處記號都代表著一類單詞, 在做記號的過程中, 主要有標識符、關鍵字、特殊符號等類型, 編譯器中包含詞法分析器、輸入源程序、輸出識別記號符, 利用這些功能可以將字型大小轉化為熟悉的單詞。[3]
2 語法分析[3]
語法分析是指利用設定的語法規則, 對記號中的結構進行標識, 這包括句子、短語等方式, 在標識的過程中, 可以形成特殊的結構語法樹。語法分析對編譯器功能的發揮有著重要影響, 在設計的過程中, 一定要保證標識的准確性。[3]
3 語義分析[3]
語義分析也需要藉助語法規則, 在對語法單元的靜態語義進行檢查時, 要保證語法規則設定的准確性。在對詞法或者語法進行轉化時, 一定要保證語法結構設置的合法性。在對語法、詞法進行檢查時, 語法結構設定不合理, 則會出現編譯錯誤的問題。前端設計對精確性要求比較好, 設計人員能夠要做好校對工作, 這會影響到編譯的准確性, 如果前端設計存在失誤, 則會影響C語言編譯的效果。[3]
6. 編譯原理 改寫SDT 語法制導翻譯
怎麼沒人答啊...我們的作業題==
7. 編譯原理全部的名詞解釋
書上有別那麼懶!。。。。
編譯過程的六個階段:詞法分析,語法分析,語義分析,中間代碼生成,代碼優化,目標代碼生成
解釋程序:把某種語言的源程序轉換成等價的另一種語言程序——目標語言程序,然後再執行目標程序。解釋方式是接受某高級語言的一個語句輸入,進行解釋並控制計算機執行,馬上得到這句的執行結果,然後再接受下一句。
編譯程序:就是指這樣一種程序,通過它能夠將用高級語言編寫的源程序轉換成與之在邏輯上等價的低級語言形式的目標程序(機器語言程序或匯編語言程序)。
解釋程序和編譯程序的根本區別:是否生成目標代碼
句子的二義性(這里的二義性是指語法結構上的。):文法G[S]的一個句子如果能找到兩種不同的最左推導(或最右推導),或者存在兩棵不同的語法樹,則稱這個句子是二義性的。
文法的二義性:一個文法如果包含二義性的句子,則這個文法是二義文法,否則是無二義文法。
LL(1)的含義:(LL(1)文法是無二義的; LL(1)文法不含左遞歸)
第1個L:從左到右掃描輸入串 第2個L:生成的是最左推導
1 :向右看1個輸入符號便可決定選擇哪個產生式
某些非LL(1)文法到LL(1)文法的等價變換: 1. 提取公因子 2. 消除左遞歸
文法符號的屬性:單詞的含義,即與文法符號相關的一些信息。如,類型、值、存儲地址等。
一個屬性文法(attribute grammar)是一個三元組A=(G, V, F)
G:上下文無關文法。
V:屬性的有窮集。每個屬性與文法的一個終結符或非終結符相連。屬性與變數一樣,可以進行計算和傳遞。
F:關於屬性的斷言或謂詞(一組屬性的計算規則)的有窮集。斷言或語義規則與一個產生式相聯,只引用該產生式左端或右端的終結符或非終結符相聯的屬性。
綜合屬性:若產生式左部的單非終結符A的屬性值由右部各非終結符的屬性值決定,則A的屬性稱為綜合屬
繼承屬性:若產生式右部符號B的屬性值是根據左部非終結符的屬性值或者右部其它符號的屬性值決定的,則B的屬性為繼承屬性。
(1)非終結符既可有綜合屬性也可有繼承屬性,但文法開始符號沒有繼承屬性。
(2) 終結符只有綜合屬性,沒有繼承屬性,它們由詞法程序提供。
在計算時: 綜合屬性沿屬性語法樹向上傳遞;繼承屬性沿屬性語法樹向下傳遞。
語法制導翻譯:是指在語法分析過程中,完成附加在所使用的產生式上的語義規則描述的動作。
語法制導翻譯實現:對單詞符號串進行語法分析,構造語法分析樹,然後根據需要構造屬性依賴圖,遍歷語法樹並在語法樹的各結點處按語義規則進行計算。
中間代碼(中間語言)
1、是復雜性介於源程序語言和機器語言的一種表示形式。
2、一般,快速編譯程序直接生成目標代碼。
3、為了使編譯程序結構在邏輯上更為簡單明確,常採用中間代碼,這樣可以將與機器相關的某些實現細節置於代碼生成階段仔細處理,並且可以在中間代碼一級進行優化工作,使得代碼優化比較容易實現。
何謂中間代碼:源程序的一種內部表示,不依賴目標機的結構,易於代碼的機械生成。
為何要轉換成中間代碼:(1)邏輯結構清楚;利於不同目標機上實現同一種語言。
(2)便於移植,便於修改,便於進行與機器無關的優化。
中間代碼的幾種形式:逆波蘭記號 ,三元式和樹形表示 ,四元式
符號表的一般形式:一張符號表的的組成包括兩項,即名字欄和信息欄。
信息欄包含許多子欄和標志位,用來記錄相應名字和種種不同屬性,名字欄也稱主欄。主欄的內容稱為關鍵字(key word)。
符號表的功能:(1)收集符號屬性 (2) 上下文語義的合法性檢查的依據: 檢查標識符屬性在上下文中的一致性和合法性。(3)作為目標代碼生成階段地址分配的依據
符號的主要屬性及作用:
1. 符號名 2. 符號的類型 (整型、實型、字元串型等))3. 符號的存儲類別(公共、私有)
4. 符號的作用域及可視性 (全局、局部) 5. 符號變數的存儲分配信息 (靜態存儲區、動態存儲區)
存儲分配方案策略:靜態存儲分配;動態存儲分配:棧式、 堆式。
靜態存儲分配
1、基本策略
在編譯時就安排好目標程序運行時的全部數據空間,並能確定每個數據項的單元地址。
2、適用的分配對象:子程序的目標代碼段;全局數據目標(全局變數)
3、靜態存儲分配的要求:不允許遞歸調用,不含有可變數組。
FORTRAN程序是段結構,不允許遞歸,數據名大小、性質固定。 是典型的靜態分配
動態存儲分配
1、如果一個程序設計語言允許遞歸過程、可變數組或允許用戶自由申請和釋放空間,那麼,就需要採用動態存儲管理技術。
2、兩種動態存儲分配方式:棧式,堆式
棧式動態存儲分配
分配策略:將整個程序的數據空間設計為一個棧。
【例】在具有遞歸結構的語言程序中,每當調用一個過程時,它所需的數據空間就分配在棧頂,每當過程工作結束時就釋放這部分空間。
過程所需的數據空間包括兩部分
一部分是生存期在本過程這次活動中的數據對象。如局部變數、參數單元、臨時變數等;
另一部分則是用以管理過程活動的記錄信息(連接數據)。
活動記錄(AR)
一個過程的一次執行所需要的信息使用一個連續的存儲區來管理,這個區 (塊)叫做一個活動記錄。
構成
1、臨時工作單元;2、局部變數;3、機器狀態信息;4、存取鏈;
5、控制鏈;6、實參;7、返回地址
什麼是代碼優化
所謂優化,就是對代碼進行等價變換,使得變換後的代碼運行結果與變換前代碼運行結果相同,而運行速度加快或佔用存儲空間減少。
優化原則:等價原則:經過優化後不應改變程序運行的結果。
有效原則:使優化後所產生的目標代碼運行時間較短,佔用的存儲空間較小。
合算原則:以盡可能低的代價取得較好的優化效果。
常見的優化技術
(1) 刪除多餘運算(刪除公共子表達式) (2) 代碼外提 +刪除歸納變數+ (3)強度削弱; (4)變換循環控制條件 (5)合並已知量與復寫傳播 (6)刪除無用賦值
基本塊定義
程序中只有一個入口和一個出口的一段順序執行的語句序列,稱為程序的一個基本塊。
給我分數啊。。。
8. 並行處理的並行演算法的基本策略
在並行處理技術中所使用的演算法主要遵循三種策略:
1.分而治之法:也就是把多個任務分解到多個處理器或多個計算機中,然後再按照一定的拓撲結構來進行求解。
2.重新排序法:分別採用靜態或動態的指令詞度方式。
3.顯式/隱式並行性結合:顯式指的是並行語言通過編譯形成並行程序,隱式指的是串列語言通過編譯形成並行程序,顯式/隱式並行性結合的關鍵就在於並行編譯,而並行編譯涉及到語句、程序段、進程以及各級程序的並行性。
二、並行性描述定義
利用計算機語言進行並行性描述的時候主要有三種方案:
1.語言擴展方案:也就是利用各種語言的庫函數來進行並行性功能的擴展。
2.編譯制導法:也稱為智能編譯,它是隱式並行策略的體現,主要是由並行編譯系統進行程序表示、控制流的分析、相關分析、優化分析和並行化劃分,由相關分析得到方法庫管理方案,由優化分析得到知識庫管理方案,由並行化劃分得到程序重構,從而形成並行程序。
3.新的語言結構法:這是顯式並行策略的體現。也就是建立一種全新的並行語言的體系,而這種並行語言通過編譯就能直接形成並行程序。
三、並行軟體
並行軟體可分成並行系統軟體和並行應用軟體兩大類,並行系統軟體主要指並行編譯系統和並行操作系統,並行應用軟體主要指各種軟體工具和應用軟體包。在軟體中所牽涉到的程序的並行性主要是指程序的相關性和網路互連兩方面。
1.程序的相關性:程序的相關性主要分為數據相關、控制相關和資源相關三類。
數據相關說明的是語句之間的有序關系,主要有流相關、反相關、輸出相關、I/O相關和求知相關等,這種關系在程序運行前就可以通過分析程序確定下來。數據相關是一種偏序關系,程序中並不是每一對語句的成員都是相關聯的。可以通過分析程序的數據相關,把程序中一些不存在相關性的指令並行地執行,以提高程序運行的速度。
控制相關指的是語句執行次序在運行前不能確定的情況。它一般是由轉移指令引起的,只有在程序執行到一定的語句時才能判斷出語句的相關性。控制相關常使正在開發的並行性中止,為了開發更多的並行性,必須用編譯技術克服控制相關。
而資源相關則與系統進行的工作無關,而與並行事件利用整數部件、浮點部件、寄存器和存儲區等共享資源時發生的沖突有關。軟體的並行性主要是由程序的控制相關和數據相關性決定的。在並行性開發時往往把程序劃分成許多的程序段——顆粒。顆粒的規模也稱為粒度,它是衡量軟體進程所含計算量的尺度,一般用細、中、粗來描述。劃分的粒度越細,各子系統間的通信時延也越低,並行性就越高,但系統開銷也越大。因此,我們在進行程序組合優化的時候應該選擇適當的粒度,並且把通訊時延盡可能放在程序段中進行,還可以通過軟硬體適配和編譯優化的手段來提高程序的並行度。
2.網路互連:將計算機子系統互連在一起或構造多處理機或多計算機時可使用靜態或動態拓撲結構的網路。靜態網路由點一點直接相連而成,這種連接方式在程序執行過程中不會改變,常用來實現集中式系統的子系統之間或分布式系統的多個計算結點之間的固定連接。動態網路是用開關通道實現的,它可動態地改變結構,使之與用戶程序中的通信要求匹配。動態網路包括匯流排、交叉開關和多級網路,常用於共享存儲型多處理機中。在網路上的消息傳遞主要通過尋徑來實現。常見的尋徑方式有存儲轉發尋徑和蟲蝕尋徑等。在存儲轉發網路中以長度固定的包作為信息流的基本單位,每個結點有一個包緩沖區,包從源結點經過一系列中間結點到達目的結點。存儲轉發網路的時延與源和目的之間的距離(段數)成正比。而在新型的計算機系統中採用蟲蝕尋徑,把包進一步分成一些固定長度的片,與結點相連的硬體尋徑器中有片緩沖區。消息從源傳送到目的結點要經過一系列尋徑器。同一個包中所有的片以流水方式順序傳送,不同的包可交替地傳送,但不同包的片不能交叉,以免被送到錯誤的目的地。蟲蝕尋徑的時延幾乎與源和目的之間的距離無關。在尋徑中產生的死鎖問題可以由虛擬通道來解決。虛擬通道是兩個結點間的邏輯鏈,它由源結點的片緩沖區、結點間的物理通道以及接收結點的片緩沖區組成。物理通道由所有的虛擬通道分時地共享。虛擬通道雖然可以避免死鎖,但可能會使每個請求可用的有效通道頻寬降低。因此,在確定虛擬通道數目時,需要對網路吞吐量和通信時延折衷考慮。
四、硬體技術在硬體技術方面主要從處理機、存儲器和流水線三個方面來實現並行。
1.處理機:主要的處理機系列包括CISC、RISC、超標量、VL1W、超流水線、向量以及符號處理機。
傳統的處理機屬於復雜指令系統計算(CISC)結構。指令系統大,指令格式可變,通用寄存器個數較少,基本上使用合一的指令與數據高速緩存,時鍾頻率較低,CPI較高,大多數利用ROM 實現微碼控制CPU,而當今的精簡指令系統計算(RISC)處理機指令格式簡單規范,面向寄存器堆,採用重疊寄存器窗口技術,具有多級Cache,多種流水線結構,強調編譯優化技術,時鍾頻率快,CPI低,大多數用硬連線控制CPU。
CISC或RISC標量處理機都可以採用超標量或向量結構來改善性能。標量處理機在每個周期內只發射一條指令並要求周期只完成從流水線來的一條指令。而在超標量處理機中,使用了多指令流水線,每個周期要發射多條指令並產生多個結果。由於希望程序中有許多的指令級並行性,因此超標量處理機更要依靠優化編譯器去開發並行性。
VL1W 結構是將水平微碼和超標量處理這兩種普遍採用的概念結合起來產生的。典型的超長指令字VL1W 機器指令字長度有數百位。在VLlW 處理機中,多個功能部件是並發工作的,所有的功能部件共享使用公用大型寄存器堆,由功能部件同時執行的各種操作是用VL1W 指令來同步的,每條指令可指定多個操作。VL1W 指令解碼比超標量指令容易,但在開發不同數量的並行性時總是需要不同的指令系統。VL1W 主要是開發標量操作之間的並行性,它的成功與否很大程度取決於代碼壓縮的效率,其結構和任何傳統的通用處理機完全不兼容。即使同一結構的不同實現也不大可能做到彼此二進制兼容。VL1W 的主要優點在於它的硬體結構和指令系統簡單,在科學應用領域可以發揮良好作用,但在一般應用場合可能並不很好用。
向量處理機對數組執行向量指令,每條指令都包含一串重復的操作。它是專門設計用來完成向量運算的協處理機,通常用於多流水線超級計算機中。向量處理機可以利用循環級展開所得的並行性,它可以附屬於任何標量處理機。專用的向量流水線可以在循環控制中消除某些軟體開銷,它的效果與優化編譯器將順序代碼向量化的性能很有關系。從理論上說,向量機可以具有和超標量處理機同樣的性能,因此可以說向量機的並行性與超標量機相同。
符號處理機是為AI應用而研製的,已用於定理證明、模式識別、專家系統、知識工程、文本檢索、科學以及機器智能等許多應用領域。在這些應用中,數據和知識表達式、原語操作、演算法特性、存儲器、I/0和通信以及專用的結構特性與數值計算是不一樣的,符號處理機也稱為邏輯程序設計語言處理機、表處理語言處理機或符號變換器。符號處理並不和數值數據打交道,它處理的是邏輯程序、符號表、對象、劇本、黑板、產生式系統、語義網路、框架以及人工神經網路等問題。這些操作需要專門的指令系統,通常不使用浮點操作。
2.存儲器:存儲設備按容量和存取時間從低到高可分為寄存器、高速緩存、主存儲器、磁碟設備和磁帶機五個層次。較低層存儲設備與較高層的相比,存取速度較快、容量較小,每位元組成本較高、帶寬較寬、傳輸單位較小。
存放在存儲器層次結構中的信息滿足三個重要特性:包含性、一致性和局部性。所謂包含性,指的是一個信息字的復製品可以在比它高的所有層中找到,而如果在高層中丟失了一個信息,則在比它低的所有層中此信息也將丟失。CPU 和高速緩存之間的信息傳送是按字進行的,高速緩存和主存儲器間用塊作為數據傳送的基本單位,主存和磁碟之間又是以頁面為基本單位來傳送信息的,而在磁碟和磁帶機之間的數據傳送則是按文件級處理的。所謂一致性要求的是同一個信息項與後繼存儲器層次上的副本是一致的。也就是說,如果在高速緩存中的一個字被修改過,那麼在所有更高層上該字的副本也必須立即或最後加以修改。為了盡量減少存儲器層次結構的有效存取時間,通常把頻繁使用的信息放在較低層次。維護存儲器層次結構一致性一般有兩種策略,一種是寫直達策略,也就是如果,則立即在所有高層存儲器中進行同樣的修改;另一種是寫回策略,也就是在較低層中對信息進行修改後並不立即在高層存儲器中進行相應的修改,而是等到該信息將被替換或將從低層中消失時才在所有高層存儲器中進行同樣的修改。甚至可以將寫直達和寫回策略的優點結合起來,形成寫一次協議來維護存儲器的一致性。
存儲器的層次結構是在一種程序行為——訪問的局部性基礎上開發出來的。主要有時間局部性、空間局部性和順序局部性。時間局部性指的是最近的訪問項很可能在不久的將來再次被訪問。它往往會引起對最近使用區域的集中訪問。空間局部性表示一種趨勢,指的是一個進程訪問的各項其地址彼此很近。順序局部性指的是在典型程序中,除非是轉移指令,一般指令都是順序執行的。
在多處理機系統中一般使用共享存儲器。對共享存儲器的組織一般採用低位交叉、高位交叉、高低位交叉三種方法。低位交叉又稱並發存取,它是把相鄰的地址放在相鄰的存儲器模塊中,在訪問時不容易產生沖突,並行性較好,但可靠性容錯能力和擴展性均較差。高位交叉又稱允許同時存取,它是把相鄰地址分配到同一個存儲器模塊中,可靠性、容錯能力和擴展性均較強,但訪問時易產生沖突,帶寬較窄,並行性較差。高低位交叉存取又稱C—s存取,它是結合了高位交叉和低位交叉兩種方法的優點,既解決了沖突問題,又能有效地提高容錯能力和並行性,最適合於向量處理機結構。
3.流水線:流水線技術主要有指令流水線技術和運算流水線技術兩種。
指令流水線技術主要目的是要提高計算機的運行效率和吞吐率。它主要通過設置預取指令緩沖區、設置多功能部件、進行內部數據定向、採取適當的指令調度策略來實現。指令調度的策略主要有靜態和動態兩種,靜態詞度是基於軟體的,主要由編譯器完成,動態詞度是基於硬體的,主要是通過硬體技術進行。
運算流水線主要有單功能流水線和多功能流水線兩種。其中多功能流水線又可分為靜態流水線和動態流水線。靜態流水線技術只用來實現確定的功能,而動態流水線可以在不同時間重新組合,實現不同的功能,它除流線連接外,還允許前饋和反饋連接,因此也稱為非線性流水線。這些前饋和反饋連接使得進入流水線的相繼事件的詞度變得很不簡單。由於這些連接,流水線不一定從最後一段輸出。根據不同的數據流動模式,人們可以用同一條流水線求得不同功能的值。
並行計算機發展簡述
40 年代開始的現代計算機發展歷程可以分為兩個明顯的發展時代:串列計算時代、並行計算時代。每一個計算時代都從體系結構發展開始,接著是系統軟體(特別是編譯器與操作系統)、應用軟體,最後隨著問題求解環境的發展而達到頂峰。創建和使用並行計算機的主要原因是因為並行計算機是解決單處理器速度瓶頸的最好方法之一。
並行計算機是由一組處理單元組成的,這組處理單元通過相互之間的通信與協作,以更快的速度共同完成一項大規模的計算任務。因此,並行計算機的兩個最主要的組成部分是計算節點和節點間的通信與協作機制。並行計算機體系結構的發展也主要體現在計算節點性能的提高以及節點間通信技術的改進兩方面。
60 年代初期,由於晶體管以及磁芯存儲器的出現,處理單元變得越來越小,存儲器也更加小巧和廉價。這些技術發展的結果導致了並行計算機的出現,這一時期的並行計算機多是規模不大的共享存儲多處理器系統,即所謂大型主機(Mainframe)。IBM360 是這一時期的典型代表。
到了60 年代末期,同一個處理器開始設置多個功能相同的功能單元,流水線技術也出現了。與單純提高時鍾頻率相比,這些並行特性在處理器內部的應用大大提高了並行計算機系統的性能。伊利諾依大學和Burroughs 公司此時開始實施IlliacIV 計劃,研製一台64 個CPU 的SIMD 主機系統,它涉及到硬體技術、體系結構、I/O 設備、操作系統、程序設計語言直至應用程序在內的眾多研究課題。不過,當一台規模大大縮小了的16CPU 系統終於在1975 年面世時,整個計算機界已經發生了巨大變化。
首先是存儲系統概念的革新,提出虛擬存儲和緩存的思想。IBM360/85 系統與360/91是屬於同一系列的兩個機型,360/91 的主頻高於360/85,所選用的內存速度也較快,並且採用了動態調度的指令流水線;但是,360/85 的整體性能卻高於360/91,唯一的原因就是前者採用了緩存技術,而後者則沒有。
其次是半導體存儲器開始代替磁芯存儲器。最初,半導體存儲器只是在某些機器被用作緩存,而CDC7600 則率先全面採用這種體積更小、速度更快、可以直接定址的半導體存儲器,磁芯存儲器從此退出了歷史舞台。與此同時,集成電路也出現了,並迅速應用到了計算機中。元器件技術的這兩大革命性突破,使得IlliacIV 的設計者們在底層硬體以及並行體系結構方面提出的種種改進都大為遜色。
1976 年CRAY-1 問世以後,向量計算機從此牢牢地控制著整個高性能計算機市場15 年。CRAY-1 對所使用的邏輯電路進行了精心的設計,採用了我們如今稱為RISC 的精簡指令集,還引入了向量寄存器,以完成向量運算。這一系列全新技術手段的使用,使CRAY-1 的主頻達到了80MHz。
微處理器隨著機器的字長從4 位、8 位、16 位一直增加到32 位,其性能也隨之顯著提高。正是因為看到了微處理器的這種潛力,卡內基- 梅隆大學開始在當時流行的DECPDP11 小型計算機的基礎上研製成功一台由16 個PDP11/40 處理機通過交叉開關與16 個共享存儲器模塊相連接而成的共享存儲多處理器系統C.mmp。
從80 年代開始,微處理器技術一直在高速前進。稍後又出現了非常適合於SMP 方式的匯流排協議,而伯克利加州大學則對匯流排協議進行了擴展,提出了Cache 一致性問題的處理方案。從此,C.mmp 開創出的共享存儲多處理器之路越走越寬;現在,這種體系結構已經基本上統治了伺服器和桌面工作站市場。
同一時期,基於消息傳遞機制的並行計算機也開始不斷涌現。80 年代中期,加州理工成功地將64 個i8086/i8087 處理器通過超立方體互連結構連結起來。此後,便先後出現了Intel iPSC 系列、INMOS Transputer 系列,Intel Paragon 以及IBM SP 的前身Vulcan 等基於消息傳遞機制的並行計算機。
80 年代末到90 年代初,共享存儲器方式的大規模並行計算機又獲得了新的發展。IBM將大量早期RISC 微處理器通過蝶形互連網路連結起來。人們開始考慮如何才能在實現共享存儲器緩存一致的同時,使系統具有一定的可擴展性(Scalability)。90 年代初期,斯坦福大學提出了DASH 計劃,它通過維護一個保存有每一緩存塊位置信息的目錄結構來實現分布式共享存儲器的緩存一致性。後來,IEEE 在此基礎上提出了緩存一致性協議的標准。
90 年代以來,主要的幾種體系結構開始走向融合。屬於數據並行類型的CM-5 除大量採用商品化的微處理器以外,也允許用戶層的程序傳遞一些簡單的消息;CRAY T3D是一台NUMA 結構的共享存儲型並行計算機,但是它也提供了全局同步機制、消息隊列機制,並採取了一些減少消息傳遞延遲的技術。
隨著商品化微處理器、網路設備的發展,以及MPI/PVM 等並行編程標準的發布,機群架構的並行計算機出現。IBM SP2 系列機群系統就是其中的典型代表。在這些系統中,各個節點採用的都是標準的商品化計算機,它們之間通過高速網路連接起來。
今天,越來越多的並行計算機系統採用商品化的微處理器加上商品化的互連網路構造,這種分布存儲的並行計算機系統稱為機群。國內幾乎所有的高性能計算機廠商都生產這種具有極高性能價格比的高性能計算機,並行計算機就進入了一個新的時代,並行計算的應用達到了前所未有的廣度和深度。
並行計算機隨著微處理晶元的發展,已經進入了一個新時代。目前並行計算機的性能已經突破20PFLOPS,正在向百億億次發展。我國並行計算機的研製已經走在世界前列。2003年由聯想公司生產的深騰6800 在2003 年11 月世界TOP500 排名中位列第14 名,2004 年曙光公司生產的曙光4000A 在2004 年6 月的世界TOP500 排名中位列第10 名,這是我國公開發布的高性能計算機在世界TOP500 中首次進入前十名,這標志著我國在並行計算機系統的研製和生產中已經趕上了國際先進水平,為提高我國的科學研究水平奠定了物質基礎。2013年國際超級計算機大會最新發布的世界超級計算機500強排名中,國防科技大學研製的天河二號超級計算機系統,以峰值計算速度每秒5.49億億次、持續計算速度每秒3.39億億次雙精度浮點運算的優異性能位居榜首。
從TOP500 的前10 名來看,美國仍然是超級計算機的最大擁有者。按照世界TOP500 的統計數據來分析,美國在計算能力上佔有近全世界的一半,在TOP500 中的所有計算機中擁有的數量超過50%。
9. 編譯原理這門課程第四章語法制導的翻譯的知識點有哪些
編譯原理這門課第四章語法制導的翻譯的知識點包含章節導引,第一節語法制導的翻譯,第二節S屬性定義的自下而上計算,第三節L屬性定義的自上而下計算,第四節L屬性的自下而上計算,課後練習,。
10. 編譯原理課程講什麼內容
《編譯原理》課程介紹編譯器構造的一般原理和基本實現方法,主要介紹編譯器的各個階段:詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成。本課程在介紹命令式程序設計語言實現技術的同時,強調一些相關的理論知識,如形式語言和自動機理論、語法制導的定義和屬性文法、類型論等。它們是計算機專業理論知識的重要一部分,在本書中結合應用來介紹這些知識,有助於學生較快領會和掌握。本課程強調形式化描述技術,並以語法制導定義作為翻譯的主要描述工具。本課程強調對編譯原理和技術在宏觀上的理解,作為原理性的教學,本課程主要介紹基本的理論和方法,不偏向於某種源語言或目標機器。