未定义的函数'distcomp.fileserializer'
我正在尝试使用MATLAB中的Parallel Computing Toolbox来帮助加速我正在执行的一些密集计算。 在我可以使用像parfor
构造之前,我需要通过matlabpool
创建一个工作者池。 首先,我只想使用默认/ local
配置文件,只需调用matlabpool
本身而不需要额外的参数。 但是,当我这样做时,我收到以下错误消息:
>> matlabpool
Starting matlabpool using the 'local' profile ...
Error using matlabpool (line 134)
Undefined function 'distcomp.fileserializer' for input arguments of type
'distcomp.filestorage'.
我在Mac OS X 10.9.3(Mavericks)上运行MATLAB R2013a。 有没有人遇到过这个错误? 这是如何解决的?
在上面的评论中感谢@RTL,他发现这是在将Java版本更新到1.6.0_39或更高版本后引入的一个错误。 这个线程可以在这里找到。 使用任何版本的Java(至少此版本或更新版本)运行任何并行计算工具箱代码都可能导致引发NullPointerException
。 distcomp.fileserializer
错误是这里的错误之一。
因此,在上面引用的线程中发布了一个错误修复,其中需要更新MATLAB中的几个文件。 以下是我遵循的解决此错误的步骤:
转到描述此错误修复程序的以下网站:http://www.mathworks.com/support/bugreports/919688
有可用的.zip
文件,其中包含您需要在MATLAB中覆盖的必要文件。 每种.zip
文件都与您使用的MATLAB版本有关。 确保你下载了与你的MATLAB版本相对应的正确的 .zip
文件。 在上面的线程中有一个海报,我咨询过,声称这些文件打破了他/她的MATLAB,所以他们需要重新安装。 这并没有发生在我身上。
在运行MATLAB R2013a时,这是我下载的.zip
文件的链接:http://www.mathworks.com/support/bugreports/license/accept_license/5383?fname=attachment_919688_12b_13a_2013-03-08.zip&geck_id= 919688
打开MATLAB,并在命令提示符下键入以下内容: cd (matlabroot)
然后按ENTER或RETURN。
在您看到当前文件夹子窗口的GUI中,右键单击该区域中的任意位置,然后单击Finder中的打开当前文件夹。 这将在MATLAB在Finder系统中的位置开启。 就我而言,我的MATLAB可以在这里找到: /Applications/MATLAB_R2013a.app
现在,关闭MATLAB 。
解压下载的.zip
文件的内容。 您将看到解压缩归档文件中有三个文件夹: bugreport
, java
和toolbox
。 你只需要担心java
和toolbox
。
你需要做的只是用解压后的压缩文件替换java
和toolbox
文件夹的内容,使用步骤#4中的MATLAB中找到的相同的java
和toolbox
文件夹。 在这之前,请转到步骤#8。
强烈建议您在执行此操作之前保存要覆盖的内容的副本。 我只是简单地重命名了我将要用old
后缀覆盖的文件和文件夹,以便在必要时恢复它们。 为了您的考虑,这些是需要使用.zip
文件替换的文件和文件夹:
java/jarext/distcomp/jiini2/
toolbox/distcomp/private/initcommon.m
现在您已经备份了这些文件,取出.zip
文件的内容并覆盖您使用步骤#4找到的文件夹中的MATLAB程序中的内容。
重新启动MATLAB。 这应该解决这个错误,并且它对我有用。