#matlab
#matlab
Вопрос:
Я пытаюсь использовать Parallel Computing Toolbox в MATLAB, чтобы ускорить некоторые интенсивные вычисления, которые я выполняю. Прежде чем я смогу использовать конструкции, подобные parfor
, мне нужно создать пул рабочих элементов через matlabpool
. Для начала я просто хочу использовать / local
profile по умолчанию, просто вызвав matlabpool
сам по себе без дополнительных параметров. Однако, когда я это делаю, я получаю следующее сообщение об ошибке:
>> matlabpool
Starting matlabpool using the 'local' profile ...
Error using matlabpool (line 134)
Undefined function 'distcomp.fileserializer' for input arguments of type
'distcomp.filestorage'.
Я запускаю MATLAB R2013a в Mac OS X 10.9.3 (Mavericks). Кто-нибудь сталкивался с этой ошибкой? Как это исправить?
Комментарии:
1. Сам этого не видел… для чего вывод
version -java
? если это 1.6.0_39 (или более поздняя версия), то такая же ошибка генерируется в этом потоке с исправлением здесь . предупреждение есть сообщения о том, что это исправление нарушает 2013a , но в потоке предлагается другое обходное решение…2. @RTL — Моя версия Java 1.7.0_55. Я видел этот поток, но подумал, что это из-за другой ошибки. Прямо сейчас веб-сайт не работает, поэтому я подожду, пока он снова заработает. Если это решит мою проблему, пожалуйста, сделайте это ответом, и я приму его.
3. Хорошо, у меня получилось. Большое вам спасибо. Я напишу инструкции о том, что я сделал со своей стороны. Исправление не нарушило работу моей MATLAB, и я подозреваю, что причина, по которой оно нарушилось для пользователя, заключалась в том, что они не использовали соответствующий
.zip
файл исправления, относящийся к его / ее версии MATLAB. Я напишу ответ. Спасибо!
Ответ №1:
Благодаря @RTL в его комментариях выше, он обнаружил, что это ошибка, которая была введена после обновления вашей версии Java до 1.6.0_39 или более поздней. Поток для этого можно найти здесь . Запуск любого кода Parallel Computing Toolbox с использованием любой версии Java, которая является по крайней мере этой или более поздней, может вызвать NullPointerException
выдачу. distcomp.fileserializer
Ошибка является одной из ошибок здесь.
Таким образом, в теме, на которую я ссылался выше, было опубликовано исправление ошибки, в котором необходимо обновить несколько файлов в MATLAB. Вот шаги, которые я выполнил, чтобы устранить эту ошибку:
-
Перейдите на следующий веб-сайт, который описывает исправление этой ошибки: http://www.mathworks.com/support/bugreports/919688
-
Есть
.zip
доступные файлы, которые содержат необходимые файлы, которые вам нужно перезаписать в MATLAB. Каждый тип.zip
файла относится к используемой вами версии MATLAB. Убедитесь, что вы загрузили правильный.zip
файл, соответствующий вашей версии MATLAB. В приведенной выше теме, с которой я консультировался, есть сообщение, в котором утверждается, что эти файлы сломали его / ее MATLAB и поэтому их необходимо переустановить. Со мной этого не произошло.Поскольку я запускаю MATLAB R2013a, это ссылка на
.zip
файл, который я загрузил: http://www.mathworks.com/support/bugreports/license/accept_license/5383?fname=attachment_919688_12b_13a_2013-03-08.zipamp;geck_id=919688 -
Откройте MATLAB и в командной строке введите следующее:
cd (matlabroot)
и нажмите ENTER или RETURN. -
В графическом интерфейсе, где вы видите подокно текущей папки, щелкните правой кнопкой мыши в любом месте в этой области, затем нажмите Открыть текущую папку в Finder. Откроется, где MATLAB находится в вашей системе в Finder. В моем случае мой MATLAB находится здесь:
/Applications/MATLAB_R2013a.app
-
Теперь закройте MATLAB.
-
Распакуйте содержимое
.zip
файла, который был загружен. Вы увидите, что в распакованном архиве есть три папки:bugreport
,java
иtoolbox
. Вам просто нужно беспокоиться оjava
иtoolbox
. -
Что вам нужно сделать, это просто заменить содержимое
java
иtoolbox
папок с разархивированным архивом на те жеjava
иtoolbox
же папки, найденные в MATLAB с шага # 4. Прежде чем вы это сделаете, перейдите к шагу # 8. -
Настоятельно рекомендуется сохранить копию того, что вы собираетесь перезаписать, прежде чем делать это. Я просто переименовал файлы и папки, которые собирался перезаписать, с помощью суффикса
old
, чтобы при необходимости вернуться к ним. Для вашего рассмотрения, это файлы и папки, которые необходимо заменить с помощью.zip
файла:java/jarext/distcomp/jiini2/
toolbox/distcomp/private/initcommon.m
-
Теперь, когда вы создали резервные копии этих файлов, возьмите содержимое
.zip
файла и перезапишите их в вашей программе MATLAB в папке, которую вы нашли с помощью шага # 4. -
Перезапустите MATLAB. Это должно исправить эту ошибку, и у меня это сработало.
Комментарии:
1. Я использую MATLAB 8.3.0.532 (R2014a). Для моей версии нет доступного zip-файла, и я получаю ту же
Undefined function 'distcomp.fileserializer
ошибку2. @Phibins Не уверен. Извините. Обратитесь в MathWorks.