Agilent VEE 9.0 中的多線程方案
作者:Vincent Foo,安捷倫公司基礎測量儀器部
目前的技術環境對測試和測量的要求越來越嚴格,軟件的性能也因此變得至關重要。針對這一要求,一種經證明有效的方法是采用基于并行處理或并行計算的多線程工作方式。
自從1958年在計算機中首次提出并行計算*的概念,隨著近50年來計算機多處理器技術的發展,并行計算越來越受到重視。在一個過程中使用并行機制被稱為多線程,其原理是把要解決的問題劃分成若干線程任務,這些任務以并行方式,而不是以線性方式執行。在單一處理器上運行一個進程的速度受光速的制約。因此為進一步提高進程的速度,就必須將其分解成多個線程,并在多個處理器上以并行方式執行。
* IBM公司的John Cocke 和 Daniel Slotnick較先提出計算機中的并行機制(Cocke, J.; Slotnick, D.S., (1958) ‘Use of parallelism in numerical calculations’, Research memorandum; No. RC-55, Retrieved October 10, 2008 from http://www.computerhistory.org/collections/accession/102635119)
2008年較新推出的Agilent VEE 9.0可視化、數據流編程軟件允許用戶選擇使用多線程的解決方案。與直觀的圖形拖放編程相配合,多線程更易于使用并更節省時間。
理解多線程
在開始使用 Agilent VEE 9.0多線程前,事先必須詳細了解多線程的工作坊式。只有當處理器為多核,并且其它任務有空閑時間時,采用多線程才是有益的。首先,用戶需要把該解決方案分成若干分立和有明確意義的子任務。例如,如果解決方案是編程導彈發射,子任務將是:“打開發射井”,“插入發射鑰匙”,“激活電池”,“制導”,“點火引擎”和“升空”。圖 1 是 Agilent VEE 中的序列線性程序。
圖 1: Agilent VEE 中的序列程序
接下來,用戶需要把子任務編組,從而構成一些代碼組,并確定這些獨立的代碼沒有任何相關性。例如導彈發射中有兩件相關的任務:“升空”必須在“引擎啟動”后開始,而“引擎啟動”必須等所有其它任務完成。而“打開發射井”,“插入發射鑰匙”,“激活電池”,“制導”是獨立于任何其它子任務輸入或輸出的任務,因此可以安全地執行多線程。
圖 2: 在導彈發射程序中使用 Agilent VEE 的多線程任務
并非所有應用程序都可以采用多線程。例如,機器人過馬路的程序,子任務將是:“向左看”,“向右看”,“站住”,“分析車流”,“過馬路”。在這種情況下,每項子任務都有相關性:
圖 3: 在使用 Agilent VEE 的機器人控制程序中子任務的相關性
死循環
試圖把多線程用于具有相關性的子任務,如果沒有控制程序,就會導致死循環,它也被稱為競爭條件。一個簡單的死循環例子是進程A 等待進程B,而進程 B 也在等待進程 A,從而構成一個無限循環。現代實時軟件和操作系統使用同步方法,如文件鎖定、信標、互斥和消息傳遞,使相關過程的多線程能夠克服死循環。一個簡單的模擬同步例子是用時間表控制共同使用的鐵路軌道。沒有時間表,火車就可能在鐵軌上相撞。
多線程的好處
多線程如何提高真實世界測量應用的性能?一個明顯的好處是能讓多臺儀器同時工作。例如下面圖 4 中的解決方案有5臺儀器,在儀器開始測量前,每臺儀器需要 10 秒鐘的初始化和校準時間。
圖 4: 多線程改進多儀器工作的性能
按線性序列運行將需要50秒時間。但使用多線程以并行方式運行時,所有 5 臺儀器就只需要 10 秒鐘的初始化時間。
在以前的 Agilent VEE版本中,用戶可以使用UserObjects 輕松地創建功能型子步驟。現在,Agilent VEE 9.0配有ThreadObject(UserObject 擴展)線程,用戶可在這里放置非相關的線程安全代碼。圖 5 中的簡單例子是同時執行的 2個ThreadObjects和 2 個UserObjects的對比。如定時器所顯示, ThreadObjects執行時間要比UserObjects快一倍。
圖 5: 在 Agilent VEE 中,ThreadObjects 的執行要比 UserObjects 快一倍
流水線
流水線是能夠獲益于多線程的另一種典型過程。下面是量產裝配廠的常用做法,這里將輸入流的子過程排隊。一個子過程的輸出持續送入下一個子過程,同時收到來自隊列的另一輸入。例如下列香蕉汁生產過程的例子,從香蕉到果汁罐頭需要30秒時間 —— 見圖6 。
圖 6: 香蕉汁生產流程
5 個香蕉變成 5 個香蕉汁罐頭要多少時間呢?
為完成這一過程,序列化的線性生產線總共需要 150 秒:
5 x 30 秒 = 150 秒
圖 7: 實現 5 罐香蕉汁的流水線生產
而在如圖 7 的理想條件下,執行流水線的解決方案能提升80% 的效率 —— 只需要80秒,而使用序列線性方法則需要 150 秒。但并非所有解決方案都能從流水線得到如此多的好處。例如,如果上述例子中香蕉剝皮機子過程需要100秒,那么整條流水線都會用大量時間等待香蕉剝皮機完成任務。效率改進只能從600秒提升到530秒(理論上為13% 的改進)。為優化流水線效率,用戶應確保所有子過程的執行時間應大致相同。
Agilent VEE 9.0軟件中的并行機制對于多線程是非常有益的,并能實現較佳的性能。這一改進將直接轉化為提升生產力和縮短產品上市時間。
相關閱讀:
- ...· Efinix® 全力驅動AI邊緣計算,成功推出Trion™ T20 FPGA樣品, 同時將產品擴展到二十萬邏輯單元的T200 FPGA
- ...· 英飛凌亮相進博會,引領智慧新生活
- ...· 三電產品開發及測試研討會北汽新能源專場成功舉行
- ...· Manz亞智科技跨入半導體領域 為面板級扇出型封裝提供化學濕制程、涂布及激光應用等生產設備解決方案
- ...· 中電瑞華BITRODE動力電池測試系統順利交付北汽新能源
- ...· 中電瑞華FTF系列電池測試系統中標北京新能源汽車股份有限公司
- ...· 中電瑞華大功率高壓能源反饋式負載系統成功交付中電熊貓
- ...· 中電瑞華國際在電動汽車及關鍵部件測評研討會上演繹先進測評技術