Ошибка при использовании matlabpool — Неопределенная функция ‘distcomp.fileserializer’

#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. Вот шаги, которые я выполнил, чтобы устранить эту ошибку:

  1. Перейдите на следующий веб-сайт, который описывает исправление этой ошибки: http://www.mathworks.com/support/bugreports/919688

  2. Есть .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

  3. Откройте MATLAB и в командной строке введите следующее: cd (matlabroot) и нажмите ENTER или RETURN.

  4. В графическом интерфейсе, где вы видите подокно текущей папки, щелкните правой кнопкой мыши в любом месте в этой области, затем нажмите Открыть текущую папку в Finder. Откроется, где MATLAB находится в вашей системе в Finder. В моем случае мой MATLAB находится здесь: /Applications/MATLAB_R2013a.app

  5. Теперь закройте MATLAB.

  6. Распакуйте содержимое .zip файла, который был загружен. Вы увидите, что в распакованном архиве есть три папки: bugreport , java и toolbox . Вам просто нужно беспокоиться о java и toolbox .

  7. Что вам нужно сделать, это просто заменить содержимое java и toolbox папок с разархивированным архивом на те же java и toolbox же папки, найденные в MATLAB с шага # 4. Прежде чем вы это сделаете, перейдите к шагу # 8.

  8. Настоятельно рекомендуется сохранить копию того, что вы собираетесь перезаписать, прежде чем делать это. Я просто переименовал файлы и папки, которые собирался перезаписать, с помощью суффикса old , чтобы при необходимости вернуться к ним. Для вашего рассмотрения, это файлы и папки, которые необходимо заменить с помощью .zip файла:

    • java/jarext/distcomp/jiini2/
    • toolbox/distcomp/private/initcommon.m
  9. Теперь, когда вы создали резервные копии этих файлов, возьмите содержимое .zip файла и перезапишите их в вашей программе MATLAB в папке, которую вы нашли с помощью шага # 4.

  10. Перезапустите MATLAB. Это должно исправить эту ошибку, и у меня это сработало.

Комментарии:

1. Я использую MATLAB 8.3.0.532 (R2014a). Для моей версии нет доступного zip-файла, и я получаю ту же Undefined function 'distcomp.fileserializer ошибку

2. @Phibins Не уверен. Извините. Обратитесь в MathWorks.