如何评估程序的性能

虽然 Mathematica 的速度并不算快,但是可以通过评估性能来写更快的程序。

内置
Timing
系列

◼
  • Timing
    :只计算CPU时间,很少用。
  • ◼
  • AbsoluteTiming
    :计算代码运行时间(不包括格式化输出)
  • ◼
  • RepeatedTiming
    :重复计算获得代码运行的平均时间。
  • 基准测试

    运行
    ?*`Benchmark*
    GeneralUtilities`
    Benchmark
    BenchmarkPlot
    Image`
    对于版本11.3以上的用户,亦可以使用函数库函数 EvaluateBenchmark 和 BenchmarkPlot,虽然只是一层封装。
    用法参见上述函数库文档。
    基准测试一般用来测试算法的时间复杂度或者对比不同算法
    举个例子:
    In[]:=
    bubbleSort[data_]:=data//.{a___,b_,c_,d___}/;b>c:>{a,c,b,d}
    In[]:=
    GeneralUtilities`BenchmarkPlot[{bubbleSort,Sort},ResourceFunction["FourierShift"]@*Range,PowerRange[1,10^7,2],"IncludeFits"True]
    Out[]=
    bubbleSort
    3
    n
    Sort
    nlog(n)

    Profiling

    与基准测试不同,Profiling通常用来分析某组代码中各部分的性能开销,以定位开销大的部分并做出改进。
    除了 Wolfram Workbench 自带的 Profiler 之外,函数库的 EvaluationTiming 也是一种选择。