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



 

利用MATLAB 7之新功能處理大量資料集(上)

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


最新版的MATLAB 7包含了許多新增或升級功能,以支援大量資料集之處理工作,提昇功能包括:檔案存取功能、資料儲存效率、資料處理速度及新增對64位元平台之支援等。

本文中的內容及範例使用的是MATLAB產品家族最新版Release 14 SP1中的產品及功能。
 
大量資料集之處理問題
想解決需要處理及分析大量資料的科學運算問題往往會佔去電腦系統的大量資源。大量資料集在處理時會佔據極可觀的記憶體,且可能需要許多運算以求出結果。由大量資料集存取資訊往往也需要花費很長的時間。

然而,電腦系統的記憶體容量及CPU運算速度都是有限的。可用資源的多寡取決於使用的處理器及作業系統,同時作業系統本身也需消耗資源。舉例來說:

- 32位元的處理器及作業系統最多可以使用2^32 = 4,294,967,296 = 4 GB之記憶體 (即虛擬位址)

- Windows XP及Windows 2000只分配給每項工作(如:MATLAB)2 GB之虛擬記憶體。在UNIX系統上,每項工作所分配到的虛擬記憶體是可以自行調整的,一般是3 GB。

- 實際進行運算的應用程式,如MATLAB,可能需要儲存使用者進行工作以外的資料。

處理大量資料集時遇到的最主要問題在於應用程式需求的記憶體可能超過作業平台所提供的容量。在Window XP平台上,當MATLAB需求的資料處理容量超過約1.7 GB時,MATLAB便自動產生一個「out of memory」的警告訊息。

以下將介紹MATLAB 7中可用來協助使用者解決大量資料處理的升級或全新功能,包括增加可用的記憶體、改善檔案存取、更為有效率的資料儲存方法,及提昇的處理效能等。
 
將可用記憶體資源極大化
 
全新的64位元平台
可支援64位元平台的MATLAB版本已經正式上市,目前已提供基於AMD64及Intel EM64T處理器的Linux平台。64位元處理器提供非常大量的記憶體空間,最高可儲存2^64 bytes = 18,446,744,073,709,552, 000 bytes (16 exabytes)的資料。例如知名的Google搜尋引擎目前使用2 petabytes的磁碟空間。若有16 exabytes的空間,您可以在記憶體中儲存9,000個Google。

64位元架構的平台解決了處理大量資料集時所面臨的記憶體容量限制問題,但仍然沒有改善其他問題,如:執行速度及檔案存取等。

註:在MATLAB64位元版本下,單一矩陣的大小限制為2^32個元素如:一個65,000 x 65,000的矩陣,容量約為16 GB。
 
針對Windows XP記憶體用量問題的功能強化
新版的MATLAB 7在Windows XP上執行時,將最大鄰接記憶體區塊的容量增加至約1.5 GB,約相當於1億八千萬個雙精度值。

同時,MATLAB在Windows XP上現在可支援3 GB轉換的啟動選項,以額外分配1 GB的可用記憶體至每個運算工作。這種做法可將您能夠儲存在MATLAB workspace下的資料總量增加到約2.7 GB,約相當於三億三千萬個雙精度值。這個額外的記憶體區塊並沒有與其他MATLAB可使用的記憶體相鄰接,因此您沒有辦法建立一整個單一陣列並儲存在這個空間中。
 
檢視可用的記憶體
若想在MATLAB 7環境中檢視可用的記憶體,您可以利用下列指令:
>> feature('memstats')
 
下面這個範例呈現的是用一台1.2 GB RAM的電腦在Windows XP系統下,並使用3 GB轉換設定的結果。您可以看到兩個各超過1 GB的記憶體區塊,加總起來共有2.7 GB的記憶體可用。
 
Physical Memory (RAM):
   
      In Use:
340 MB
(1549f000)
      Free:
938 MB
(3aa4d000)
      Total:
1278 MB
(4feec000)
     
Page File (Swap space):    
      In Use:
236 MB
(0ec78000)
      Free:
986 MB
(3dad9000)
      Total:
1223 MB
(4c751000)
     
Virtual Memory (Address Space):    
      In Use:
296 MB
(1283d000)
      Free:
2775 MB
(ad7a3000)
      Total:
3071 MB
(bffe0000)
     
Largest Contiguous Free Blocks:    
      1. [at 10007000]
1546 MB
(60a69000)
      2. [at 7ffe1000]
1023 MB
(3ffbf000)
      3. [at 7c41b000]
28 MB
(01c75000)
      4. [at 74764000]
28 MB
(01c2c000)
      5. ...    
 
========
==========
2734 MB
(aae1a000)
 
您必須配備足夠的實體記憶體(RAM) 以滿足您的資料儲存需求。這樣的方法可減少將資料搬移至硬碟的次數/頻率,降低對執行效率之負面影響。

您可以參閱美國The MathWorks原廠網站所提供的Memory Management Guide 以獲得更多關於在MATLAB下極大化可用記憶體的資訊。