【问题标题】:improve simulation in terms of speed of execution在执行速度方面改进模拟
【发布时间】:2012-10-15 04:29:16
【问题描述】:

我在 matlab 中创建了一个模拟。这是一个脚本文件,其中我有一个 main 循环,在其中,我编写了一些代码和函数。我在开发过程中使用fprintf 函数来调试我的代码,以检查一切是否顺利。当我运行模拟时,我不会执行 fprintf,因为它需要很多时间来执行 fprintf,因为我的 for 循环执行 1E6。我会想办法决定什么时候执行 fprintf 什么时候不执行。

【问题讨论】:

    标签: matlab printf


    【解决方案1】:

    两种选择:

    1) 例如包含一些名为“debug”的变量,并将每个 fprintf() 放入:

    if (debug==1):
        fprintf(blah blah)
    

    那么您只需要在调试时更改程序开头的调试变量,或者您甚至可以将其作为用户的输入(一个标志)。

    2) 将 fprintf 包装在一个函数中,然后只使用该函数,例如:

    function myfprintf(x)
       global debug
    
       if (debug==1):
         fprintf(x)
    

    【讨论】:

    • 我想过这种方法,但根据分析器,我的模拟花了很多时间检查 if 子句
    • @Mazzy 你确定你正确解释了分析器结果吗?执行 if() 相对较快,如果您的其余代码高度优化,它通常只会成为瓶颈。
    • @Mazzy 您使用的是什么版本的 MATLAB?令我感到惊讶的是,具有始终评估为 false 的条件的 if 语句将成为瓶颈,因为这似乎正好在 JIT 加速器的小巷中。我想知道探查器是否真的混淆了结果。如果您只是使用tictoc 对代码的整体执行进行计时,那么在您的 fprintf(其中 debug=0)周围带有 if(debug==1) 的代码和仅将您的 fprintf 注释掉的代码(即就运行时而言的最佳情况)
    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多