并行处理查询

时间:2015-05-29 04:50:32

标签: matlab parallel-processing

我在matlab编写了一个程序,我的算法取决于几个参数,让我们用a=1:10b=1:10说a和b我想找到a和{{1}的值这给了我最好的结果。

我的主要代码如下:

b

该程序运行但计算量非常大。我想知道是否有任何matlab内置并行处理工具箱,在这种情况下对我有帮助。我正在思考这些问题:

将我的主程序划分为

部分:

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

并行运行代码。我的系统配置是:Intel Core i7-3770 @ 3.40 GHz,内存为32.0 GB。我安装了MATLAB 2013b。

我已经咨询了这个question,并试图以这种格式编写自己的代码:

    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

此代码引发错误:“非法使用保留关键字”end“。” 我的疑问:

  1. 请告诉我哪里出错了。
  2. 我试图在内循环中引入parfor,但是它会引发错误吗?
  3. matlabpool open local 2的含义是什么意思?
  4. 我可以并行使用多少个线程来进行系统配置?我怎样才能检查这些限制并最佳地充分利用它们?
  5. 并行处理是指利用我自己机器的不同内核还是利用其他机器的资源?有没有办法可以选择任何一个选项,以及如何做到这一点?

1 个答案:

答案 0 :(得分:1)

matlabpool不会打开需要结束end的语句。在链接的问题中,结束了spmd语句。

陈述matlabpool open local 2的含义是:

matlabpool打开或关闭一个matlab并行处理工作进程池。

open告诉matlab运行这些工作人员。 (这是默认值)

local告诉matlab在本地计算机上打开这些工作程序(这是默认设置)

2告诉matlab运行2个这样的工人(默认是cpus的数量)

你可以在没有任何参数的情况下进行matlabpool。

要配置本地配置文件,请转到matlab主页选项卡,然后在并行菜单下选择“管理群集”。

另外,由于一些奇怪的原因,当parfor不在最内层循环中时,matlab无法在工作符之间拆分数组。将内心改为parfor,它会起作用。