2015-04-13 1 views
0

В настоящее время я выполняю отдельный файл в matlab с бесконечным циклом while.Параллельный процесс с MATLAB (LINUX)

loadconfig 
while true 
    command = meexcel.getGetParams();  
    refkey = command.get('refkey'); 
    try 
     if isempty(refkey) == false 
      str=''; 
     document=command.get('documentid'); 

     documentlanguage=command.get('documentlanguage'); 
     if isempty(document) == false    
      s=loadSpace(filename,documentlanguage); 
     end 
     opt.Compact=1;   
     [temp1 temp2] = getPar;   
     jsondata=savejson('',temp1,opt); 
     m = java.util.HashMap;   
     m.put('results', jsondata); 
     meexcel.setGetParams(m,refkey); 
    end 
catch err 
    m = java.util.HashMap; 
    m.put('results','{msg: Error during calculating}'); 
    m.put('refkey',refkey); 
    meexcel.setGetParams(m,refkey); 
    disp(getReport(err));            
end 

%plotSemantic function 
command = meexcel.getPlotSemanticDistance();  
word = command.get('word'); 
try 
    if isempty(word) == false 
     str=''; 
     refkey = command.get('refkey'); 
     documentlanguage=command.get('documentlanguage'); 
     if isempty(documentlanguage) == false    
      s=loadSpace(filename,documentlanguage); 
     end 

     [h out]=plotSemanticDistance(s,word); 
     saveas(h,strcat(download_plot_dir,refkey,'.png')) 
     result = strcat(download_plot_url,refkey,'.png');    
     m = java.util.HashMap;   
     m.put('results', result); 
     meexcel.setPlotSemanticDistance(m,refkey); 
    end 
catch err 
    m = java.util.HashMap; 
    m.put('results','Error during calculating'); 
    m.put('refkey',refkey); 
    meexcel.setPlotSemanticDistance(m,refkey); 
    disp(getReport(err)); 

    end 
end 

Как я могу обрабатывать параллельное выполнение этого файла? функция, подобная meexcel.getGetParams(), будет извлекать данные, когда она будет доступна. Этот файл имеет inifite loop.

+3

Вы можете использовать команду 'batch' из инструментария параллельных вычислений. Доступен ли этот набор инструментов? – Daniel

+0

Спасибо Даниэлю, но как новичок я не знаю MATLAB, я просто хочу сделать параллельный процесс. Есть какой-либо способ сделать это. пакетная команда доступна, но не знает, как ее использовать! – ashikpatel

+0

Возможный дубликат [Как использовать параллельную обработку в Matlab] (http://stackoverflow.com/questions/4056831/how-to-utilise-parallel-processing-in-matlab) –

ответ

1

Вы можете сделать это, используя parfeval от Parallel Computing Toolbox. Что-то вроде этого:

queue = rand(1, 10); % simulated data 
futures = []; 
while ~isempty(queue) 
    % Consume item from queue 
    item = queue(end); 
    queue(end) = []; 
    futures = [futures; parfeval(@sqrt, 1, item)]; 
end 
% Block until all futures are complete and fetch 
% the results 
fetchOutputs(futures);