<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > LabVIEW馳騁多核技術(shù)時(shí)代

LabVIEW馳騁多核技術(shù)時(shí)代

—— LabVIEW Fitting for Multi-Core Times
作者:周斌 NI技術(shù)市場(chǎng)工程師 時(shí)間:2008-09-19 來(lái)源:電子產(chǎn)品世界 收藏

摘要:本文主要介紹了專(zhuān)門(mén)針對應用而優(yōu)化的全新軟件,并詳細介紹其開(kāi)發(fā)優(yōu)勢。

本文引用地址:http://dyxdggzs.com/article/88205.htm

關(guān)鍵詞:;;;

時(shí)代的編程挑戰

  眾所周知,由于對芯片功率和熱效應的制約,以往單純通過(guò)提高主頻來(lái)提高處理器運行速度的做法已經(jīng)不再可行,一個(gè)新的架構已經(jīng)逐漸成型,那就是多核。

  多核時(shí)代的來(lái)臨已成為主流的發(fā)展趨勢,在2006年的Intel開(kāi)發(fā)者論壇上,Intel的CEO Paul Otellini向全世界展示了一個(gè)80核的原型,它可以在一秒內處理數以千兆字節的數據,那是非常驚人的處理能力,并且Intel希望在5年內將其推入消費市場(chǎng)。

  然而,這對于工程師和程序員們來(lái)說(shuō),意味著(zhù)什么呢?

  在以往,程序開(kāi)發(fā)人員們只需換上一塊更高計算性能的處理器,就可以在無(wú)需任何代碼修改的情況下,自動(dòng)加快了每一行代碼的執行速度。然而在如今的多核時(shí)代,這樣的“免費午餐”已經(jīng)結束了。如圖1所示,即使是在一個(gè)4核處理器上,如果其應用只是單線(xiàn)程的話(huà),操作系統仍舊會(huì )將所有的任務(wù)分配到其中一個(gè)核上運行,導致多核處理器無(wú)法得到充分的利用。因此,為了充分利用多核處理器,需要有新的編程方法。

 


圖1 單線(xiàn)程編程無(wú)法充分利用多核處理器

  而這恰恰是一個(gè)巨大的編程挑戰,針對這個(gè)問(wèn)題,比爾蓋茨也說(shuō)過(guò):“要想充分利用并行工作的處理器威力,……軟件必須能夠處理并發(fā)性問(wèn)題。但正如任何一位編寫(xiě)過(guò)多線(xiàn)程代碼的開(kāi)發(fā)者告訴你的那樣,這是編程領(lǐng)域最艱巨的任務(wù)之一。”

  總體而言,多核處理器編程存在以下幾大難點(diǎn):首先是并行的思考方式,比如要分辨出哪些任務(wù)是可以同時(shí)執行的,這并不是一件容易的事情,尤其對于習慣于順序結構編程的開(kāi)發(fā)人員來(lái)說(shuō),思考方式的轉變往往需要花相當長(cháng)的一段時(shí)間。

  其次是線(xiàn)程的創(chuàng )建和管理。開(kāi)發(fā)人員把任務(wù)劃分成多個(gè)并行步驟之后,就要通過(guò)線(xiàn)程的方式來(lái)編程實(shí)現。事實(shí)上,多線(xiàn)程編程是相當困難的,很多傳統的編程語(yǔ)言都需要一組新的函數或結構來(lái)創(chuàng )建、同步、加解鎖線(xiàn)程,這意味著(zhù)工作量的增加。例如用C++寫(xiě)一個(gè)多線(xiàn)程的程序,程序員就必須要非常熟悉C++,了解如何將C++程序分成多個(gè)線(xiàn)程和任務(wù)間并發(fā)的同步,此外還要了解Windows多線(xiàn)程的機制,熟悉Windows API的調用方法,或者M(jìn)FC的架構等等;在C++上調試多線(xiàn)程程序,更是被許多程序員視為噩夢(mèng)。

  最后,開(kāi)發(fā)人員還需要自己考慮并行代碼段之間哪些資源是不能共享的,比如文件、內存、硬件等等,否則會(huì )導致資源的沖突和爭奪,使得并行線(xiàn)程因等待資源而暫停甚至死鎖。

  以往基于文本的編程語(yǔ)言,由于其自身是一種順序的編程模式,因此在對待時(shí)顯得有些力不從心。雖然對于一些學(xué)習計算機編程或軟件工程的專(zhuān)業(yè)開(kāi)發(fā)人員來(lái)講,使用文本語(yǔ)言在一個(gè)雙核處理器中開(kāi)發(fā)機制可能還不足以被難倒的話(huà),那么當Intel推出80核處理器之后,其編程的復雜度相信任何開(kāi)發(fā)人員都無(wú)法應付。因此,工程師和開(kāi)發(fā)人員們都期待著(zhù)一種更高效、更具創(chuàng )新的并行編程工具,能夠協(xié)助他們順利迎接多核時(shí)代的到來(lái)。

