如何确定循环的运行时间?

如何确定循环的运行时间?

pdfTeX 提供了两个宏,可用于确定从运行开始经过的时间。第一个宏确定经过的时间(以“缩放秒数”为单位),即秒数除以 65536。

\pdfelapsedtime

第二个\pdfresettimer将内部计时器重置为 0。

我很好奇并运行了以下代码:

\documentclass{article}
\usepackage{fp,siunitx,ifthen}

\def\startTimer{\pdfresettimer}
\def\stopTimer{%
 \the\pdfelapsedtime\,scaled seconds
 \FPdiv\result{\the\pdfelapsedtime}{65536}
 \FPmul\result{\result}{1000000} %microseconds
 \FPround\result{\result}{6}\par 
 \result \si{\milli\second}\par}

\begin{document}
\startTimer
\newcount\n
\n=0
\loop%
   \advance\n by1
     \number\n, %  
   \ifnum\n<888%
\repeat% 3-4 scaled points
%% ifthen code 
\newcounter{acount}
\whiledo{\value{acount}<888}{%
\stepcounter{acount}% 
 \theacount, } %5-6 scaled points average
\stopTimer
\end{document}

我的问题是:这是衡量循环效率的好方法吗?还有其他方法吗?您能否发布您的运行时间和机器以供比较?

我的结果:“loop”替代文本和“whiledo” 替代文本

答案1

时间统计的一般规则是:不要相信任何低于 1 秒的值。

答案2

在这种情况下,我认为这是衡量循环效率的合理方法。每个循环的主体和比较都花费恒定的时间。因此,总时间只是比较和主体的总时间乘以循环迭代次数。

在这种情况下,\loop\repeat循环会稍微快一点,因为它在比较和主体方面要做的工作稍微少一些。如果两个循环对于同一个问题有完全不同的实现,那么测试单一数量的迭代可能不是最快的方法。测试几个不同的迭代次数会更有指导意义。

相关内容