如何仅通过1-2次运行完成高耗时函数的性能对标测试
Julia 低耗时函数性能对标方法
核心思路
跳过@btime默认的上千次自动采样,采用单次/极少次运行的计时方案,同时提前消除编译时间干扰。
具体操作步骤
- 第一步:提前预热消除编译耗时
Julia 首次运行函数时会触发即时编译,这部分时间不属于函数实际运行耗时,需要先执行一次两个函数完成编译,不计入测试时长:# 替换为你实际测试用的入参 function1(test_args; test_kwargs...) function2(test_args; test_kwargs...) - 第二步:选择单次计时方案,二选一即可
- 用 Julia 原生计时宏,仅运行1次即可拿到结果:
如果担心单次运行有系统波动,最多各运行2次取平均值即可满足精度要求。# @elapsed 直接返回运行耗时的秒数 time1 = @elapsed function1(test_args; test_kwargs...) time2 = @elapsed function2(test_args; test_kwargs...) println("function1耗时:$(round(time1, digits=2))s") println("function2耗时:$(round(time2, digits=2))s") println("function1速度更快:$(time1 < time2)")
2. 如果需要保留BenchmarkTools的内存分配等统计信息,可以手动指定采样次数避免多跑:using BenchmarkTools # samples指定采样2次,evals指定每次采样只运行1次函数 @btime function1($test_args; $test_kwargs...) samples=2 evals=1 @btime function2($test_args; $test_kwargs...) samples=2 evals=1
注意事项
- 测试时尽量关闭高负载的后台程序,减少系统资源抢占带来的计时误差
- 如果函数内部包含随机逻辑,测试前要固定随机种子,保证两个函数的运行条件完全一致
内容的提问来源于stack exchange,提问作者Physics_Student
相关产品推荐
相关产品推荐

