Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据本地机器规格调整R中的相对基准测试_R_Performance_Benchmarking_Microbenchmark - Fatal编程技术网

根据本地机器规格调整R中的相对基准测试

根据本地机器规格调整R中的相对基准测试,r,performance,benchmarking,microbenchmark,R,Performance,Benchmarking,Microbenchmark,我对R中的基准测试有疑问。与用户定义的函数相比,我如何恰当地估计函数的相对速度 假设我有3个用户定义的函数f、g和h,我想报告g和h在速度方面与f相比的表现。测量每一个都不是问题(我知道有几个库),用g的速度除以f的速度是个好主意。 但我如何调整这个测量值,使其不太依赖于我的本地机器和操作系统(或者这是必要的)? 当然,100%的精度似乎不太可能,但我的最终目标是制定一个指标,这样用户或学生就可以在不必检查我和她的规格的情况下感受到速度的提高有多大 那么,我在找什么 这类问题的已知度量 执行此

我对R中的基准测试有疑问。与用户定义的函数相比,我如何恰当地估计函数的相对速度

假设我有3个用户定义的函数f、g和h,我想报告g和h在速度方面与f相比的表现。测量每一个都不是问题(我知道有几个库),用g的速度除以f的速度是个好主意。 但我如何调整这个测量值,使其不太依赖于我的本地机器和操作系统(或者这是必要的)? 当然,100%的精度似乎不太可能,但我的最终目标是制定一个指标,这样用户或学生就可以在不必检查我和她的规格的情况下感受到速度的提高有多大

那么,我在找什么

  • 这类问题的已知度量
  • 执行此操作/报告此类度量的包
  • 速度与规格关系的近似值,因此我至少大致知道我机器上的相对速度在其他机器上的表现(线性、指数等)

最后一句话:我对不同机器的访问是有限的,所以只需测试它并查看它们的行为是一种选择,但这是我的最后一种选择。我更喜欢一个好的近似值

在不同的硬件上,两个功能的相对性能比可能不同。e、 g.其中一个可能对FMA吞吐量更敏感(并落后于Zen1或Intel pre-Haswell),而另一个(可能使用查找表或备忘录)可能对缓存占用更敏感,并在超过某个阈值大小时变慢,该阈值大小取决于机器的二级和三级缓存大小

(在一台机器上)可能有一个有用的观察方法,即不同问题大小的简单相对性能(时间比),时间(g)/时间(f)和时间(h)/时间(f)

因此,您可以绘制所有3个函数的y=性能(以微秒为单位)和x=问题大小,以查看性能曲线的绝对形状

您可以单独绘制相对性能图,以查看相对于基线的性能是快还是慢


如果存在单一尺寸以外的参数,那么就有更多的问题空间可以通过绘图进行探索…

我明白你的观点,这确实是一个值得研究的问题,但是我看到的问题是,给定函数的固定输入集a,如果我对某个用户的机器一无所知,我就无法说明g相对于f的相对速度性能。但我想我只需要利用我对不同机器的有限扩展来评估它们的行为。@ErinSprünken:没错,如果你只能在一台机器上测试,“g对所有输入都比f快”的说法无法在所有机器上得到证明。不过,您通常有充分的理由认为这是正确的:例如,如果
g
f
的一个版本,它优化了一些工作,并且没有添加新的不同类型的工作,那么它可能是正确的。要能够推广到不同类型的机器,要么需要测试,要么需要了解在不同CPU上是什么让事情变快还是变慢。我担心这在理论上很难或不可能估计。谢谢你的努力!