概觀
LabVIEW 具有獨特並簡單易用的圖形化程式設計環境,適用於自動化的應用。然而,其功能亦可動態地設計程式碼至多種 CPU 核心,以提升多核心處理器的執行速度。了解如何最佳化 LabVIEW 應用,並利用平行的程式設計技術。
多執行緒程式設計的挑戰
直到最近,創新的處理器技術,已造成電腦的中央處理單位 (CPU) 用較高的時脈進行作業。然而,時脈已經到達理論的實體限制,則新處理器則必須朝多處理核心發展。透過新的多核心處理器,當利用平行程式設計技術時,自動化測試應用則可達到最佳效能與最高輸出率。Edward Lee 博士為加州大學柏克萊校區的電子與計算工程教授,即如此表示平行處理的優點:
「許多技術人員即預測,日漸增加的平行計算架構,將導致摩爾定律的結束。如果想繼續提升計算的效能,程式就必須能夠利用平行機制」。
然而,普遍均認為利用多處理器的程式設計應用,將為程式設計的一大挑戰。Microsoft 的創辦人比爾蓋茲即解釋了此項挑戰:
「為了完整利用平行架構的處理器,….軟體必須能夠處理並行(concurrency) 的問題。但任何一個撰寫多執行緒程式碼的程式開發者都會跟你說,此問題即為程式設計中最困難的工作。」
幸好,由於LabVIEW 提供建立平行運算式的直覺式開發環境,並可動態地指派多重執行緒至應用,因此可針對多核心處理器提供理想的程式設計環境。其實,使用多核心處理器的自動化應用,可輕鬆進行最佳化,以達到最好的效能。更進一步來說,由於PCI express 匯流排的高資料傳輸率,PXI express 模組化儀器可增強此優勢。可利用多核心處理器與PXI express 儀器的2 個特殊應用為:多通道訊號分析與硬體迴路(HIL)。在下列的白皮書中,我們將評估多種平行程式設計技術,並指出每種技術產品的效能優勢。
建置平行測試運算式
利用平行處理的常見自動化測試應用 (ATE),即為多通道訊號分析。因為頻率分析為耗用大量處理器效能的作業, 則平行化的測試程式碼可提升執行速度,每通道的訊號處理可分散至多重處理器核心。從程式設計師的觀點來看,為了能夠取得此優點,則僅需重新架構測試運算式。
為了說明此觀點,我們將於高速示波器的 2 個通道上,比較多通道頻率分析 (傅利葉轉換或 FFT) 的 2 個運算式執行時間。在測試中,將使用 14 位元解析度高速示波器 PXIe-5122 的 2 個通道,以最高取樣率 100 MS/s 進行訊號擷取。首先,我們顯示此作業在 LabVIEW 中的傳統序列程式設計模型。
圖1. LabVIEW 程式碼利用序列執行
在上方的程式圖中,均於 FFT Express VI 中執行 2 個通道的頻率分析,並於序列中分析每通道。當上方所顯示的運算式仍可有效執行於多核心處理器中,即可能平行處理每通道,以提升運算式效能。
如果我們以數據表示 (profile) 上方的運算式,則應特別注意:與高速示波器完成擷取的時間相較,FFT 作業的時間要長得多。透過一次擷取 1 個通道,並平行執行 2 個 FFT,則可大量減少處理時間。使用平行方式的新 LabVIEW 程式圖,即如下所示:
圖2. LabVIEW 程式碼利用平行執行
如同上方程式碼所呈現,示波器將循序擷取每通道。請注意,若 2 個擷取來自於不同的儀器,則可平行完成這些作業。然而,由於傅立葉轉換將耗用大量的處理器效能,因此僅需平行處理訊號,即可提升效能。也因此可縮短總執行時間。2 組建置的執行時間如下所示。
圖3. 序列執行時間與平行運算式時間
如上方圖表所顯示,當程式圖尺寸 (每擷取的取樣) 增加,則平行執行所儲存的處理時間亦將大幅增加。事實上,平行運算式將為大型程式區達到 2 倍的效能。下方圖表則顯示,依擷取尺寸 (以樣本為單位) 函式的效能提升實際百分比。
圖4. 平行運算式的效能提升(百分比)
圖 4 則顯示,大於 1 百萬個樣本 (100 Hz 解析度頻寬) 的程式區尺寸,平行方法將提升 80% 或更好的效能。
由於LabVIEW 可動態分配每執行緒,因此可提升自動化測試應用的效能。事實上,使用者不需建立特殊程式碼才能啟用多執行緒。反之,僅需小幅程式設計調整,平行測試應用即可利用多核心處理器。
設定客制平行測試運算式
平行訊號處理運算式的優點,在於可讓 LabVIEW 區分多重核心之間的 CPU 用途。下方圖表將顯示 CPU 處理運算式各部份的順序。
圖5. CPU 的處理執行
如圖表所示,LabVIEW 可平行處理許多擷取資料,並節省執行時間。針對 LabVIEW 而言,平行處理的 1 個要求即必須複製每訊號處理的子常式 (sub-routine)。依預設值來看,許多 LabVIEW 的訊號處理運算式均設定為具有「重入碼執行 (Reentrant execution)」。此意指 LabVIEW 將動態分配每子程式的專屬範例 – 包含個別執行緒與記憶體空間。因此,必須設定客制子常式於重入方式 (reentrant fashion) 中進行作業;此可透過 LabVIEW 中的簡易設定步驟完成。若要設定此屬性,請選擇 File >> VI Properties,並選擇「Execution」類別,接著如下所示的「Reentrant execution」。
圖6. 設定LabVIEW 中的「Reentrant Execution」
透過上方的簡易步驟,即可平行執行多重客制子常式;如標準LabVIEW 分析函式一般。因此,自動化測試應用可透過簡易的程式設計技術,提升多核心處理器的效能。
最佳化硬體迴路(HIL) 應用
可利用平行訊號處理技術優點的第二種應用,即為同步輸入與輸出的多重儀器。一般來說,這些均指硬體迴路 (HIL) 或行間 (In-line) 處理應用。在此方案中,不論是高速示波器或高速數位 I/O 模組,均用於擷取訊號用。在軟體中則執行訊號處理運算式。最後,將由另外的模組化儀器產生結果。下圖則顯示了標準程式圖。
圖7. 行間(In-Line) 訊號處理程式圖
常見 HIL 應用包含:行間數位訊號處理 (濾波、內插法等)、感測器模擬,與客制元件模擬。在此白皮書中,我們將針對行間數位訊號處理應用,了解達到最高傳輸率的技術。
一般將使用 2 種基礎程式設計架構:單迴圈架構與包含佇列的管線流通 (pipeline) 的多迴圈架構。單迴圈架構建置輕鬆,其小型程式區並具有低潛時 (Latency) 的特性。相對來說,由於多迴圈架構較能夠利用多核心 CPU,因此具有較高的輸出率。
使用傳統的單迴圈方式,則將以序列順序安排高速示波器讀取函式、訊號處理運算式,與高速數位 I/O 寫入。如下方程式圖所顯示,LabVIEW 將透過資料流程式設計模型,依序執行這些子常式。
圖8. 於迴圈中處理的單迴圈方式
單迴圈架構具有多種限制。因為將於序列中執行每個階段,處理器於處理資料時,將受限無法執行儀器 I/O。透過此方式,由於處理器 1 次僅可處理 1 個函式,因此無法有效地利用多核心 CPU。多核心 CPU 將僅使用 1 個核心於應用。單迴圈架構適用於較低的擷取速率,而多迴圈適用於較高的資料輸出率。
多迴圈架構使用佇列架構以互相傳輸資料。下方圖表顯示以佇列架構進行迴圈時,資料流程式設計之間的概念。
圖9. 佇列架構可讓多重迴圈共用資料
如圖表所顯示,佇列可使多重迴圈之間共用資料。上方的圖表代表一般所指的生產者/消費者 (producer-consumer) 迴圈架構。在此範例中,高速示波器將於單迴圈中擷取資料,並於每個迭代中傳送新資料集至 FIFO。消費者迴圈僅監控佇列的狀態,並於佇列可用時,將每資料集寫入至磁碟。使用佇列的優點,即為 2 個迴圈可同時獨立執行於另 1 個迴圈之外。在上面的範例中,即便寫入至磁碟發生延遲,高速示波器亦可持續擷取資料;同時另外的範例將僅儲存於 FIFO 中。一般來說,生產者/消費者管線流通 (pipeline) 方式,將更妥善利用處理器,以增加資料傳輸率。由於 LabVIEW 可動態指派 CPU 執行緒至每個核心,此優點將於多核心處理器中更為明顯。
針對行間 (In-line) 訊號處理應用,我們可於迴圈與 2 個佇列架構之間傳送資料時,使用 3 個獨立的迴圈。在此方案中,1 個迴圈將從儀器擷取資料,1 個迴圈將執行專屬的訊號處理,而最後 1 個迴圈將寫入資料至第 2 個儀器。下方的 LabVIEW 程式圖即顯示此方法:
圖10. 包含多重迴圈與佇列架構的管線流通(Pipeline) 訊號處理
在上方的圖表中,頂端迴圈為生產者迴圈;從高速示波器擷取資料,並傳輸至第 1 個佇列架構 (FIFO)。中間迴圈則同時為生產者與消費者。在每次迭代中,中間的迴圈將自佇列架構卸載 (消費) 數個資料集,並獨立地以管線流通 (pipeline) 方式進行處理。此管線流通方式個別處理最多 4 個資料集,以提升多核心處理器的處理效能。請注意:中間迴圈將傳送處理過的資料至第 2 個佇列架構,亦可作為生產者。最後,底端迴圈將寫入處理過的資料至高速數位 I/O 模組。
平行處理運算式將提升多核心 CPU 的處理器使用度。事實上,總輸出率將根據 2 個因素:處理器使用度與匯流排傳輸速度,一般來說,當處理大型資料區時,CPU 與資料匯流排將達最高效率。同樣地,即便使用較快傳輸次數的 PXI Express 儀器時,我們亦可減少資料傳輸的次數。因此,我們根據樣本中的擷取尺寸,依取樣率的條件呈現最高的傳輸率。如下所示:
圖11. 多重迴圈的傳輸率vs 單迴圈架構
此圖表顯示的所有基準點,均以 16 位元的樣本所執行。此外,所使用的訊號處理運算式,為包含 0.45 倍取樣率截點 (cutoff) 的第 7 順位 Butterworth 低通濾波器。如資料所顯示,第 4 階段管線流通 (多重迴圈) 的方法,可達最高資料傳輸率。請注意,相較於單迴圈方式 (序列),第 2 階段的訊號處理方法將產生較佳效能,但 CPU 使用效率並不如第 4 階段的方法。上方所列舉的取樣率,為 PXIe-5122 高速示波器與 PXIe-6537 高速數位 I/O 模組的輸入和輸出最高取樣率。亦請注意,於 20 MS/s 取樣率中,80 MB/s 的總匯流排頻寬,分為 40 MB/s 輸出與 40 MB/s 輸入資料傳輸率的應用匯流排。
另外極為重要的一點,必須考慮到管線流通 (pipeline) 的處理方式,將產生輸入與輸出之間的潛時 (Latency)。有數個因素將影響潛時,包含區塊大小與取樣率。下方表格則根據單迴圈與 4 階段多重迴圈架構的區塊尺寸與最大取樣率,比較量測的潛時。
表格1 與表格2. 單迴圈與4 階段管線流通基準點的潛時
如預設的結果,潛時可增加CPU 使用度達100%;特別針對20 MS/s 取樣率的4 階段管線流通更為顯著。相對來看,任何的單迴圈範例極少超過50% 使用度。
結論
如 PXI 與 PXI express 模組化儀器的 PC 架構儀控,可透過多核心處理器技術獲得許多優勢,並提升資料匯流排的速度。當新增多重處理核心以提升 CPU 效能時,平行或管線流通 (pipeline) 處理架構則為最大化 CPU 效能所必備。幸運的是,LabVIEW 可動態地指派處理工作至個別的處理核心,以針對此程式設計挑戰提供最佳的解決方案。如上方資料所顯示,建構可利用平行處理的 LabVIEW 運算式,即可大幅提升效能。
若想了解更多相關資訊,請至:NI LabVIEW。
合法
此教學由美商國家儀器 (以下簡稱 NI) 開發。此教學受 NI 技術支援,但未經完整測試及檢驗。NI 不保證品質,亦不為其更新版本、相關產品及驅動程式等後續支援負責。此教學不具任何形式保證,且不受任何特定用途規範。(http://ni.com/legal/termsofuse/unitedstates/us/)
