Matlab中的并行处理

Matlab中的并行处理,matlab,parallel-processing,distributed,Matlab,Parallel Processing,Distributed,我创建了两个函数:生成数据和处理数据。数据处理非常耗时,所以我想在并行线程中处理它们。但是我和他们有一些问题。首先,这是我的程序: result = zeros(1, 10); matlabpool open local 2 spmd for a = 1:5 data = generate_data(); display(sprintf('Received data on CPU%d: %d', labindex, data)); res

我创建了两个函数:生成数据和处理数据。数据处理非常耗时,所以我想在并行线程中处理它们。但是我和他们有一些问题。首先,这是我的程序:

result = zeros(1, 10);

matlabpool open local 2
spmd
    for a = 1:5
        data = generate_data();
        display(sprintf('Received data on CPU%d: %d', labindex, data));
        result(end + 1) = process_data(data);
    end
    display(sprintf('All done on CPU%d', labindex));
end
matlabpool close
以及它返回的内容的日志:

Starting matlabpool using the 'local' profile ... connected to 2 workers.
Lab 1: 
  Received data on CPU1: 100
Lab 2: 
  Received data on CPU2: 100
Lab 1: 
  Received data on CPU1: 101
  Received data on CPU1: 102
  Received data on CPU1: 103
  Received data on CPU1: 104
  All done on CPU1
Lab 2: 
  Received data on CPU2: 101
  Received data on CPU2: 102
  Received data on CPU2: 103
  Received data on CPU2: 104
  All done on CPU2
Sending a stop signal to all the workers ... stopped.
有一个问题,我有:

  • 它通过生成_数据返回的值与 两条线。我应该与众不同。线程应该处理不同的 数据,而不是相同的数据两次。我无法生成整个数据 立即设置并使用getLocalPart

  • 可变结果不是双精度的1x10矩阵,而是双精度的1x2矩阵 复合材料。我读过关于(联合)分布式阵列的文章,但没有帮助 我我应该如何接收1x10双工矩阵

  • 我应该对CPU1做什么处理CPU2的数据,当完成 处理自己的数据?一般来说,我不知道该怎么做

  • 可以删除“实验室1:”和“实验室2:”?他们在捣乱 我的日志:)

  • 考虑到上述因素,日志(对于较大的数据集)应如下所示:

    Starting matlabpool using the 'local' profile ... connected to 2 workers.
    Received data on CPU1: 100
    Received data on CPU2: 101
    Received data on CPU1: 102
    Received data on CPU1: 103
    Received data on CPU1: 104
    Received data on CPU1: 105
    Received data on CPU2: 106
    Received data on CPU1: 107
    Received data on CPU1: 108
    Received data on CPU2: 109
    All done on CPU1
    All done on CPU2
    Sending a stop signal to all the workers ... stopped.
    

    为什么不使用更简单的
    parfor
    ?目前,您正在每个worker上运行循环,我假设您希望并行运行循环的迭代

    nIter = 10;
    result = zeros(1, nIter);
    
    matlabpool open local 2
    
        parfor a = 1:nIter
            data = generate_data();
            fprintf('%s: processing set %i/%i\n',datestr(now),a,nIter)
            result(a) = process_data(data);
        end
    end
    matlabpool close
    

    spmd。。端结构意味着在多个线程上并行运行一个块。在他的代码中,for循环不是运行了两次吗?Parfor只是打破了for循环,对吗?