• 沒有找到結果。

3.2 Process Management

3.2.1 Process 分派的流程

一個 Process 可以被分派出去必須要滿足三個條件:(1)在 DSP 裡必須要有閒置的 Thread Slot 可以使用(Available Thread Slot);(2)必須要有一個記憶體位置的 Page 來存 放運算完的結果(Available Output Page);(3)選擇一個有較高優先權的 Process 來分派

(Process Selection),圖 3-6 表示 Process 的分派過程:

 Available Thread Slot:HPI 內有一專門的硬體在負責選擇一個閒置的 Thread Slot,

選完後當 Process 要被分派時,就去更改其對應 Dispatch Table 上的 Thread Enable 狀態。

 Available Output Page:協調記憶體管理單元是否有可用的記憶體 Page,可以給要分 派的 Process 使用。

 Process Selection:

 當每一 Process 的 Input FIFO Channel 有準備好的資料,其擁有最高優權的

Process 將優先分派,且分派出去後,它就必須執行到最後(Run to Complete Model)而不能被中斷。

 對於 I/O Process,因其屬於一種不可分割的 Atomic Operation,為了避免多個 I/O Process 同時去讀取 Share Memory 而造成的誤判,在這裡我們限制 I/O Process ,只能各同時存在一個在 DSP 的 Thread Slot 裡執行,來避免額外使 用複雜的測試與設定指令(Test & Set)。

 Process 的分派:當上述的條件都滿足後,將每個步驟所決定的參數分別寫入對應 的 Dispatch Table 中,然後更改 Dispatch Table 的 Thread Enable 變成忙碌的狀態,

其 DSP 所對應的 Thread Slot 將開始運算,Process 的分派就算完成了。

圖 3-6 Process 分派的流程

3.2.2 執行緒的 Initialization 與 Termination

 執行緒的 Initialization

當 Dispatch Table 的 Thread Enable 由閒置狀態轉變成忙碌狀態時,其對應的 DSP 執 行緒則開始動作。執行緒的 Initialization 機制如以下說明。將指令記憶體分為兩個部分:

1. Initialization 程式的部份:這段程式必須配置在指令記憶體的初始位置。而此 段程式的目的在於將 Dispatch Table 內所記錄的參數,分別的寫入其執行緒內 的暫存器。如圖 3-7 所示,Initialization 程式的第一道指令為 NOP,當執行緒 處於閒置狀態時,其 PC 將一直指向這道指令,而沒有動作。當此執行緒變為 忙碌狀態時,PC 開始動作而執行第二道指令,將執行緒的編號寫入 r1;第三 道指令再以 r1 當作基準位置到對應的 Dispatch Table 上,將 Program Address 寫 到 r2;第四道指令會將 Dispatch Table 上 Input Page 寫到 r3 上等。最後再經由 JR 指令跳到運算的程式部份而開始做運算。

2. 運算程式的部份:運算程式包含 I/O Process 以及原本要運算的 Process,其可 以存放於指令記憶體的任何位置(除了 Initialization 部分外)。

 執行緒的 Termination

當一個 Process 被 DSP 的 Thread Slot 執行完時,我們藉由一特定的指令 SlotFree 來 終止其 Thread Slot 的動作,使其 PC 值回到初始位置(也就是指向 NOP 指令),並利用 此指令來更改 HPI 的 Dispatch Table 狀態。如圖 3-7 所示,將此指令加在每一個 Process 的最後一行指令。

NOP LTN r1 LW r2 PA(r1) LW r3 IN(r1) LW r4 OUT(r1) JR r2

Initialization

LW r5, 0(r3) SUB r5, r5, 7 SW r5, 0(r4) JR r2 . . SlotFree(r1)

PC #1

Computing Kernels

圖 3-7 指令記憶體的結構

3.3 記憶體管理單元

簡單的記憶體管理方法是運用 Page 管理,將記憶體分成固定大小的 Page。我們以 此方法來管理 DSP 的資料記憶體。將 DSP 的資料記憶體分成 1Kbytes 大小的 Page,如 圖 3-8 所示,其中 1K bytes 大小作為處理器之間溝通之用(FIFO Queue)。

圖 3-8 資料記憶體分成固定大小的 Page

記憶體的管理功能是動態的去 Allocate 或 De-allocate 這些 Page,給一個新的 Process

或是一個終止的 Process ,如圖 3-9 所示,為記憶體管理的一個例子。在圖 3-9(a)表示,

