• 沒有找到結果。

多執行緒相關研究

在文檔中 多執行緒Java處理器設計 (頁 18-22)

第二章 相關研究

2.2. 多執行緒相關研究

圖 6. Cross Reference Table 類別存放資訊

2.2. 多執行緒相關研究

多執行緒的設計研究,可簡單區分為由軟體或硬體來支援。由軟體所支援的例如 Java 虛擬機器,對於執行緒的管理與運作大多透過 Java 程式的執行直接操作以及透過 原生方法來支援,而對於執行緒的相關執行方法都定義於 java.lang.Thread 此類別。但在 JAIP 的設計架構之下,若要仿造 Java 虛擬機器單純由系統軟體來支援管理執行緒,則 每一次要對執行緒做操作時,都需透過中斷來交由 RISC 處理器的中斷處理機制來執 行,而每一次的中斷發生都需耗費大量的執行時間,以至於使用系統軟體的成本過高。

因此若使用單一 JAIP 來支援多執行緒架構以系統軟體來支援的作法並不推薦。

而由處理器來直接支援多執行緒 [33],以單一處理器來執行管理多執行緒的架構而 言,當系統中只有一條 data path,透過切換執行緒來達到似乎多個執行緒同時在執行的 現象,並依照時間區段(Time-slice)的選擇可區分為粗粒度交替多執行緒(Block

multi-threading)與細粒度交替式多執行緒(Interleaved multi-threading) (如圖 7.b、7.c 所 示)。若單處理器上可以處理多條 data path,即可每一個週期從不同的執行緒上取得指令 執行[34],可真正達到執行緒真實並行(如圖 7.d 所示)。使用多處理器所組成的系統,可 利用每個處理器去平行執行不同執行緒來提高執行效率(如圖 7.e 所示)。而當由處理器

10

直接管理多執行緒時,每個執行緒必須保持自己的執行資訊,例如 program counter、運 算堆疊等。因此,必須提供一個機制來保存與恢復執行緒狀態。在嵌入式系統上,Java

(b) Block multi-threading; (c) Interleaved multi-threading;

(d) Simultaneous multi-threading with Single-processor; (e) Multi-processors

在 C.-M. Chung 所提出的 Dual-threaded Java Processor [4]的研究中使用存在兩條 data path 的 4-stage pipeline 處理器。呈現了最多可同時執行兩組執行緒的 Simultaneous Multithreading 處理器架構。因此當同時執行兩組執行緒時,處理器必須維持各執行緒 的執行資訊。而在執行緒的運算堆疊的運作上,提出了兩種不同的做法,Logical dual stack cache 與 Physical dual stack cache。Logical dual stack cache(如圖 8.a 所示)是由一組 128 個暫存器所組成的集合,並在系統中保持四個暫存器,分別記錄最高、最低位址跟 兩個執行所使用的堆疊指標。而當執行緒在使用堆疊做運算時,其一執行緒從 0 的位 址開始存起而另一執行緒則是從此集合的中間開始存起。然而此種作法可能會造成兩 個執行緒在堆疊的運作上衝突卻可提高 stack cache 的使用率。Physical dual stack cache(如圖 8.b 所示)則是由兩組獨立 64 個暫存器所組成的集合。執行緒則各擁有自己 的運算堆疊。此種做法可避免兩執行緒的堆疊互相衝突卻可能降低 stack cache 的使用 率。而在這種設計架構之下,系統最多只擁有兩組運算堆疊,造成應用程式所能運行 與管理的執行緒被限制為兩組。

11

Data Registers

Top Register

Top Register

High Watermark

Register

Low Watermark

Register

I/O Buffer

I/O Buffer

Stack Cache

Stack Cache Thread 0

Thread 1 EN

EN

(a) (b)

圖 8.Dual stack cache;(a) Logical dual stack cache;(b) Physical dual stack cache 若要提高系統中可執行的執行緒數量,就必須要增加管理執行緒的成本,用以記錄 各執行緒的執行資訊。Java 處理器 Komodo[7]的設計架構下,可支援系統中存在最多四 組執行緒,在設計中使用四組暫存器集合作為運算堆疊來執行四組執行緒的運作(如圖 9 所示)。然而在單一處理器設計中往往為了要擴展可執行的執行緒數量,而在設計裡加 入多組暫存器集合與堆疊,使得每個執行緒都保有自己的執行資訊,令執行緒可以輕易 的交互執行,但卻大幅增加在執行緒的管理成本。

圖 9. The Komodo processor core.

12

而也有 Java 處理器的對於多執行緒的機制設計是採用多核心的架構來支援。如 Schoberl [35]提出的 Java Optimized Processor(JOP)即採用多核心執行環境的架構[6][7]。

使用多組 Java Optimized Processor 加上對於共用記憶體的仲裁器與管理執行緒的機制 (如圖 10 所示)。而每一個核心上都有一組 stack cache 與所要執行方法的 method cache。

並統一管理所有執行緒並指派給處理核心去執行。然而藉由使用多個核心,使得每個核 心能夠真正在同一週期平行執行不同的執行緒,藉此提高整體執行效率。然而在這樣的 設計架構之下,Java 處理器執行所需的全部資料皆放置於共用的記憶體上,因此在存取 共用記憶體將會成為多處理器的執行瓶頸。

JOP 0

Stack Cache Method Cache

JOP 1

0

Stack Cache Method Cache

JOP N

Stack Cache Method Cache

……

Shared Memory Memory

Arbiter

Scheduling &

Synchronization I/O

圖 10. The JOP chip multi-processor system

在設計 JAIP 的多執行緒機制時,首先規劃單一個核心內支援多執行緒的運作,然 而在之前 JAIP 的設計下核心內同一時間只能處裡一組 data path,而若要支援多組執行 緒能同時執行,則在核心內所要耗費的成本過高,因為每一個執行緒都必須要有自己的 控制訊號以及運算堆疊。因此我們在單一核心內採用在一時間內只有一組執行緒能執 行,並藉由執行緒的切換來達到支援多執行緒的功能,詳細的設計細節於第三章將做解 說。但在單一核心內支援多執行緒並不能使多執行緒能增加效能的特點展現出來,因此 在第四章裡我們呈現出由多個 JAIP 處理核心所組成多核心的系統架構,藉以讓執行緒 能真正平行執行,使其能提高在執行時的效率。

13

在文檔中 多執行緒Java處理器設計 (頁 18-22)