2015-05-29 120 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

添加解决方案,请参阅编辑答案。 –