MATLAB - codeHints占运行时间的99.9%(R2013a)

时间:2014-03-03 05:07:47

标签: matlab

我不确定发生了什么。我正在我的笔记本电脑上运行我的神经网络模拟,它上面有MATLAB R2013a。

代码在我的桌面上运行得很快(虽然R2012a),但在笔记本电脑上非常慢。我用性能和计时的东西来运行它,因为这看起来很不正常,这里是我花费大部分时间做某事的函数的截图:

The general statement about this function

I scrolled down to this line

这位于codeHints.m文件中,所以它不是我写的。有什么方法可以禁用它吗?我搜索了它,但也许我没有找到正确的东西......我找不到任何东西。我无法完成任何工作,因为它太慢了:(

会感激一些建议!

更新:我还试图在我的桌面上运行它(与笔记本电脑相同的MATLAB版本,也是8GB的RAM),我也遇到了同样的问题。我检查了资源监视器,看起来这个过程正在触发大量的内存故障(~40 /秒),即使我的RAM只有一半被使用了。

我在MATLAB中键入“memory”并获得以下信息:

最大可能阵列:11980 MB(1.256e + 10字节)*

可用于所有阵列的内存:11980 MB(1.256e + 10字节)*

MATLAB使用的内存:844 MB(8.849e + 08字节)

物理内存(RAM):8098 MB(8.491e + 09字节)

所以似乎应该有足够的空间。我将尝试整理一个示例文件。

更新#2:我在工作计算机上使用以下“内存”信息在2012a上运行了我的代码: 最大可能数组:10872 MB(1.140e + 10字节)*

可用于所有阵列的内存:10872 MB(1.140e + 10字节)*

MATLAB使用的内存:846 MB(8.874e + 08字节)

物理内存(RAM):8098 MB(8.491e + 09字节)

迭代次数超过上述次数(15000次而不是10000次)的运行完成得更快,并且没有多余的内存分配调用: Matlab 2012a runtime

所以在我看来这是一个专门针对2013a的问题。现在我将使用2012a(因为我需要这个完成),但如果有人知道如何处理2013a以停止对codeHints的调用,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

虽然这会在第一眼看到内存问题,但似乎你的测试使内存不足是不可能的。在这种情况下,我能想到的唯一合理的解释是,计算机实际上是在尝试做两件不同的事情,因此需要更多的时间。

一些可能性:

  1. 实际上并没有使用完全相同的输入
  2. 实际上并没有使用完全相同的功能
  3. 可以通过在代码中放置一些断点同时在2台计算机上运行并验证输入完全相同来检测第一个点。 (如果你有很多变量,请考虑使用visdiff)

    第二个几乎只能由过载的零引起。确保在此行停止并查看正在调用的函数。


    如果这两点都无法解决问题,请尝试尽可能减少代码,直到您只有一行或几行来创建差异。如果结果差异来自这一行,请尝试在两台计算机上使用正确大小输入的zeros函数,并使用timeit File Exchange Submission

    计算结果

    如果您发现在两台计算机上都使用内置功能,内存充足且性能差异仍然很大,那么可能是时候联系数学支持并听取他们对此有何看法。