2015-05-28 1 views
1

У меня есть следующий короткий код Matlab:Parfor внутри для цикла

res = cell(10*100,1); 
for i = 1:10 
    parfor j = 1:100 
     idx = ((i-1) * 100) + j; 
     res(idx) = 5; 
    end 
end 

я получаю сообщение об ошибке для res(idx) = 5;. Если я не использую переменную i в цикле parfor, она работает, но я должен отслеживать i.

Как я могу это сделать?

Редактировать: Я решил.

res = zeros(10*100,1); 
for i = 1:10 
    temp = zeros(100,1); 
    parfor j = 1:100 
     a = i; 
     temp(j) = data((i-1) * 100) + j); 
    end 
    res((i-1)*100+1:i*100) = temp; 
end 
+0

Почему бы просто не сделать это с помощью одного цикла 'parfor' от' 1: (10 * 100) '? – Raab70

+0

Это была бы возможность, но я запустил ее в кластере, и мне, скорее всего, не позволено назначать столько параллельных циклов. Нет ли возможности присвоить значение переменной i внутри петли parfor? – machinery

+1

Вы читаете [это] (https://www.mathworks.com/help/distcomp/nesting-and-flow-in-parfor-loops.html)? – Raab70

ответ

1

бы

spmd 
res = zeros(10*100,1); 
for i = 1:10 
    for j = 1:100 
     idx = ((i-1) * 100) + j; 
     res(idx) = 5; 
    end 
end 
end 

решить вашу проблему?

+0

Вы можете, конечно, перемещать spmd внутри одного цикла. –

 Смежные вопросы

  • Нет связанных вопросов^_^