为什么第一次进行微基准测试总是最慢?

雅各布

使用时,Microbenchmark我注意到第一次执行总是比其余执行慢很多。对于不同的机器和不同的功能,此效果相同。这是否与库有关,还是可以预料的这种热身?

library(microbenchmark)
X <- matrix(rnorm(100), nrow = 10)
microbenchmark(solve(X))$time
#[1] 82700 23700 18300 17700 19700 19100 16900 17500 17300 16600 16700 16700 18500 16900 17700 16900 17000 16200 17400 17000 16800 16600 17000 16700 16800 17100
#[27] 17300 17100 16800 17800 17400 18100 17400 18100 18000 16700 17400 17300 17000 16800 16400 17300 16700 16900 16900 16700 17200 17800 16600 17100 16800 17800
#[53] 17000 17200 17500 17200 17200 17300 17800 17600 17600 17200 16600 16700 16800 16600 16400 16500 17300 17600 16800 17600 16300 16800 17100 16500 16800 16700
#[79] 16300 16700 16300 16700 16800 16700 16400 17100 16400 17100 17000 18000 16600 16600 16600 16800 16700 16500 17600 19100 17400 16900
瑞·巴拉达斯(Rui Barradas)

它与预热时间有关,请参见help('microbenchmark'),节的详细信息和参数控制:

控制列表可以包含以下条目:

顺序
[省略]

热身
在实际基准测试之前执行的热身迭代次数。这些用于估计时序开销以及使处理器从其可能处于的任何睡眠或空闲状态开始旋转。默认值为2。

如果您增加预热迭代的次数,则第一次运行可能不是最慢的,尽管它会多次。

library(microbenchmark)

set.seed(2020)
X <- matrix(rnorm(100), nrow = 10)
times <- microbenchmark(solve(X), control = list(warmup = 10))$time
times
#  [1] 145229  72724  65333  65305 115715  63797 689113  72101  64830  66392
# [11]  65776  66619  65531  64765  65351  65605  65745  65106  64661  65790
# [21]  65435  64964  66138  65952  66893  65654  65585  75141  74666  69060
# [31]  72725  66650  65486  65894  66808  65381  66039  65959  64842  65029
# [41]  65673  66439  64394  70585  68899  73875  73180  67807  65891  65699
# [51]  64693  63679  65504  80190  66150  65048  64372  64842  65845  65144
# [61]  65543  65297  65485  64695  66580  64921  65453  64840  65559  65805
# [71]  64362  66098  65464  65227  64998  64007  65659  63919  64727  64796
# [81]  65231  64030  65871  65735  64217  65195  65181  65130  66015  63891
# [91]  63755  65274  65116  64573  64244  64214  64148  64457  65346  64228

现在看看哪个是第一个order

order(times, decreasing = TRUE)
#  [1]   7   1   5  54  28  29  46  47  31   2   8  44  30  45  48  25  35  32  12
# [20]  65  42  10  55  23  72  37  89  38  24  34  49  83  59  70  20  11  17  84
# [39]  50  41  77  26  16  27  69  61  13  53  33  63  73  67  21  36  15  99   3
# [58]   4  62  92  81  74  86  87  60  88  93  18  56  40  75  22  66  39  58  68
# [77]   9  80  14  79  64  51  19  94  98  43  57  71  95 100  85  96  97  82  76
# [96]  78  90   6  91  52

在这种情况下,最慢的是第七轮,而不是第一轮。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么用Robolectric进行的第一次测试需要这么长时间?

来自分类Dev

为什么存根只在第一次测试中使用?

来自分类Dev

测试什么时候第一次失败?

来自分类Dev

为什么第一次迭代总是比下一个循环更快?

来自分类Dev

为什么第一次收费很重要

来自分类Dev

为什么在第一次迭代后就停止了?

来自分类Dev

摩卡第一次测试

来自分类Dev

