技術文章
一、應用背景
塊或分段內存平均模式常用于在不同應用當中,移除信號中不相干的噪聲。不管是哪家的數(shù)字化儀制造商,幾乎所有基于FPGA實現(xiàn)的塊平均模式都會受到塊或者段內存大小的限。該限制一般取決于FPGA的容量,最大樣品量通常在32k到500k之間。
本文將展示如何使用德思特TS-M4i系列數(shù)字化儀的高速PCIe流模式來在軟件中實現(xiàn)塊平均處理,從而突破FPGA的限制。我們用了TS-M4i.2230(1通道,5 GS/s,8位垂直分辨率,1.5 GHz帶寬)作為例子,對比硬件和軟件進行塊平均處理的效果。
二、什么是塊平均?
塊平均模式可以用來移除隨機噪聲成分,提高重復信號的保真度。該模式允許對多次單段采集進行處理、累積和平均。這個過程減少了隨機噪聲,提高了重復信號的可見性,平均后的信號具有增強的測量分辨率和更高的信噪比(SNR)。
塊平均模式可用于改善雷達測試、天文學、質譜學、醫(yī)學成像、超聲波測試、光纖測試和激光測距等各種不同應用中的測量。
下面截圖顯示了一個較低電平的信號(大約2mV),被隨機噪聲覆蓋的情形,以及使用不同平均因子獲得的信號質量改進。雖然在原始單次采集中源信號基本無法看到,但10x平均時,能顯示出實際上有5個信號峰。執(zhí)行1000x的塊平均可以進一步改善信號質量,揭示出帶有二次最大值和最小值峰的完整信號形狀。
通過塊平均改善噪聲問題,該示例使用了一個500MS/s采樣率(每個采樣點2ns)和14位分辨率的數(shù)字化儀制作
三、系統(tǒng)配置
為了兼顧更多老舊設備的性能狀況,測試系統(tǒng)選用了一臺德思特公司內的舊辦公電腦,大致配置如下:
● 主板:技嘉GA-H77-D3H
● CPU:Intel i7-3770,4核3.4 GHz
● 運行內存:8 GB DDR3
● 硬盤:120 GB固態(tài)
● 操作系統(tǒng):Win 7 64bit
● IDE:Visual Studio 2005標準版
主板上有一個空閑的PCIe Gen2 x8插槽,我們就使用該插槽來插數(shù)字化儀板卡。此時,德思特的TS-M4i板卡的流式傳輸可以達到滿速,約3.4 GB/s(不考慮數(shù)據(jù)處理的情況下)。
四、軟件實現(xiàn)
測試軟件使用純C++編寫,并基于德思特流式傳輸示例。數(shù)字化儀板卡通過外部觸發(fā)采集,板卡會自動在每個觸發(fā)事件后獲取一段數(shù)據(jù)。數(shù)據(jù)會先存儲在板載內存中,然后通過分散聚集式式DMA直接傳輸?shù)絇C的運行內存,并在運行內存中進行累積,進而執(zhí)行塊平均操作。我們針對不同的配置方式和優(yōu)化策略進行了測試,來看看分別能達到什么樣的性能水平。
摘錄出來的一小段源代碼顯示了多線程版本的主求和循環(huán),這正是軟件處理的關鍵部分,也是決定速度的部分。
以下列表提供了具體實現(xiàn)各個方面的一些信息和備注:
● 數(shù)據(jù)段大?。菏盏接|發(fā)事件后將獲取數(shù)據(jù)的樣本點數(shù)量
● 平均次數(shù):對于一個數(shù)據(jù)段,在算法重置前,整個過程中需要執(zhí)行多少次平均前的累加操作。
● 通知大小:硬件生成中斷所需的數(shù)據(jù)量。該參數(shù)決定了整個平均循環(huán)的速度。如果通知大小大于數(shù)據(jù)段大小,則會在一次中斷中傳輸多個數(shù)據(jù)段的內容,這將減少線程通信和中斷處理的額外開銷。
● 緩沖區(qū)大小:DMA傳輸?shù)哪繕司彌_區(qū)整體大小。在我們的實驗中,這個緩沖區(qū)固定等于通知大小的16倍。
● 觸發(fā)速率:作為外部觸發(fā)的信號發(fā)生器的信號重復頻率。在結果表格中,我們給出的是在不填滿(溢出)緩沖區(qū)的情況下可以達到的最大觸發(fā)速率。
● 線程數(shù):為了加快求和過程,我們對該任務進行并行化優(yōu)化,將其分割成多個不同的軟件線程。如果線程為1,則表示求和過程不使用額外線程,而是直接在主循環(huán)中直接執(zhí)行。
● CPU負載:由于平均過程是用軟件完成的,具體來說就是CPU進行了所有的工作。幸好現(xiàn)代CPU往往包含多個內核,我們實際上可以輕松地在它們之間共享工作任務。
● SSE/SSE2指令:乍一看,這些命令似乎非常適合并行化求和過程,并似乎可以在不需要任何線程編程的情況下加快軟件的速度。但不幸的是,SSE命令集都是基于相同類型的數(shù)據(jù)的,而由于獲取的數(shù)據(jù)是8bit寬度,而平均緩沖區(qū)是32位寬,因此在本例中無法利用該指令集進行加速。
五、效果和比較
所有的測量都是使用一個采樣率高達5GS/s、垂直分辨率為8位,并且?guī)в型獠坑|發(fā)通道的數(shù)字化儀進行的。我們在表格中還列出了不同的程序配置以對比效果差異。
通過普通(性能偏低的)PC在時域上進行塊平均的性能對比
六、新方法:使用CUDA進行平均運算
2018年11月,德思特推出了一些使用SCAPP(通過CUDA訪問數(shù)據(jù)和并行處理)選項進行塊平均的示例,適用于非常高速的數(shù)據(jù)處理。其基本概念與前文所述相同,即數(shù)據(jù)由數(shù)字化儀采集并通過PCIe總線連續(xù)傳輸。不同之處在于,平均值的計算操作不是由CPU完成,而是在GPU中完成。GPU解決方案的一個主要優(yōu)點在于,GPU本身就是為并行計算而設計,這使GPU成為各種類型的塊平均運算的理想選擇。
在實現(xiàn)上,SCAPP允許用戶直接將數(shù)據(jù)傳送到GPU,這使用了RDMA(遠程直接內存存取)技術,然后可以在GPU上執(zhí)行高速時域和頻域信號的平均,并突破通常在CPU和FPGA中出現(xiàn)的數(shù)據(jù)長度或算力限制。
比如,TS-M4i.2220數(shù)字化儀可以以2.5 GS/s的速度連續(xù)采樣信號,我們可以做到在不丟失樣品點的情況下,進行長達數(shù)秒的平均運算。類似地,我們還有14位垂直分辨率的TS-M4i.4451數(shù)字化儀可以以450 MS/s的速度同時對四個通道的信號進行同一功能的采樣。數(shù)字化儀板卡還提供了靈活的觸發(fā)、捕獲和讀出模式設置,從而使它們能夠在觸發(fā)速率較高的情況采回原始信號,進而做平均處理。相比之下,F(xiàn)PGA方案需要最高性能級別的FPGA來同時滿足數(shù)據(jù)拉取和平均運算,而GPU方案則可以輕松跑滿數(shù)字化儀的全速,即使是使用入門級GPU也不會成為瓶頸。
以下表格展示了使用GPU,并在和之前表格中板卡參數(shù)相同的情況下的測試結果:
在時域上使用GPU進行塊平均的測試結果
這些結果是在使用一張Quadro P2000 GPU獲得的。如表所示,數(shù)據(jù)段大小和通知大小并未限制性能,我們遇到的瓶頸是GPU內存(顯存)。
七、使用GPU進行頻域平均
在需要進行頻域平均的情況下,也建議使用GPU,因為GPU允許比FPGA方案更大的平均塊大小。頻域的平均運算過程包含兩個步驟,一個是針對塊數(shù)據(jù)的FFT運算,另一個是對FFT結果求和(然后取平均)。其中FFT計算在處理能力方面要求非常高,因此對于頻率域平均而言,除了FPGA外,GPU是的可行方案,CPU并不適合在高速下進行FFT轉換。
以下表格顯示了使用最大采樣率為500 MS/s的TS-M4i.4451數(shù)字化儀(4通道,14位垂直分辨率)的一些測試結果。最終表明該方案能高效地實現(xiàn)無間隙數(shù)據(jù)采集,將每個塊中的原始數(shù)據(jù)轉換為對應電壓值,然后再轉換至頻率域做平均。
使用GPU進行頻率域塊平均的測試結果
八、結論
如上述結果所示,只要重復率不算太高,得益于PCIe總線的高速數(shù)據(jù)傳輸率,使用基于CPU的軟件在進行塊平均時,可以實現(xiàn)比FPGA更大的總數(shù)據(jù)段大小,從而平均更長時間的樣本;而使用GPU時,更是可以達到PCIe總線傳輸所限制的上限速度。對于需要處理更高重復觸發(fā)率的情況,會對總線傳輸速度提出更高的要求,此時基于FPGA硬件的塊平均仍將是不錯的選擇。
上述測試程序也可以提供給您,以便您自己進行重復測試,或者作為實現(xiàn)其他軟件程序的基礎。其中GPU示例是SCAPP軟件選項的一部分,在選購后,德思特的客戶可按照NDA協(xié)議使用。
總的來說,通知大小設為1 MByte時,可獲得最佳性能。具體執(zhí)行的平均次數(shù)對測試性能并沒有明顯的影響。因為復制結果段和清除結果緩沖所需的時間相對于樣本求和運算而言微不足道。
由于在同時采集多個通道時,整個的數(shù)據(jù)處理和求和過程并沒有本質區(qū)別,因此只需等價成一個把所有數(shù)據(jù)都合并到一起的新通道即可(等效采樣率= 每通道采樣率 × 通道數(shù))。以下設置對應的最大觸發(fā)速率相同:
● 1通道5 GS/s @ 數(shù)據(jù)段大小S1
● 2通道2.5 GS/s @ 數(shù)據(jù)段大小S1/2
● 4通道1.25 GS/s @ 數(shù)據(jù)段大小S1/4
對于1 M樣本點的數(shù)據(jù)段大小,外加死區(qū)長度為160個樣本點時,理論上的最大觸發(fā)速率為:(2.5 GS/s) / (1 MS+ 160 S) = 2.38 kHz。
注意,這確實會明顯低于單純采集時的最大觸發(fā)速率:2.9 kHz @ 5 GS/s。