gpt4 book ai didi

MATLAB 在函数的最后一行之后需要很长时间

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:47 24 4
gpt4 key购买 nike

我有一个函数需要很长时间才能运行。当我分析它时,我发现超过一半的时间(50 秒中的 26 秒)没有被逐行计入时间分割,而且我可以表明时间是在函数完成运行之后但返回控制之前花费的通过以下方法:

ts1 = tic;
disp ('calling function');
functionCall(args);
disp (['control returned to caller - ', num2str(toc(ts1))]);

我调用的函数第一行是ts2 = tic,最后一行是

disp (['last line of function- ', num2str(toc(ts2))]);

结果是

calling function

last line of function - 24.0043

control returned to caller - 49.857

在互联网上四处闲逛,我认为这是 MATLAB 管理内存方式的一个症状。它在函数返回时释放,有时这需要很长时间。该函数确实分配了一些大(约 100 万个元素)数组。它也适用于句柄,但不会显式创建任何新句柄对象或存储句柄。我的问题是:

  1. 这肯定是内存管理问题吗?
  2. 是否有任何系统的方法来诊断导致此功能出现问题的原因,而不是其他快速返回的方法?
  3. 是否有减少 MATLAB 花在函数退出清理上的时间的一般技巧?

最佳答案

你说的对,好像是花在garbage collection上的时间.恐怕这是一个基本的 MATLAB 缺陷,多年来一直为人所知,但即使在最新的 MATLAB 版本 2010b 中,MathWorks 也没有解决它。

您可以尝试在离开函数之前手动将变量设置为 [] - 即手动进行垃圾收集。这种技术也有助于 against memory以前的 MATLAB 版本中存在漏洞。现在 MATLAB 将不会在 end 上花费时间,而是在 myVar=[];

上花费时间

您可以在没有任何类型引用的情况下缓解工作问题 - 匿名函数、嵌套函数、处理类,不使用 cellfunarrayfun

如果您已达到 MATLAB 的“性能障碍”,那么也许您应该简单地更改环境。无论如何,我认为从今天开始在 MATLAB 中创建一个新项目没有任何意义,除非您使用的是 SIMULINK。 Python 非常适合技术计算,使用 C#,您还可以使用 free libraries 完成 MATLAB 可以做的许多事情。 .与 MATLAB 不同,两者都是真正的编程语言并且是免费的。

关于MATLAB 在函数的最后一行之后需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4268113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com