为什么setTimeout()第一次只运行一次我的代码?

来自分类Dev

使用 spock 进行集成测试。在第一次测试之前加载上下文

来自分类Dev

为什么我的for loop提示第一次被打印两次?

来自分类Dev

为什么我的提示第一次重复两次?

来自分类Dev

Robolectric如何工作?为什么我的单元测试在第一次运行单元测试时会下载一些jar?

来自分类Dev

什么是“加载符号”,为什么第一次需要这么长时间?

来自分类Dev

为什么这仅在第一次显示对话框时起作用?

来自分类Dev

第一次接触struct。为什么会发生此输出?

来自分类Dev

为什么python程序第一次运行非常慢?

来自分类Dev

MATLAB函数第一次变慢,但随后变快得多。为什么?

来自分类Dev

为什么UpdatePanel中的按钮在第一次之后不执行JQuery事件

来自分类Dev

为什么MPMoviePlayerController第一次播放时口吃?

来自分类Dev

为什么我的客户端套接字在第一次发送后就死了?

来自分类Dev

为什么Jenkinsfile中的每个循环在第一次迭代时停止

来自分类Dev

为什么第一次调用readline()会减慢随后对fnmatch()的所有调用?

来自分类Dev

为什么导航抽屉在第一次打开时滞后?

来自分类Dev

为什么带有select的菜单第一次失败?

来自分类Dev

试图了解为什么只在第一次调用嵌套的for循环

来自分类Dev

Kafka主题似乎仅在第一次起作用。为什么?

来自分类Dev

为什么React Native Navigation侦听器在第一次尝试时触发?

来自分类Dev

为什么第一次迭代后的指针指向随机值?

来自分类Dev

为什么gradle bdd命令在第一次运行时不起作用

Related 相关文章

  1. 1

    为什么用Robolectric进行的第一次测试需要这么长时间?

  2. 2

    为什么存根只在第一次测试中使用?

  3. 3

    测试什么时候第一次失败?

  4. 4

    为什么第一次迭代总是比下一个循环更快?

  5. 5

    为什么第一次收费很重要

  6. 6

    为什么在第一次迭代后就停止了?

  7. 7

    摩卡第一次测试

  8. 8

    为什么setTimeout()第一次只运行一次我的代码?

  9. 9

    使用 spock 进行集成测试。在第一次测试之前加载上下文

  10. 10

    为什么我的for loop提示第一次被打印两次?

  11. 11

    为什么我的提示第一次重复两次?

  12. 12

    Robolectric如何工作?为什么我的单元测试在第一次运行单元测试时会下载一些jar?

  13. 13

    什么是“加载符号”,为什么第一次需要这么长时间?

  14. 14

    为什么这仅在第一次显示对话框时起作用?

  15. 15

    第一次接触struct。为什么会发生此输出?

  16. 16

    为什么python程序第一次运行非常慢?

  17. 17

    MATLAB函数第一次变慢,但随后变快得多。为什么?

  18. 18

    为什么UpdatePanel中的按钮在第一次之后不执行JQuery事件

  19. 19

    为什么MPMoviePlayerController第一次播放时口吃?

  20. 20

    为什么我的客户端套接字在第一次发送后就死了?

  21. 21

    为什么Jenkinsfile中的每个循环在第一次迭代时停止

  22. 22

    为什么第一次调用readline()会减慢随后对fnmatch()的所有调用?

  23. 23

    为什么导航抽屉在第一次打开时滞后?

  24. 24

    为什么带有select的菜单第一次失败?

  25. 25

    试图了解为什么只在第一次调用嵌套的for循环

  26. 26

    Kafka主题似乎仅在第一次起作用。为什么?

  27. 27

    为什么React Native Navigation侦听器在第一次尝试时触发?

  28. 28

    为什么第一次迭代后的指针指向随机值?

  29. 29

    为什么gradle bdd命令在第一次运行时不起作用

热门标签

归档