MATLAB Release14 with SP3安装在不同版本linux内核上对SPM5的影响

MATLAB Release14 with SP3安装在不同版本linux内核上对SPM5的影响

昨天证实了一件事情,因为前段时间测试SPM5的新功能和分析性能,当我使用SPM开发中心提供的face_rep数据集进行测试时,出现了很有意思的事情:每次到了categorical估计的时候,总会在ReML迭代估计时出现如下错误:

Temporal non-sphericity (over voxels)
   :             ...REML estimation
  ReML Block                  - 1
  ReML Iteration              : 1                            ...NaN
Warning: Matrix is close to singular or badly scaled.
         Results may be inaccurate. RCOND = -1.000000e+00.
> In
spm_reml at 90
  In spm_spm at 855
  In spm_config_fmri_est>run_est at 382
  In spm_jobman>run_struct1 at 1384
  In spm_jobman>run_struct1 at 1392
  In spm_jobman>run_struct1 at 1392
  In spm_jobman>run_struct at 1351
???
Error using ==> svd
NaN or Inf prevents convergence.

这随后导致我开始了长达一个月的诊断过程。
我的基本运行环境

操作系统:RedHat9.0

系统硬件:奔腾4Xeon处理器4个、6GB内存

MATLAB版本:Release 14 with SP3

SPM版本:spm5 with Updates_456

初步诊断结果
第一反应就是只取少量数据在windows平台下看看是否错误会重现,结果在我的桌面机(WinXP/MATLAB7.1)上顺利完成分析,从而结论就是:linux版本的MATLAB有问题。随后,查阅SPM的mailist,发现三月份有人报告了类似的问题,但是后面给出的解答都是不能解决我的问题,但是到那时我还是一直认为是能够通过SPM的下一周期updates解决这个问题。

最终诊断结论

前天的中午,收到SPM的消息说刚刚发布新的升级程序包Updates573,满怀欣喜的下载升级了服务器上的SPM5,重新执行估计任务,错误依旧。到这时,我终于对我使用的linux系统有了些怀疑,出发点很简单:我的linux内核和GLIBC都比较老了,也一直没保持更新,这可能会和去年刚刚出现的MATLAB Release14会有冲突,或者说系统对于某些MATLAB新特性不能够很好支持,最直接的一个原因就是gcc编译器和系统内核版本,因为SPM中的mex文件就是利用某个C/C++编译器在linux下编译而成的,所以我登陆MATLAB的动态链接函数的编译器需求和内核需求信息网页,证实了确实有这些限制。于是,将数据和SPM5转移到另外一台安装RedHat Anvanced Server4.0的服务器,同样进行估计,结果顺利通过。

结论

不要把MATLAB Release14装在内核或者glibc版本太低的操作系统,要不然,就等着痛苦了。耗时一个月我解决了这个问题。
牛人,太专业了。