мой код внутри цикла parfor становится все длиннее и длиннее, и я хотел бы разделить его. Сохранение частей кода в разных файлах сценариев кажется логичным и очень привлекательным, и, поскольку это ничего не меняет, кроме места сохранения кода, кажется, что это должно работать. Но это не так.
Я получаю обычное сообщение "Ошибка нарушения прозрачности".
Проблема кажется типичной, но я нигде не нашел этот вопрос или ответ на него.
Ниже приведен небольшой рабочий пример.
(Да, это можно сделать как функцию. Но в случае большого количества входных и выходных переменных это становится действительно уродливым и, вероятно, медленнее из-за передачи аргументов)
C = NaN(10,1); %Result vector
parfor loop = 1:10
a = 1;
b = 2;
MFile_Test %Run the m-file which contains only one line:
% c = a + b;
C(loop)=c;
end
MFile_Test — это скрипт, содержащий только строку one line c = a + b.
Я начинаю понимать, почему параллельные вычисления имеют здесь проблему, но не то, как ее решить. Поскольку это было бы возможно без каких-либо проблем, если бы у меня была строка c = a + b внутри файла parfor, я не могу поверить, что нет простого способа решить эту проблему (например, в худшем случае что-то вроде сказать Matlab загрузить текст из другого файл и запустить его как код здесь и сейчас).
Если есть альтернативные способы структурировать мой код без использования файлов скриптов (и, если возможно, без использования одних только функций ;)) Буду признателен и за такие комментарии, конечно.
Большое спасибо, Даниэль
parfor
потребуется ссылка на каждую используемую переменную. Если вы вызываете скрипт, эта ссылка теряется. Короче говоря, ваш сценарий больше не прозрачен. См. это и это. Если ваша проблема в том, что код становится уродливым из-за количества входных и выходных переменных, вы можете использоватьstructures
илиcells
. - person Autonomous   schedule 14.05.2015