【发布时间】:2012-10-15 04:29:16
【问题描述】:
我在 matlab 中创建了一个模拟。这是一个脚本文件,其中我有一个 main 循环,在其中,我编写了一些代码和函数。我在开发过程中使用fprintf 函数来调试我的代码,以检查一切是否顺利。当我运行模拟时,我不会执行 fprintf,因为它需要很多时间来执行 fprintf,因为我的 for 循环执行 1E6。我会想办法决定什么时候执行 fprintf 什么时候不执行。
【问题讨论】:
我在 matlab 中创建了一个模拟。这是一个脚本文件,其中我有一个 main 循环,在其中,我编写了一些代码和函数。我在开发过程中使用fprintf 函数来调试我的代码,以检查一切是否顺利。当我运行模拟时,我不会执行 fprintf,因为它需要很多时间来执行 fprintf,因为我的 for 循环执行 1E6。我会想办法决定什么时候执行 fprintf 什么时候不执行。
【问题讨论】:
两种选择:
1) 例如包含一些名为“debug”的变量,并将每个 fprintf() 放入:
if (debug==1):
fprintf(blah blah)
那么您只需要在调试时更改程序开头的调试变量,或者您甚至可以将其作为用户的输入(一个标志)。
2) 将 fprintf 包装在一个函数中,然后只使用该函数,例如:
function myfprintf(x)
global debug
if (debug==1):
fprintf(x)
【讨论】:
if 语句将成为瓶颈,因为这似乎正好在 JIT 加速器的小巷中。我想知道探查器是否真的混淆了结果。如果您只是使用tic 和toc 对代码的整体执行进行计时,那么在您的 fprintf(其中 debug=0)周围带有 if(debug==1) 的代码和仅将您的 fprintf 注释掉的代码(即就运行时而言的最佳情况)