公司簡介 產品資訊 教育訓練 活動資訊 鈦思書網 技術支援 工程師俱樂部 會員登入



 

利用記憶體映圖檔案(Memory Mapped Files)加快大量資料之傳輸速度(上)

鈦思科技股份有限公司
企劃部專員 黃忻 譯


在利用MATLAB進行演算法開發時,有時候我們需要把大量的資料由外界匯入MATLAB進行處理後,再匯出至另一個應用程式繼續後續步驟。在絕大多數情況下,使用MATLAB引擎介面 (MATLAB engine interface) 即可協助您順利無礙地完成這項資料交換的動作,但在進行大量資料轉換時,這樣的處理方式偶爾會遇到瓶頸。

本文旨在介紹另一種可協助您將大量資料在MATLAB與其他應用程式間傳輸的方法-利用記憶體映圖檔案(memory mapped file)取代引擎介面以加快處理速度。

LeCroy Wavemaster示波器的XDEV功能即為一個需要快速進行資料交換的應用實例。這個內建Windows環境的示波器讓使用者可以直接定義一個MATH通道,然後以MATLAB函式直接處理資料流並進行分析。示波器會將資料擷取進來並傳送到MATLAB環境下,使用者接著便可直接下MATLAB語法以針對這些資料進行各項處理,最後再將分析結果傳回示波器顯示。
 
利用引擎介面傳輸如此大量的資料是相當富挑戰性的工作。在Windows平台上運作的引擎介面採用COM標準-使用者需將資料包裝成COM相容的格式,才能將資料由其他程式或環境傳輸至MATLAB環境下。接著MATLAB再將資料解包裝,把COM資料型態轉換成MATLAB資料型態。為了隔離兩個程式並維持其獨立性,這樣的傳輸-轉換是必經的過程,然而當處理大量資料時,這樣的過程便可能成為瓶頸。

記憶體映圖檔案提供了一個途徑,讓使用者可以不需利用COM介面進行資料傳輸,顯著提升大量資料之傳輸速度。
 
記憶體映圖檔案
記憶體映圖檔案是一種作業系統能夠辨識並知道如何與其互動的檔案,對使用者來說,由於作業系統能夠自行處理與檔案間的互動,使得處理這種檔案較為簡便。舉例來說,這種檔案可以同時被多個應用程式存取,作業系統會自行為您處理在不同應用程式間的資料分享問題。

然而,與使用MATLAB環境下檔案的fscanffprintf等函式不同,記憶體映圖檔案類似記憶體中的一個資料陣列,讓您可以使用記憶體複製指令,或利用指標(pointer)操作以存取整筆資料中的不同部分,為您簡化在不同程式中處理資料的程序。,您可以用類似對程式中的一個變數進行存取和處理的方式,先指出您要的資料,並進行後續處理。同時,由於檔案位置在記憶體中,因此資料存取速度比一般以COM介面溝通的檔案分享程式更為快速。
 
使用記憶體映圖檔案之所需元件
下圖一表示使用記憶體映圖檔案所需的不同元件。
 
圖一:在本文範例中使用到的不同元件。
 

本文接著將分別討論下面各項元件:

由MATLAB呼叫一個簡單的MEX檔案
一個helper物件以用來將資料在程式與記憶體映圖檔案間雙向傳送
可使用helper物件之應用程式
一個簡單的MEX檔案呼叫MATLAB