Объяснение

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),
    конец
конец