記憶體管理單元分配一個 Page #2 位置給主處理器傳 Input Data,另外記憶體管理單元也 分配一個 Page #3 位置給 DSP 當作運算結果存放的地方。當此時 DSP 的 Process 運算完 後,其 Input Page 將可以 De-allocate 給其他 Process 使用,所以 Page #0 就被記憶體管 理單元來 De-allocate。在圖 3-9(b)表示,當另一個 Process 被分派到 DSP 運算,其 DSP 開始從 Page #1 拿資料來算,並將運算完的結果存入 Page #0,而這 Page #0,即為剛才 才被 De-allocate 的 Page。另外,剛才才運算完的資料存在 Page #3,現在正由主處理器 搬出。

圖 3-9 動態記憶體管理

3.4 處理器之間的溝通

處理器之間的溝通可分為三個部份來說明:

1. Synchronization:

我們所使用的 Synchronization 機制是 Mailbox,當 DSP 下達特定的命令時,則 中斷指示將產生給主處理器。

2. Communication:

Communication 是經由事先定義好的 Share Memory 來為之。而 Share Memory 也建構成 FIFO Queue 的形式,使 DSP 的運算與主處理器的資料搬移動作可以同時 進行,緩衝了兩處理器之間工作頻率的不同。如圖 3-10 所示,使用了兩個 FIFO Queue,一個為 Data Input 使用(Input FIFO Queue),另一個為 Output Data 使用

(Output FIFO Queue)。

圖 3-10 I/O FIFO Queue

圖 3-11 為 FIFO Queue 資料結構(Data Structure),此 FIFO Queue 使用了 2 對 指標:DSP_H/DSP_T 與 HOST_H/HOST_T。在初始狀態時,這四個指標都指向 0 的位置,藉由 I/O Process 對指標的操作來完成處理器之間的溝通。以下說明此 FIFO Queue 指標的操作方式:

 DSP_H/DSP_T:此對指標由 I/O Process 的程式來操作。當 Input Process 在執 行時,將記錄在 Dispatch Table 上的 Input Page 寫入 DSP_H 所指到的 Input FIFO Queue 裡,之後將 DSP_H 加 1,即分配一個可用的 Page 給主處理器來做 Input Data 資料傳輸之用;當 Input Process 讀到 HOST_H 與 DSP_T 所指的位置之間 有差值(HOST_H-DSP_T)時,表示主處理器已經有傳完的資料,此時 Input Process 會讀取 DSP_T 所指到的 Page #Number,並將此 Page #Number 寫入 CST 的 Input FIFO Channel,之後將其 DSP_T 指標加上 1,完成 En-queue 的動作。

 HOST_H/HOST_T:此對指標由主處理器的程式來控制操作。主處理器會先讀

取 DSP_H 與 HOST_T 所指的位置,若之間有差值(DSP_H-HOST_T),則表 示 Input Process 已經分配一個可用的 Page 給主處理器,之後主處理再去讀取 HOST_T 所指到的 Page #Number,並將 HOST_T 加上 1;當主處理器有時間可 以傳資料到 DSP 上時,就將資料傳到剛剛在 HOST_T 位置所讀到的 Page 位置(Page #Number),寫入其後 Process 的 Input FIFO Channel,之後這筆資 料會經由 Process Management 分派到 DSP 做運算。其程式的流程如圖 3-12。

