【发布时间】:2014-03-28 15:41:21
【问题描述】:
我最近在 MatLab 中编写了一个程序,该程序严重依赖于 MatLab 的“importdata”函数和优化工具箱中的“lsqcurvefit”函数。在 Windows 中使用 MatLab R2011b 执行此代码大约需要 15 秒。当我将代码转移到 Linux (CentOS) 机器上时,大约需要 30 分钟。
使用 Profile 工具,我确定大部分额外计算时间都花在了“importdata”函数和“lsqcurvefit”函数上。我清除了两个环境中的所有变量,并使用“importdata”在两个环境中导入了相同的数据文件。在 Linux 中,这需要约 5 秒,而在 Windows 中,这需要约 0.1 秒。
有没有办法解决这个问题?代码在 Linux 中快速运行是绝对必要的。 Linux机器的内存和处理速度都远超Windows机器。在做了一些阅读之后,我尝试增加 Java 堆内存,但这没有效果。
【问题讨论】:
-
您是在同一台机器上运行双启动,还是在两台不同的计算机上运行?我遇到了类似的情况,我们公司集群上的代码运行速度慢了 10-20 倍,结果证明是因为集群是基于AMD processors 构建的。尝试从每个平台的命令行运行
bench。 -
两台机器上的驱动器设置是否相同?您是从两者上的本地驱动器读取文件,还是通过 NFS 或 SMB 的网络驱动器读取文件?我在旧版本的 Matlab 上遇到了几个病态案例,其中在网络驱动器上进行保存/加载很粗糙(通过在本地文件系统上制作临时副本来解决)或者从文件管理器导出的 NFS 存在一些病态行为,主要是CIFS,或病毒扫描程序与网络文件系统等的交互等等。你能给我们一些关于两台机器设置的更多细节吗?
-
craigim: 我从两台机器的命令行运行“bench”:Linux 机器在除 3D 之外的所有类别中都优于 Windows 机器。 Andrew: 我相信数据存储在网络驱动器上,但计算机运行的是最新版本的 MatLab。 Windows 机器是个人计算机,而 Linux 机器与我实验室的服务器联网。我会按照您的建议尝试在本地存储输出,然后回复您。
-
显然用 'dlmread' 替换 'importdata' 解决了这个问题。不知道为什么,但“dlmread”在 Linux 上要快得多。感谢您的帮助!