— 天生并行的編程語(yǔ)言

  LabVIEW就是這樣一種馳騁多核技術(shù)時(shí)代的編程語(yǔ)言,可以幫助開(kāi)發(fā)人員高效地享用多核技術(shù)所帶來(lái)的益處。

  LabVIEW是一個(gè)基于數據流的圖形化開(kāi)發(fā)平臺,它提供了直觀(guān)的圖形化編程方式和用戶(hù)界面。與傳統的文本編程相比,LabVIEW天生就是一種并行結構的編程語(yǔ)言?;贚abVIEW的數據流特性,如果連線(xiàn)中存在著(zhù)分支,或者是框圖中有著(zhù)并行序列,那么后臺的LabVIEW執行器就將自動(dòng)地實(shí)現并行化運行,這種在計算機科學(xué)術(shù)語(yǔ)中叫做“潛在并行化”(圖2)。例如,我們在LabVIEW下創(chuàng )建了多個(gè)循環(huán),那么相對應的也就創(chuàng )建了數個(gè)新的執行線(xiàn)程,從而這些并行循環(huán)就會(huì )自動(dòng)分配成多個(gè)線(xiàn)程分到多個(gè)處理核上,讓LabVIEW開(kāi)發(fā)人員享受到了多核處理器的性能優(yōu)勢。

 


圖2 LabVIEW本身就是自動(dòng)多線(xiàn)程的編程語(yǔ)言

  從單核到雙核的處理器,理論上來(lái)說(shuō),獲得的運算性能可以達到原先的兩倍。但是,與這個(gè)極限值的接近程度取決于用戶(hù)應用程序并行化運行的程度。使用LabVIEW,我們就可以方便地實(shí)現應用程序性能的改進(jìn),通過(guò)最少的編程調整,并行應用便可以獲益于多核處理器。對于普通的LabVIEW應用程序而言,如果不考慮多核編程技巧,在不改寫(xiě)代碼的情況下,與最初的基準程序相比,可以獲得25%到35%性能上的提升,這也就意味著(zhù)“免費的午餐”還沒(méi)有結束。

  下面我們來(lái)看圖3的簡(jiǎn)單例子。其中LabVIEW代碼中的分支簡(jiǎn)化了兩個(gè)分析任務(wù) ——濾波操作和快速傅立葉變換(FFT),使它們可以在雙核機器上并行化執行。首先程序在單核的模式下(關(guān)閉其中一個(gè)核)運行一次,然后在雙核模式下運行。從圖中可以看到,由于兩項任務(wù)的計算量都很高,因此利用任務(wù)并行化獲得的性能改進(jìn)為原先的1.8倍。

 


圖3 LabVIEW數據流編程的并行特性

  Windows操作系統是自動(dòng)將線(xiàn)程分配到不同的核上,那么對于某些應用,如果有一個(gè)對時(shí)間要求非常高的線(xiàn)程,那么是否有辦法能夠保證它執行的確定性呢?

  使用LabVIEW 就可以很好地解決這個(gè)問(wèn)題,從而獲得對于多核處理器更多的控制權。在 LabVIEW中,工程師可以根據自身需求手動(dòng)設置線(xiàn)程運行在特定的核上,例如將時(shí)間要求苛刻的采集與控制任務(wù)放在單獨的核上運行,而將對確定性要求不高的界面響應、數據記錄等任務(wù)放在另外一個(gè)核上運行(圖4)。值得一提的是,實(shí)現這樣的操作非常簡(jiǎn)單,就像放一個(gè)LabVIEW循環(huán)一樣,只需放置一個(gè)定時(shí)循環(huán)(Timed Loop),再分配那個(gè)循環(huán)到指定的核上即可。

 


圖4 LabVIEW 允許用戶(hù)手動(dòng)分配線(xiàn)程在指定的核上運行

  作為一個(gè)典型的多核應用案例,德國的Max Planck研究院要實(shí)現針對核聚變能源的受控熱核反應裝置的等離子控制,這種高速控制需要將88個(gè)磁感應器上的大量數據轉換為64×128個(gè)點(diǎn)格上的偏微分方程組,并要在短短的1ms內完成整個(gè)計算過(guò)程。最終他們使用LabVIEW在一個(gè)8核的系統上采用并行技術(shù),將整個(gè)系統的運算速度提高了5倍,成功地達到了1ms閉環(huán)控制速率的要求,完成了這個(gè)“不可能的任務(wù)”。

基于LabVIEW的并行編程

  LabVIEW自身所具有的并行特性使得開(kāi)發(fā)人員可以不用花過(guò)多的時(shí)間放在多線(xiàn)程的創(chuàng )建、管理、同步、調試等底層實(shí)現過(guò)程上,而可以將主要精力聚焦在整個(gè)并行程序的高層架構上,這是能否高效利用多核處理器技術(shù)的關(guān)鍵所在。

  本節中將簡(jiǎn)單介紹針對多核的三種常用編程方式及其在LabVIEW下的實(shí)現方式。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>