matlab中的end语句花费50%的时间来使用示例代码

时间:2017-01-17 14:32:46

标签: matlab performance for-loop

网上发布了一些关于“终结”问题的文章。 for循环语句需要很长时间。

我的代码中存在同样的问题。这就是为什么我用两个简单的函数(' start'和#39; callMe')编写这个示例代码,以使问题清晰明白。

我有两个案例来检查时间长度' callMe'需要:

案例1:功能' callMe'必须计算' testOnly = testOnly + i' 10000000次迭代。     ' testOnly = testOnly + i'代码行需要48.3%的总时间     '结束' for循环语句需要49.7%

案例2:功能' callMe'显示字符串'想知道'在命令窗口中。     线路'对于i = 1:1000'需要99.6%的总时间,并且结束时间为'声明不需要时间!

当然我知道10000000计算比显示字符串花费更少的时间。但是,我不是在谈论荒谬的时代。我想知道为什么'结束' Case1中的陈述占49.7%。它与“#”的简单数学计算有关。 testOnly = testOnly + i'。 我已经检查了“callMe”的消费时间。还有tic / toc在' start'功能和那些时间对应于' callMe'。

中的总时间

在我的实际应用程序中,我使用了更加困难的代码。此代码对时间敏感,因为我尝试获得近乎实时的解决方案。我们正在讨论Parallel Toolbox,CUDA,indisde GPU命令等来加速代码,但另一方面,这样简单的For / end time问题具有所有优势。

那么如何避免这种一般性的结束'问题

% Case 1:---------------------
        function start()
        tic
          for i=1:10000
            callMe(1);
          end
        toc
        end

        function callMe(testOnly)
          for i=1:1000    
            testOnly = testOnly + i;  % Case 1
            %disp('wondering')        % Case 2
          end 

          %disp(testOnly)
        end

% Case 2:------------------
        function start()
        tic
          for i=1:10000
            callMe(1);
          end
        toc
        end

    function callMe(testOnly)
      for i=1:1000    
        %testOnly = testOnly + i;  % Case 1
        disp('wondering')              % Case 2
      end 

      %disp(testOnly)
    end

Case 1 Case 2

0 个答案:

没有答案