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