首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab中的Parfor

Matlab中的Parfor
EN

Stack Overflow用户
提问于 2013-04-19 17:12:16
回答 2查看 1.2K关注 0票数 1

我尝试将此循环作为parfor循环运行:

代码语言:javascript
复制
correlations = zeros(1,N);   
parfor i = 1:(size(timestamps,1)-1)
    j = i+1;
    dts = timestamps(j) - timestamps(i);
    while (dts < T) && (j <= size(timestamps,1))
        if dts == 0 && detectors(i) ~= detectors(j)
            correlations(1) = correlations(1) + 2;
        elseif detectors(i) ~= detectors(j)
            dts = floor(dts/binning)+1;
            correlations(dts) = correlations(dts) + 1;
        end
        j = j + 1;
        if j <= size(timestamps,1)
            dts = timestamps(j) - timestamps(i);
        end
    end
end

Matlab给出了以下错误:

代码语言:javascript
复制
Error: File: correlate_xcorr.m Line: 18 Column: 17
The variable correlations in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".

第18行如下:

代码语言:javascript
复制
correlations(1) = correlations(1) + 2;

我不明白为什么这是不可能的。相关性的最终值不取决于循环的执行顺序,而只取决于dts和检测器。我在文档中找到了类似的例子,它们工作得很好。

为什么Matlab不能执行这段代码,我如何修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-20 18:29:55

我找到了下面的解决方案,它似乎起作用了。这个程序看起来有点不同,但它的形状是一样的。这样,Matlab被迫认为x/相关性是一个约简变量。

代码语言:javascript
复制
X = zeros(1,5);
parfor i= 1:1000
    a = zeros(1,5);
    dts = randi(10)-1;
    if dts == 0
        a(1) = (a(1) + 2);
    elseif dts <= 5
        a(dts) = a(dts) +1;
    end
    X = X + a;
end
票数 2
EN

Stack Overflow用户

发布于 2013-04-19 20:33:19

MATLAB无法确定您的循环是否与顺序无关,因为您访问PARFOR循环的多次迭代的相关性(1)的方式不同。看起来这个值在某种程度上是“特殊的”,它应该可以用来做一个“缩减”变量,比如用correlations_1或者其他的东西替换correlations(1)

您将遇到的下一个问题是,您没有正确地“分割”correlations的其余部分。为了让MATLAB分析PARFOR循环,它需要能够分辨出每次循环迭代仅写入其输出变量的“切片”。实际上,这意味着您必须使用循环索引来索引输出。

有关PARFOR变量分类的更多信息,请访问:http://www.mathworks.com/help/distcomp/advanced-topics.html#bq_of7_-1

编辑:

如果您希望correlations严格充当缩减变量,就像我相信您在注释中所暗示的那样,您需要给PARFOR一个您想要的线索:特别是,您需要在每次需要时添加到整个变量中。换句话说,更像这样的东西:

代码语言:javascript
复制
parfor ...
    dummyVec = zeros(1, N);
    dummyVec(elementToIncrement) = 1;
    correlations = correlations + dummyVec;
end

我同意这是不明显的。有关详细信息,请参阅http://blogs.mathworks.com/cleve/2012/11/26/magic-squares-meet-supercomputing/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16101142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档