matlab - Matlab 中的并行处理

标签 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));
        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.

有问题,我有:

  1. generate_data 返回的值与 两个线程。我应该是不同的。线程应该处理不同 数据,而不是两次相同的数据。我无法生成整个数据 立即设置并使用 getLocalPart。

  2. 变量结果不是 1x10 double 矩阵,而是 1x2 矩阵 复合 Material 。我阅读了有关(共同)分布式数组的信息,但没有帮助 我。我应该怎么做才能收到 double 的 1x10 矩阵?

  3. 当 CPU1 处理 CPU2 的数据时,我应该做什么 处理自己的数据?通常我不知道该怎么做。

  4. 可以删除“实验室 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?目前您正在每个工作人员上运行循环,我假设您想要并行运行循环的迭代。

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

关于matlab - Matlab 中的并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14460409/

相关文章:

matlab - 如何在 MATLAB 中的同一个图中同时显示 RGB 和灰度图像

user-interface - Matlab:类似于 "relative"位置与 uicontrol/axis;调整大小时保持固定边距

c++ - Intel Advisor 赋予的这些功能是什么?

java - 使用Java代码进行Jmeter分布式测试

java - Hadoop分布式缓存

java - 使用 RMI 进行分布式 Java 通信的库

matlab - 如何用按钮停止声音?

matlab - 图像过滤

c - 如何在没有任何非标准库的情况下在 C 中进行多处理

java - 餐饮哲学家 java