2017-01-17 10 views
-3

Я использую parfor для параллельных вычислений в Matlab. Я не знаком с этой командой. Если это возможно, посмотрите мой код ниже и скажите, могу ли я написать его с помощью parfor. Ошибка: Петля parfor не может быть запущена из-за использования переменной pyra.Использование parfor Loops on matlab

parfor i = 1:inter 
    scaled = resize(im, 1/sc^(i-1)); 
    pyra.feat{i} = descripteurs(scaled,class); 

    pyra.scale(i) = 1/sc^(i-1); 

    for j = i+inter:inter:max_scale 
    scaled = reduce(scaled); 
    pyra.feat{j} = descripteurs(scaled,class); 
    pyra.scale(j) = 0.6 * pyra.scale(j-inter); 
    end 
end 
+1

Вы должны начать с собственной Mathworks [обширной документации] (https://www.mathworks.com/help/distcomp/variables-in-parfor-loops.html) по использованию переменных в цикле 'parfor' – Suever

+0

I попытался продолжить изменения, как указано в документации, но у меня все еще есть проблемы. – dido

+0

Пожалуйста, как я могу приступить к решению этой проблемы. – dido

ответ

0

Вопрос заключается в том, что ваш код не параллелизуемого, поскольку каждая итерация цикла parfor зависит от других итераций цикла.

В частности, вы пытаетесь получить доступ к значениям pyra.scale из внутреннего цикла, которые были вычислены при предыдущих итерациях через внешний цикл. Из-за этого выполнение каждой итерации цикла parfor зависит от предыдущей итерации, и поэтому две итерации не могут выполняться параллельно (в то же время).

Подробнее об использовании переменных в parfor циклах в the documentation.