當 Input Process 被分派到 DSP 執行時,其程式會先確定可用的 Page 是否小於 8(假設 I/O FIFO Queue 的長度(Length)為 8)。若小於 8,則可以再 Allocate 一 個 Page 到 Input FIFO Queue 上;若大於等於 8,則表示可用的 Page 已經超過 了 FIFO Queue 的長度。之後,藉由讀取指標的位置的值來判斷是否主處理器 已經有傳完的資料;若有,則執行 En-Queue(將 Page #Number 寫入運算 Process 的 Input FIFO Channel)的工作,然後藉由 SlotFree 指令來結束 Input Process 。

圖 3-12 Input Process 的程式流程

 Output Process 的程式流程:Output Process 的主要目的,為告知主處理器已有 運算完的資料,請主處理器來搬走;另外,當主處理器搬完後,通知記憶體管 理單元來 De-allocate 其 Page。Output Process 相對於其他 Process 擁有最高的 優先權,所以主處理器若發現有可以搬出的資料,也需要配合著優先執行。其 程式的流程如圖 3-13 所示。當 Output Process 被分派到 DSP 後,它先察看是 否已經有搬出的資料,若有則通知記憶體管理來 De-allocate 此 Page;之後,

再查看已分配給主處理器的 Page 數量是否小於 8,若小於 8 則分配一個 Page 到 Output FIFO Queue,並使 Mailbox 發出 Interrupt 到主處理器,之後結束 Output Process ;若分配給主處理器的 Page 數量等於 8 時,則表示,已經有 8 筆資料 已運算完成,而主處理器一直沒能搬走,此時 Output Process 進入無窮迴圈,

直到主處理器把資料搬走,才會結束。

圖 3-13Output Process 的程式流程

3.5 本章總結

 Data Flow Process Network

多媒體應用可以以 Data Flow Process Network 來描述。其 Process 表示運算的核心,

而相依 Process 之間的溝通則由 FIFO Channel 來傳遞。它對應到我們的 DSP 上時,

DSP 負責 Process 的運算,而 FIFO Channel 則利用 DSP 的資料記憶體來實行。每 一個 Process 會指定一個優先順序,Process Management 利用此優先順序進行 Process Scheduling 和 Dispatch 的動作。HPI 運用此概念來完成 Process Management 的工作。

 HPI Tables

HPI 內部三個 Tables:Process List Table、Queue Table 和 Dispatch Table。Process List Table 用來描述 Data Flow Process Network 的行為;Queue Table 為表示各個 Process 的 Input FIFO Channel;Dispatch Table 則記錄了 Process 的基本資訊如 Process 程式 的位址、Input Page 和 Output Page 的位置。

 Process 分派的流程

Process 分派必須滿足三個條件:(1) 在 DSP 裡必須要有閒置的 Thread Slot 可以使 用(Available Thread Slot);(2)必須要有一個 Page 來存放運算完的結果(Available Output Page);(3)要選擇一個適合的 Process 來分派(Process Selection)。

 記憶體管理單元

將 DSP 的資料記憶體分成固定大小的 Page。記憶體管理單元可動態的 Allocation 或 De-allocation 這些 Page 給一個新的 Process 或一個終止的 Process 。

 執行緒的 Initialization 與 Termination

指令記憶體分成兩個部分:(1) Initialization 程式部分(2)運算程式部分。Initialization 程式部份的目的在於將 HPI 內的 Dispatch Table 所記錄的資訊寫入到其執行緒的暫 存器內,再經由 JR 指令將跳到運算程式的部份。執行緒的 Initialization 是藉由 Dispatch Table 的 Thread Enable 由閒置轉變為忙碌狀態時,其對應執行緒的 PC 開 始動作而完成初始動作。執行緒的 Termination 則藉由加在運算程式的最後一行特 定的指令 SlotFree 來達成,當執行到這行指令時,其執行緒的 PC 值回覆到初始位 置,並且 HPI 的 Dispatch Table 之 Thread Enable 會轉變為閒置狀態。

 處理器之間的溝通

Synchronization 的機制是 Mailbox;溝通經由事先定義好的 Share Memory 來為之,

且 Share Memory 建構成 FIFO Queue 的形式,使運算與資料傳輸可以重疊在一起執 行;I/O Process 為 DSP 上的一段程式,主要在協助主處理器與 DSP 處理器之間的 溝通。

4 實現與模擬結果 實現與模擬結果 實現與模擬結果 實現與模擬結果

我們實現了一顆 8 個執行緒的 IMT DSP 處理器,並結合我們所提出的 HPI 實作在 ARM Versatile 上面,以 JPEG 編碼為其應用程式,模擬 3 種情況:(1)Process Management 的工作由 ARM 來處理;(2)Process Management 的工作由 DSP 來處理;(3)Process Management 的工作由 HPI 來處理。分別計算各情況下 DSP 的利用率來評估 HPI 的利弊。

4.1 DSP 處理器架構

圖 4-1 表示所提出的 HPI 和 IMT DSP 核心。在 HPI 方面:HPI 對主處理器的接腳 與一般的記憶體相同,猶如主處理器的附屬記憶體,藉由特定的位址和資料,可對 HPI 下 Command。其內部包含了 6 個功能模組(Function Units):解碼器、記憶體管理單元、

FSM 以及三個 HPI Tables。在運算引擎方面包含:8 個執行緒的 IMT DSP 核心、指令記 憶體和資料記憶體。指令記憶體為 32-bits 的 Width 共有 32K Bytes 提供運算程式的存取。

資料記憶體提供 8-bits、16-bits 以及 32-bits 的存取,共有 32K Bytes。

Computing Engine Proposed HPI

Decoder Process List

Dispatch Table

 組態設定模式(Configuration Mode)

為 HPI 的初始模式,在此模式下主處理器可以將運算的程式寫入指令記憶體中,並

為 HPI 的初始模式,在此模式下主處理器可以將運算的程式寫入指令記憶體中,並

相關文件