我正在尝试使用MATLAB中的并行计算工具箱来帮助加快我正在执行的一些密集计算。在我使用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。有没有人遇到过这个错误?这是如何解决的?
答案 0 :(得分:4)
感谢@RTL在上面的评论中,他发现这是在将Java版本更新到1.6.0_39或更高版本后引入的错误。这个can be found here的主题。使用至少此版本或更高版本的任何Java版本运行任何Parallel Computing Toolbox代码可能会导致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
文件夹的内容,并找到相同的java
和toolbox
个文件夹在步骤#4的MATLAB上。在此之前,请转到步骤#8。
强烈建议您在执行此操作之前保存要覆盖的内容的副本。我只是重命名了我要用后缀old
覆盖的文件和文件夹,以便我可以在必要时恢复它们。为了您的考虑,这些是需要使用.zip
文件替换的文件和文件夹:
java/jarext/distcomp/jiini2/
toolbox/distcomp/private/initcommon.m
现在您已备份这些文件,请获取.zip
文件的内容,并在您使用步骤4找到的文件夹中覆盖MATLAB程序中的文件。
重启MATLAB。这应该可以解决这个错误,它对我有用。