Performance 防止R
在R包中检测性能回归的好工作流是什么?理想情况下,我正在寻找与Performance 防止R,performance,r,testing,Performance,R,Testing,在R包中检测性能回归的好工作流是什么?理想情况下,我正在寻找与R CMD check集成的东西,当我在代码中引入了显著的性能回归时,它会提醒我 一般来说,什么是好的工作流?其他哪些语言提供了好的工具?它是可以在顶级单元测试的基础上构建的,还是通常单独进行的?这里做任何事情的唯一方法就是做一些假设。因此,让我们假设机器没有改变,否则需要“重新校准” 然后使用类似于单元测试的框架,并将“必须在X个时间单位内完成”视为需要满足的另一个测试标准。换句话说,做一些像 stopifnot( timingO
R CMD check
集成的东西,当我在代码中引入了显著的性能回归时,它会提醒我
一般来说,什么是好的工作流?其他哪些语言提供了好的工具?它是可以在顶级单元测试的基础上构建的,还是通常单独进行的?这里做任何事情的唯一方法就是做一些假设。因此,让我们假设机器没有改变,否则需要“重新校准” 然后使用类似于单元测试的框架,并将“必须在X个时间单位内完成”视为需要满足的另一个测试标准。换句话说,做一些像
stopifnot( timingOf( someExpression ) < savedValue plus fudge)
stopifnot(计时(someExpression)
因此,我们必须将先前的计时与给定的表达式相关联。也可以使用来自现有三个单元测试包中任何一个的相等性测试比较
没有什么是哈德利不能处理的,所以我想我们几乎可以期待在下一次长时间的学术休息之后有一个新的包
timr
:)。当然,这必须是可选的,因为在一台“未知”的机器上(想想:CRAN测试包装),我们没有参考点,否则福吉因子必须“转到11”才能在新机器上自动接受。R-devel提要上最近宣布的一项更改可能会给出一个粗略的衡量标准
R-devel实用程序的变化
“R CMD check”可以选择报告检查各个部分的计时:这由“编写R扩展”中记录的环境变量控制
看
可以检查运行测试所花费的总时间,并将其与以前的值进行比较。当然,添加新的测试会增加时间,但是仍然可以看到显著的性能下降,尽管是手动的
这不像单个测试套件中的计时支持那样细粒度,但它也不依赖于任何一个特定的测试套件。这是一个非常具有挑战性的问题,也是我经常处理的问题,因为我在一个包中交换不同的代码以加快速度。有时,性能回归伴随着算法或实现的变化,但也可能由于所用数据结构的变化而出现 在R包中检测性能回归的好工作流是什么 在我的例子中,我倾向于使用不同的固定数据集来加速非常特定的用例。正如Spacedman所写,拥有一个固定的计算系统很重要,但这几乎是不可行的:有时一台共享的计算机可能有其他进程,即使它看起来相当空闲,也会将速度降低10-20% 我的步骤: