KPN模型有助於實現資料流程平行化,進而提升系統的整體效能。AI引擎陣列程式設計需要深入瞭解待實現的演算法、AI引擎的功能以及各個功能單元之間的整體資料流程。
本文將分成三篇,探討如何基於Kahn處理網路(KPN),定義AI引擎繪圖程式設計模型。KPN模型有助於實現資料流程平行化,進而提升系統的整體效能。AI引擎陣列程式設計需要深入瞭解待實現的演算法、AI引擎的功能以及各個功能單元之間的整體資料流程。AI引擎核心是在AI引擎上執行的功能,並構成資料流程圖規範的基本建構模組。資料流程圖是具有確定行為的KPN。
KPN被廣泛用作分散式程式設計模型,能夠在各種可能的情況下平行執行任務。本白皮書介紹AI引擎如何使用KPN模型進行繪圖程式設計。基於不同目標架構的運算模型種類繁多,如中央處理器(CPU)、繪圖處理單元(GPU)、FPGA、AI引擎程式設計等。圖1顯示按照序列模型、並行模型和功能模型分類的運算模型。
在序列模型中,任務是一個接一個地或按循序執行。在並行模型中,任務會盡可能平行處理。在功能模型中,任務執行依賴於執行方案,例如針對特定的架構(如GPU或FPGA中的可程式化設計邏輯)。本文重點探討AI引擎程式設計的運算模型。該模型可用於指導程式設計師編寫針對AI引擎架構的程式,其目標是透過瞭解其程式設計模型來充分發揮AI引擎的運算能力。
隨著運算任務的複雜性日益增加,標準處理器的效能已不足以有效執行這些任務。為了應對這種情況,CPU、GPU以及專用處理器等各種運算架構經過演進發展,已能夠解決效能不足的挑戰。
Kahn處理網路
KPN是由Gilles Kahn在1974年提出的一種分散式運算模型,作為針對平行程式設計開發的通用方案,為資料流程模型奠定重要基礎。在KPN中,元件表示函數(或核心),連接表示資料流程(圖2)。
核心(函數3)從其它兩個核心(函數1和函數2)讀取資料。如果其中的任何一個核心都沒有可用的資料,那麼讀取會停止該程式,進而阻塞核心(函數3)。只有當足夠多的資料(已標註)可用時,該程式才能繼續。將資料(函數1和函數2)寫入程式(函數3)是非阻塞的,這代表可持續寫入程式,並且不會出現停滯。
由於這些特點,資料流程網路在本質上是具有確定性的。這是透過先進先出(FIFO)通道進行的確定性程式通訊。經過驗證,該模型可用於嵌入式系統、訊號處理系統、高效能運算、資料流程程式設計語言和其它運算任務的建模。訊號處理系統使用KPN建模,透過以順序或平行執行形式(基於給定任務)來處理無限資料流程。
資料流程圖
資料流程圖闡述處理順序(或優先順序)、平行性和資料相關性。圖3顯示資料流程圖的表示形式,包括與經過處理再輸出的資料,之間的相關性。三筆輸入資料分別是w、x和y。在圖3中,輸入w和y將會進入不同的節點。
在資料流中,邊緣端呈現了資料從演算單元或連接埠進出的路徑。連接埠表示資料標記進入或離開演算單元或整體架構的位置。資料流圖呈現出處理序列、平行處理,以及資料相關性。在圖4中,分岔器可將輸入的資料標記複製到多個輸出端。邊緣端節點的輸出以先進先出(FIFO)緩衝區的方式運作。
節點(或稱為演算單元)僅在每個輸入端,都有單一標註時才啟動。只要有一筆輸入的資料缺少標記,則該節點將被阻塞。在節點啟動後,會從每筆資料輸入的邊緣端移除一個標記。
在圖5中,w、x、y的數值分別為3、5、2。x值被傳遞至分叉點。此時分叉點已經準備就緒,而add1、add2和mult節點則在等待所有輸入數值輸入。
如圖6所示,x=5已被複製到節點add1和add2上。w=3和y=2分別從輸入節點出為8(即3+5)。節點add2的輸出為7(即2+5)。這些輸出邊緣被作為FIFO執行。
在圖7中,來自add1和add2的輸出標記到達節點mult,然後該節點乘法後的輸出為56(即8×7),輸出會進入連接埠z。
資料流程程式設計
本章節將介紹資料流程圖,與資料流程程式設計之間的關係。通常情況下,程式模型的過程為一系列順序操作。
資料流程程式設計強調資料的移動,包括一系列連接以及用於連接各節點的具有明確定義的邊緣。只要所有輸入標記都是有效的,該節點就會觸發。在圖8中,比較上述流程與演算法的呈現。
雖然圖8左邊的資料流程圖和右邊的演算法形式都呈現出相同的函數,但是資料流程圖明確地說明了資料的平行性。而右邊的演算法形式隱藏平行性,並呈現出順序性。例如,如果輸入w、x和y都是可用的,則可以平行運算u和v。從資料流程圖中可以清楚地標示這個特性,但在演算法形式中,看起來就沒那麼明顯。
在Kahn處理網路中,假設函數1比函數2更快。即使函數1比函數2快,函數3仍需要等待來自另外兩個函數的輸入。這代表為這些函數建立資料流程模型,並不能提升整體效能。重要的是加速整個系統,而不只是個別函數,來提升系統整體的效能。資料流語言本質上是平行處理的,在大型分散系統中運作良好。下篇將介紹資料流程程式設計如何適用於AI引擎。
(本文由AMD提供)
AI引擎程式設計(1) KPN強化平行運算效能