Archived: Multicore Programming with LabVIEW

NI does not actively maintain this document.

This content provides support for older products and technology, so you may notice outdated links or obsolete information about operating systems or other relevant products.

綜覽

This document is part of the
Multicore Programming Fundamentals Whitepaper Series

Multicore Programming Fundamentals Whitepaper Series

Multicore Programming Fundamentals Whitepaper Series

Read this whitepaper to learn about the challenges facing today's multicore programmers. Specifically, this document discusses a breadth of multicore programming patterns that may be applied to a software architecture.

Contents

以 LabVIEW 克服多核心程式設計的難題

本文將討論多核心程式設計工程師所面臨的若干挑戰,並且將介紹 NI LabVIEW 8.5 圖形化程式設計環境的特點。該產品是 NI 針對工程師、科學家,與圖形化系統設計 (GSD) 工程師,能夠更輕鬆進行多核心程式設計而提供。概略來說,本文將討論平行應用的架構、處理執行緒同步化,與多核心程式的除錯作業。

 多核心技術的未來

在過去幾年中,處理器製造商均單純的提高時脈率來提高 CPU 的效能。然而在近年來,處理器技術的最新趨勢,則趨向更多的處理核心。意即處理器製造商正把數個 CPU 封裝於單一晶片上。除了目前已經相對成熟的雙核心與 4 核心處理器之外,英特爾 (Intel) 公司甚至宣稱將在 5 年內推出 80 核心的處理器!

圖 1. Intel 公司的 CEO -- Paul Otellini 展示了 Intel 公司的 80 核心處理器原型 (slashgear.com 提供)

似乎處理器可不斷提升此種運算性能,以運作漸趨複雜的應用——而且似乎不再遙不可及。同時,利用此大幅提升的效能,使用者能否想像現有程式將達到多快的速度?您也許會懷疑這種事情並不會這麼簡單吧?沒錯!現實上的確無法盡如人意。

與單核心處理器相較,要在多核心處理器上開發程式要困難得多。雖然多個應用均可輕鬆運行在不同的處理器上,但是工程師必須謹慎撰寫程式碼,以有效利用多核心技術。也就是說,即便在目前的多核心處理器上執行現有應用,性能亦幾乎不會有所提升,僅限於小幅的性能提升。

 設計平行程式碼碼

撰寫平行應用的首要挑戰,即是必須確定程式中有哪些部分能夠確實平行執行,然後才能於程式碼中建置這些區段。這些可平行執行的程式碼,即稱為執行緒。所以,整個平行應用亦稱為多執行緒應用。

對於文字式架構的傳統工程師來說,往往必須要於應用中使用如 OpenMP 或 POSIX 等的 API,以明確定義這些執行緒。由於文字架構程式設計的本質屬於序列,因此極難以透過程式碼的多執行緒區塊呈現平行機制。而換句話說,若能利用 NI LabVIEW 的圖形化特性,工程師可輕鬆撰寫並呈現平行應用。此外,LabVIEW 可針對程式碼中的平行區段自動產生執行緒;因此即便工程師與科學家並不具有程式設計背景,亦不需擔心應用的初階建構作業,而可專注解決實際問題。

圖 2. LabVIEW 與文字架構程式語言的多執行緒比較

 執行緒同步化作業

多核心程式設計的第二個挑戰,即為執行緒同步化作業。當某個應用正執行成百上千個執行緒時,則必須確保所有執行緒均能運作無虞。只要有 2 個或以上的執行緒要同時間存取 1 個記憶體位置,就會發生資料毀損。很顯而易見的,要能在應用中找出可能產生衝突的程式碼,將是 1 項困難的作業。

但若透過 LabVIEW 以圖形化的方式建立程式圖,則不需考慮執行緒的同步化問題,即可迅速實際建構自己的想法。圖 2 的應用在寫入檔案時,共有 2 個圖形化程式碼的平行區段將同時存取硬碟,而 LabVIEW 可自動處理這 2 個執行緒的同步化作業。

圖 3. LabVIEW 的自動化執行緒同步功能簡圖

 除錯

在首次運行程式時,大多數的程式往往無法完全按照工程師的期望而運行;且不只限於單核心應用,多核心應用亦為如此。為了能以邏輯方式找出現有程式碼區段的功能錯誤,使用者必須依賴開發環境的除錯工具,以確保應用可正確執行。

多核心應用的除錯作業更為特殊:不僅需要同時追蹤程式碼 2 個片段的執行情況,亦必須決定執行該程式碼區段的核心。除此以外,若工程師常撰寫多執行緒應用,則必須處理執行緒互換 (Swapping) 與執行緒匱乏 (Starvation) 等問題,且需要在除錯階段即將之解決。

LabVIEW 中的數個功能,則可大幅簡化多核心應用的除錯作業。特別值得一提的是,如執行作業強化 (Highlight) 功能,可輕鬆並迅速呈現程式的平行執行狀態 (LabVIEW 即以資料流為其架構)。以圖 3 為例,當啟動強化功能時,即可呈現程式碼執行的平行區段。

圖 4. 在 LabVIEW 開發環境中強調圖形化的執行作業

 

此外,LabVIEW Real-Time Module 可於多核心系統中進行精確的執行作業,並進一步提供除錯資訊。對 LabVIEW 的初階工程師來說,Real-Time 執行追蹤 (Execution Trace) 工具組可呈現正執行特定執行緒的處理器,並迅速找出執行緒匱乏與互換的問題。

圖 5. LabVIEW 8.5 執行跟蹤 (Execution Trace) 工具組

 摘要

總而言之,熟悉多核心處理器的工程師,更必須考量多執行緒的特有難題,包含平行的應用架構、執行緒同步化,與除錯作業等;當然,相關難題亦不限於上述所提。隨著處理器的核心數不斷增加,能在多執行緒應用中佈署正確的平行程式設計技術亦更顯重要。