2015-05-29 23 views
0

我在MATLAB編寫的程序,我的算法依賴於幾個參數,假設A和B a=1:10b=1:10我想找到的ab這些值,給了我最好的結果。並行處理查詢

我的主要代碼如下:

a= 0.1:0.1:1; 
b= 1:1:10; 
arr_mat = zeros(length(a),length(b)); 
for i=1:length(a) 
    for j=1:length(b) 
     disp(['loop no = ',num2str(i),' & ',num2str(j)]); 
     knn = a(j); 
     eta = b(i);   
     arr_mat(i,j) = called_function(knn,eta); 
    end 
end 

程序運行,但計算量非常大。我想知道是否有任何matlab內置的並行處理工具箱,這將有助於我在這種情況下。我是基於這樣的思考:

鴻溝我的主程序成零件:

a1= 0.1:0.1:0.5; 
    b1= 1:1:5; 
    arr_mat1 = zeros(length(a1),length(b1)); 
    for i1=1:length(a) 
     for j1=1:length(b) 
      disp(['loop no = ',num2str(i1),' & ',num2str(j1)]); 
      knn1 = a1(j); 
      eta1 = b1(i);   
      arr_mat1(i,j) = called_function(knn1,eta1); 
     end 
    end 

    a2= 0.6:0.1:1; 
    b2= 6:1:10; 
    arr_mat2 = zeros(length(a2),length(b2)); 
    for i2=1:length(a2) 
     for j2=1:length(b2) 
      disp(['loop no = ',num2str(i2),' & ',num2str(j2)]); 
      knn2 = a2(j); 
      eta2 = b2(i);   
      arr_mat2(i,j) = called_function(knn2,eta2); 
     end 
    end 

並行運行的代碼。我的系統配置是:Intel Core i7-3770 @ 3.40 GHz,帶有32.0 GB RAM。我安裝了MATLAB 2013b。

我諮詢這個question並試圖寫我自己的代碼在格式:

clc;clear all;close all; 
% run ixmas for different modifications 
a= 0.1:0.1:1; 
b= 1:1:10; 
arr_mat = zeros(length(a),length(b)); 

matlabpool open local 2 

    parfor i=1:length(a) 
     for j=1:length(b) 
      disp(['loop no = ',num2str(i),' & ',num2str(j)]); 
      knn = a(j); 
      eta = b(i); 
      recog = 0; 
      for k=1:5 
       recog(k) = ixmas(knn,eta); 
      end 
      arr_mat(i,j) = mean(recog); 
     end 
    end 
end 

matlabpool close 

此代碼拋出了錯誤:「‘’非法使用保留關鍵字」結束 我的查詢:

  1. 請請告訴我,我錯了。
  2. 我試圖在內部循環中引入parfor,但它引發錯誤?
  3. matlabpool open local 2是什麼意思?
  4. 我的系統配置可並行使用多少個線程?我甚至可以檢查這些限制並將其最優化地用於滿負荷運行?
  5. 並行處理是指利用我自己機器的不同核心還是利用其他機器的資源?有沒有辦法可以選擇任何選項,以及如何做到這一點?
+1

你有3個循環開始(一個'parfor'和2'''),但是4''結束'。這是錯誤告訴你的問題。另請閱讀[this](http://au.mathworks.com/help/distcomp/introduction-to-parfor.html),您應該嘗試瞭解您的代碼在做什麼。 – David

+0

請參閱高亮顯示的鏈接,在給出的示例中還有一個額外的結尾 – roni

回答

1

matlabpool未打開需要關閉的語句end。在關聯的問題中,結束語是關閉spmd聲明。

聲明matlabpool open local 2的意思是:

matlabpool打開或關閉MATLAB並行處理的工作進程池。

open告訴matlab運行這些工作。 (這是默認)

local告訴MATLAB打開本地計算機上的這些工人(這是默認)

2告訴MATLAB運行2名這些工人(默認爲CPU的數量)

你可以在沒有任何參數的情況下進行matlabpool。

爲了配置本地配置文件轉到matlab主頁選項卡,並選擇並行菜單下的'管理羣集'。

另外,出於某種奇怪的原因,當parfor不在最內層循環中時,matlab不能拆分工作器之間的數組。改變內部爲parfor,它會工作。

+0

感謝您的回覆。我建議刪除最後的「結束」。現在我收到一個錯誤:parfor中的變量arr_mat無法分類。這是爲什麼 ?請建議修復 – roni

+0

添加解決方案,請參閱編輯答案。 –