? NI LabVIEW多核分析和稀疏矩陣工具包提供了高性能的LabVIEW多線程分析庫,是在線或離線的大數(shù)據(jù)集處理應(yīng)用的理想工具。實(shí)際上,許多現(xiàn)實(shí)世界的問題可以表示為大型線性代數(shù)計(jì)算,而該工具包可以為這些運(yùn)算減少所需的資源和總體的計(jì)算時(shí)間。此外,該工具包包括稀疏線性代數(shù)函數(shù),并支持單精度和雙精度數(shù)據(jù)類型。本文介紹了LabVIEW多核分析和稀疏矩陣工具包的用途和推薦用法。
1. 高性能多線程分析
如前所述,NI LabVIEW多核分析和稀疏矩陣工具包提供了一系列高性能、多線程分析庫,可以用來處理大型數(shù)據(jù)集。這些庫是專為基于英特爾?數(shù)學(xué)內(nèi)核函數(shù)庫(Intel? MKL)的Windows 操作系統(tǒng)而設(shè)計(jì)的。該內(nèi)核庫是一個(gè)高度優(yōu)化、多線程化的數(shù)學(xué)計(jì)算函數(shù)庫,滿足最高性能需求的應(yīng)用。此外,當(dāng)您將這個(gè)工具包與LabVIEW實(shí)時(shí)模塊一同使用時(shí),這些庫可以被擴(kuò)展到LabVIEW實(shí)時(shí)(ETS)的目標(biāo)中。因此,用戶能夠使用多線程線性代數(shù)、基本線性代數(shù)子程序(BLAS)和基于快速傅立葉變換(FFT)的函數(shù)。
?
圖1.多核分析和稀疏矩陣函數(shù)選板包含高性能、多線程分析以及稀疏矩陣代數(shù)函數(shù)。
該工具包提供了各種函數(shù)庫,每個(gè)函數(shù)可以更好地利用多核CPU。而且它還包含一組線程管理函數(shù),因此用戶可以調(diào)整應(yīng)用程序的線程行為特性。
?
圖2.線程管理函數(shù)選板包含有效管理線程的函數(shù)。
2. 管理線程
本節(jié)以兩個(gè)矩陣相乘為例來介紹管理線程的方法。管理線程時(shí),首要考慮的是執(zhí)行函數(shù)的系統(tǒng)中可用的內(nèi)核數(shù)。要獲得目標(biāo)系統(tǒng)的CPU特性,可以使用 CPU Information 函數(shù)。此外,線程管理函數(shù)選板中 的 Get Threads 函數(shù)可以在之后立即添加以獲取可用線程的最大數(shù)量。此函數(shù)提供了線性代數(shù)、轉(zhuǎn)置以及其它函數(shù)相關(guān)的可用線程的最大數(shù)量信息。這為每個(gè)線程或者線程組定義了作用域,并根據(jù)具體應(yīng)用需求提供進(jìn)一步的管理功能。
?
圖 3. 獲取處理器特性可以知道可用線程的最大數(shù)目
用戶必須注意,LabVIEW使用線程的實(shí)際數(shù)量取決于具體問題的大小、系統(tǒng)資源,和其它因素。除非您指定一個(gè)較小的數(shù)值,在默認(rèn)情況下,多核分析和稀疏矩陣VI使用物理內(nèi)核數(shù)量作為線程的最大數(shù)。鑒于此,使用Set Threads函數(shù)可以設(shè)置任意數(shù)量的線程,但這一設(shè)置必須在并行執(zhí)行實(shí)際代碼之前完成。也就是說,程序的流程必須順序執(zhí)行,以便更好地控制為執(zhí)行某一段代碼所使用的線程數(shù)。我們不建議并行執(zhí)行多個(gè)多核分析和稀疏矩陣庫的函數(shù)。因此,在管理線程時(shí)需要密切觀察,以避免出現(xiàn)類似于”超額認(rèn)購”問題;當(dāng)試圖運(yùn)行的線程數(shù)量超過可用的邏輯內(nèi)核的數(shù)量時(shí),就會(huì)出現(xiàn)這種問題。
?
圖 4. 線程管理必須按照一定的順序進(jìn)行,以避免并行運(yùn)行產(chǎn)生的性能問題
這種編程架構(gòu)可以繼續(xù)擴(kuò)展,以包含在其它函數(shù)域中的線程,或者為一段給定的代碼重新分配線程。下圖顯示了在一臺(tái)具有Intel i7 2600 四核 CPU的計(jì)算機(jī)上,對(duì)有不同線程數(shù)的矩陣相乘問題進(jìn)行的性能基準(zhǔn)測(cè)試。
?
圖 5.在一臺(tái)具有Intel i7 2600 四核CPU的計(jì)算機(jī)上為矩陣相乘運(yùn)算進(jìn)行計(jì)算時(shí)間和性能改進(jìn)的基準(zhǔn)測(cè)試
此外,對(duì)于序列中不同的函數(shù)域,可以明確劃分線程。例如,在一個(gè)四核系統(tǒng)中,有兩個(gè)線程,一個(gè)可以分配給轉(zhuǎn)置函數(shù),另一個(gè)可以分配給除了轉(zhuǎn)置函數(shù)以外的所有的其它函數(shù)。
圖6.線程可以定義在不同的函數(shù)域中
3. 稀疏矩陣函數(shù)
稀疏矩陣是多數(shù)元素為零的矩陣,廣泛應(yīng)用于數(shù)值分析計(jì)算。與此相反,如果矩陣的大部分的元素不為零,那么通常稱為密集矩陣。稀疏矩陣為存儲(chǔ)數(shù)據(jù)提供了一個(gè)更有效的方法,并且在分析程序中可以使用特定的計(jì)算技術(shù)以更少的時(shí)間完成運(yùn)算。例如,下面的圖表顯示了對(duì)于一個(gè)AxB函數(shù),使用密集矩陣和稀疏矩陣的比較,其中稀疏矩陣的密度為0.01。
?
圖7.稀疏矩陣降低了對(duì)內(nèi)存需求,而降低的程度取決于非零項(xiàng)的分布和數(shù)量。
多核分析和稀疏矩陣工具包提供了廣泛的矩陣VI來操控一個(gè)稀疏矩陣的元素、對(duì)角線和子矩陣。用戶可以使用這些函數(shù)解決具有挑戰(zhàn)性的問題,包括曾經(jīng)由于矩陣過大而不能有效存儲(chǔ)和處理的問題。
?
圖8.矩陣函數(shù)選板包含一系列VI以操控稀疏矩陣。
矩陣VI使用一個(gè)稀疏矩陣對(duì)象來定義這種矩陣。該工具包包括全面的函數(shù)可以轉(zhuǎn)換為稀疏矩陣,或者進(jìn)行相反的操作。
?
圖9.在LabVIEW中,稀疏矩陣通過一個(gè)對(duì)象來表示
4. 數(shù)據(jù)類型支持
多核分析和稀疏矩陣工具包內(nèi)的函數(shù)支持單精度和雙精度浮點(diǎn)數(shù)據(jù)類型。因此,要求低精度的運(yùn)算可以使用較少的內(nèi)存、以及更少的時(shí)間。關(guān)于函數(shù)性能的更多信息,請(qǐng)參閱下表。
?
表1.多核分析和稀疏矩陣工具包支持的數(shù)據(jù)類型
當(dāng)提升計(jì)算性能和節(jié)省內(nèi)存很重要時(shí),并且運(yùn)算不會(huì)溢出單精度浮點(diǎn)數(shù)值的范圍時(shí),可以使用單精度數(shù)據(jù)類型。下面的圖表顯示了使用單精度和雙精度數(shù)據(jù)類型的矩陣相乘函數(shù)和FFT函數(shù)的性能基準(zhǔn)測(cè)試。
?
圖8.對(duì)于AxB 和 FFT函數(shù),單精度運(yùn)算可以達(dá)到雙精度運(yùn)算速度的2倍
性能方面的考慮
E盡管NI LabVIEW已經(jīng)實(shí)現(xiàn)了在多核目標(biāo)中有效地管理線程,許多其它的應(yīng)用程序也能夠從本文所述的多線程函數(shù)中受益。雖然應(yīng)用程序的性能提升程度主要取決于代碼的具體情況,但是一些初始基準(zhǔn)測(cè)試以及客戶的反饋表明個(gè)別函數(shù)能夠達(dá)到4-7倍的速度提升。當(dāng)處理大型數(shù)據(jù)集時(shí),這些改進(jìn)會(huì)進(jìn)一步地增加。
本部分介紹了使用多核分析和稀疏矩陣工具包對(duì)于不同數(shù)據(jù)類型的矩陣和FFT運(yùn)算的基準(zhǔn)測(cè)試結(jié)果。這些分析是在兩個(gè)不同的目標(biāo)上以LabVIEW 高級(jí)分析庫VI進(jìn)行的。一個(gè)是在四核 i7 @ 3.4GHz, 8GB RAM Windows 7 64bit CPU進(jìn)行;另一個(gè)是在Core 2 Duo T7400 @ 2.16GHz, 512MB RAM LabVIEW Real-Time 2012 SMP NI PXI-8106 控制器上進(jìn)行。
?
表2.在一個(gè)四核i7 64 bit CPU上,使用4個(gè)線程和多核分析和稀疏矩陣工具包VI,對(duì)比LabVIEW高級(jí)分析庫的性能基準(zhǔn)測(cè)試結(jié)果。
?
?
表3.在一個(gè)Core 2 Duo RT NI PXI-8106 控制器上,使用4個(gè)線程和多核分析和稀疏矩陣工具包VI,對(duì)比LabVIEW高級(jí)分析庫的性能基準(zhǔn)測(cè)試結(jié)果。
5. 結(jié)論
NI LabVIEW多核分析和稀疏矩陣工具包提供了高性能的LabVIEW多線程分析庫,它適用于需要處理大型數(shù)據(jù)集、并且可以在Windows和LabVIEW Real-Time (ETS)上執(zhí)行的應(yīng)用。該工具包為多核編程人員提供了更廣泛的工具來有效地管理執(zhí)行在多個(gè)內(nèi)核以及在不同函數(shù)域中的線程。此外,一套完整的多線程函數(shù)還包括稀疏矩陣的相關(guān)操作運(yùn)算。雖然這些分析函數(shù)能夠更好地利用多線程,但是用戶必須特別注意創(chuàng)建過多線程所帶來的不利影響。
評(píng)論
查看更多