2013-10-24 19 views
1

我有一個Matlab程序,在大量的物理文件數據的讀出在磁​​盤上並這樣執行密集計算:是否有可能在平行在Matlab加載數據文件來計算,而不墨西哥

data = load('myfile.dat'); 
results = intensiveCompute(data); 

的計算在GPU上完成,需要很長時間。我想要做的是能夠在計算運行時從下一個文件加載數據(因爲加載文件也是一個瓶頸)。從我到目前爲止收集的情況來看,這是可行的,使用Mex(例如_beginthread等)。但是,如果可能的話,這將是保持在Matlab環境中的理想選擇。也許有一些方法可以在Matlab中產生一個線程讀取數據,另一個線程執行計算。任何幫助是極大的讚賞。

+0

不會'parfor'給你這種行爲? – Shai

+0

也許我錯過了一些東西,但是如何使用parfor來並行執行2個不同的任務?我已經將chappjc的解決方案標記爲答案,但如果使用parfor有一些聰明的方法,那麼知道它會很棒。 – user1715925

回答

2

this answer我詳細使用taskjob功能異步執行的方法,但我認爲一個簡單的loadparfeval可能是最容易的。例如,

f = parfeval(@load,1,'myfile.dat'); % asynchronous, move on to intensiveCompute 
results = intensiveCompute(data); 
data = fetchOutputs(f); % Blocks until complete 

注:一定要允許在Windows防火牆MATLAB.exe,smpd.exe和mpiexec.exe傳入連接。您應該被提示第一次啓動游泳池(由parfeval自動執行)。

這裏有一個簡單的例子來說明它是如何工作的:

>> x = magic(5); 
>> save x.mat x 
>> f = parfeval(@load,1,'x.mat'); 
Starting parallel pool (parpool) using the 'local' profile ... connected ... 
>> f 
f = 
FevalFuture with properties: 

        ID: 1 
      Function: @load 
       State: running 
     ErrorIdentifier: 
     ErrorMessage: 

在這一點上,我們看到,該命令仍然在工人運行。顯然,我們可以做的事情不是工作?只需勾選更有用......但這裏有一個短暫的等待之後會發生什麼:

>> f 
f = 
FevalFuture with properties: 

        ID: 1 
      Function: @load 
       State: finished (unread) 
     ErrorIdentifier: 
     ErrorMessage: 
>> % all done, load the data 
>> data = fetchOutputs(f) % Blocks until complete 
data = 
x: [5x5 double] 
1

我知道你提到你想留Matlab的範圍內,並作爲chappjc建議你可以使用並行計算工具箱,但我們大多數人沒有很多工具箱。

您的數據只能以MAT文件格式存在,還是以某種其他格式(如CSV或HDF5)提供?如果您瞭解Java或有權訪問可以在其中編程的人,我會建議使用Java線程,因爲Matlab運行在Java上,並且在Java和MATLAB之間具有高性能的數據編組。那麼你不必擔心MEX文件。

+0

感謝您的建議。在這種情況下,我確實有PCT,因此chappjc解決方案可以工作。然而,你的評論引發了另一個問題,這是否意味着C++和Matlab之間的編組並不像Java那樣高效?如果是這樣,你知道是否有任何基準進行比較嗎? – user1715925

+1

@ user1715925 - 否,MEX文件可以直接訪問MATLAB數據並在MATLAB工作區中操作變量 - [MEX API](http://www.mathworks.com/help/matlab/matlab_external/cc-source-mex- files.html)是非常高的性能。另外,很好的一點是MATLAB引擎不是基於Java,只是GUI。然而,就像Jason S.所說的那樣,如果JVM啓動(默認情況下不需要),您可以從命令行完全訪問Java的所有功能。 – chappjc

相關問題