【问题标题】:Forced assigning parfor in MATLAB在 MATLAB 中强制分配 parfor
【发布时间】:2016-02-12 01:30:48
【问题描述】:

是否可以在 MATLAB 中强制 parfor 迭代次数?例如,如果循环是 i=1:1000,那么是否可以按如下方式赋值:

i=1:250 ---> 核心 1

i=251:500 ---> 核心 2

i=501:750 ---> 核心 3

i=751:1000 ---> 核心 4

【问题讨论】:

  • 我不这么认为,但更重要的是:你为什么要这样做? MATLAB 非常擅长分配计算工作量。如果它在迭代随计算量变化的情况下使用非对称分布,我不会感到惊讶(尽管我从未检查过文档以确定是否确实如此)
  • 你不能分配给特定的核心,但如果你想让核心处理你的问题的 4 块,你可以做 parfor j=1:4;for i=(1+250*(j-1)):(250*j);... 这应该可以工作,但正如安德拉斯所说,我可以'不要想为什么这是个好主意。
  • 这可能看起来很幼稚,但很重要:是否可以保证在 j=1:4 的情况下,所有四种不同的 j 计算都将进入 4 个不同的核心?
  • 抱歉,换个说法:如何确保所有四个 j 迭代都转到 4 个不同的核心 - 更好的是,要知道哪个核心得到了哪个 j 值计算(例如核心 3 j=1;核心 1 有 j=2 等)。这是假设此时 parfor 不能强制进入 j=1-->core1、j==2-->core2 等。

标签: matlab parallel-processing


【解决方案1】:

你不能用parfor来做这件事,但你可以用spmdparfeval做一些基本相同的事情。

parfeval:

for fidx = 1:4
    range = (((fidx - 1)*250)+1):(fidx*250)
    f(fidx) = parfeval(@bodyFcn, 1, range);
end

spmd:

spmd
    for i = drange(1, 1000)
        ...
    end
end

有关 drange 的文档,请参阅 http://www.mathworks.com/help/distcomp/using-a-for-loop-over-a-distributed-range-for-drange.html

【讨论】:

  • 都试过了。但不能强制将 4 个代码块分配给四个单独的内核。
  • 我不明白 - 上面的代码将工作分成 4 份,以便不同的工人对身体进行操作。 (好吧,我想parfeval 版本不能保证不同的工作人员在不同的评估上进行操作,但spmd 版本可以)。当你尝试时会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
相关资源
最近更新 更多