parfor оператор позволяет только область значений увеличения порядковых чисел со значением шага 1.
Настройте свой код, можно следующим образом:
Если ваш код содержит оператор, такой как parfor 1:2:10, перепишите свой код так, чтобы интервалы шага 1 возвратили ожидаемые результаты.
Если ваш код содержит оператор, такой как parfor i = V, обеспечьте тот V твердость к непрерывной серии значений в векторном массиве и шаг между значениями равняются 1.
Например, примите, что ваш код похож на следующее, где <myArray> фактический массив, такой как [2, 6, 7]:
vectorValues = [1, 4, 9, 16, 25, 36, 49];
vectorSequence = <myArray>;
parfor ii = vectorSequence
val = vectorValues (ii);
sprintf ('индексируют = %d значение = %d\n', ii, val),
конец
Измените свой код можно следующим образом, в зависимости от ли vectorSequence массив разрежен. Следует иметь в виду, что MATLAB передает данные рабочим однажды на итерацию.
Если vectorSequence массив разрежен, используйте этот код, который приводит к меньшему количеству передач данных, чем оригинальный код, но несет расходы копирования данных в vectorValueSubset.
vectorValues = [1, 4, 9, 16, 25, 36, 49];
vectorSequence = [2, 6, 7];
vectorValueSubset = vectorValues (vectorSequence);
parfor jj = 1:length (vectorSequence)
val = vectorValueSubset (jj);
sprintf ('индексируют = %d значение = %d\n', vectorSequence (jj), val),
конец
Если vectorSequence массив не разрежен, используйте этот код, который приводит к большему количеству передач данных, чем оригинальный код, но не несет расходы копирования данных. Дополнительные передачи в вычислительном отношении легки.
vectorValues = [1, 4, 9, 16, 25, 36, 49];
vectorSequence = [2:3, 5:7];
parfor kk = min (vectorSequence): макс. (vectorSequence)
если (находят ( vectorSequence == kk)),
val = vectorValues (kk);
sprintf ('индексируют = %d значение = %d\n', kk, val),
конец
конец