拿出与基准和基准比较相关的所有明显的警告,是否有任何研究(一系列记录良好且无偏见的测试)比较两种语言的平均执行速度?谢谢
我正在使用DateTime对一行C#代码进行一些真正的快速和脏的基准测试:
long lStart = DateTime.Now.Ticks;
// do something
long lFinish = DateTime.Now.Ticks;
Run Code Online (Sandbox Code Playgroud)
问题在于结果:
Start Time [633679466564559902] Finish Time [633679466564559902] Start Time [633679466564569917] Finish Time [633679466564569917] Start Time [633679466564579932] Finish Time [633679466564579932]
...等等.
鉴于开始和结束时间相同,Ticks显然不够精细.
那么,我怎样才能更好地衡量绩效呢?
我和我的同事正在选择一个Web框架来开发一个高流量的网站.我们真的很擅长node.js + express和php + symfony2.两者都是伟大的框架,但我们有点担心Symfony2的,因为它似乎被大多数web框架跑赢那里.
以下是证明它的基准:http: //www.techempower.com/benchmarks/
出于这个原因,我们可能会使用的node.js +表达,但我仍然不知道为什么Symfony2的在基准执行如此糟糕.
Oracle最近向SQLite发布了Berkeley DB后端.我碰巧有一个数百兆字节的SQLite数据库,可以从"改进的性能,并发性,可伸缩性和可靠性"中获益,但Oracle的网站似乎缺乏对这些改进的任何测量.有没有人在这里做过一些基准测试?
假设我想对两个程序进行基准测试:foo.py和bar.py.
是几千次运行和各自的平均值time python foo.py和time python bar.py足够的分析和比较他们的速度?
编辑:此外,如果每个程序的执行次高(假设它不是上述),time仍然可以使用?
在这篇文章之后,我决定将Julia与GNU Octave进行比较,结果与julialang.org中的加速结果不一致.
我编译了Julia和GNU Octave CXXFLAGS='-std=c++11 -O3',结果我得到了:
a=0.9999;
tic;y=a.^(1:10000);toc
Elapsed time is 0.000159025 seconds.
tic;y=a.^(1:10000);toc
Elapsed time is 0.000162125 seconds.
tic;y=a.^(1:10000);toc
Elapsed time is 0.000159979 seconds.
Run Code Online (Sandbox Code Playgroud)
-
tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000280142 seconds.
tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000280142 seconds.
tic;y=cumprod(ones(1,10000)*a);toc
Elapsed time is 0.000277996 seconds.
Run Code Online (Sandbox Code Playgroud)
tic();y=a.^(1:10000);toc()
elapsed time: 0.003486508 seconds
tic();y=a.^(1:10000);toc()
elapsed time: 0.003909662 seconds
tic();y=a.^(1:10000);toc()
elapsed time: 0.003465313 seconds
Run Code Online (Sandbox Code Playgroud)
-
tic();y=cumprod(ones(1,10000)*a);toc()
elapsed time: 0.001692931 seconds
tic();y=cumprod(ones(1,10000)*a);toc()
elapsed time: 0.001690245 seconds
tic();y=cumprod(ones(1,10000)*a);toc()
elapsed …Run Code Online (Sandbox Code Playgroud) 我被要求测量一个解决多CPU系统微分方程的fortran程序的性能.我的雇主坚持认为我测量FLOP/s(每秒浮动操作)并将结果与基准(LINPACK)进行比较,但我不相信它是要走的路,因为没有人可以向我解释什么是FLOP.
我做了一些关于FLOP究竟是什么的研究,我得到了一些相当矛盾的答案.我得到的最受欢迎的答案之一是'1 FLOP =加法和乘法运算'.真的吗?如果是这样,再次,在物理上,究竟是什么意思?
无论我最终使用哪种方法,它都必须是可扩展的.一些版本的代码解决了具有数百万未知数的系统,并且需要数天才能执行.
在我的案例中,还有哪些其他有效的衡量绩效的方法(我的案例摘要是'fortran代码,它在数百个CPU上反复进行了大量的算术计算)?
今天我参观了jsPerf,现在我想知道......
示例:http://jsperf.com/concatenation-vs-join
有人能告诉我吗?
提前致谢.
我试图用SO找到答案.有许多问题列出了在c ++中构建一个只有头文件库的各种优缺点,但是我无法找到一个以可量化的术语来构建这样的库.
因此,在可量化的术语中,使用传统上分离的c ++标头和实现文件与仅标头之间有什么不同?
为简单起见,我假设不使用模板(因为它们只需要标题).
详细说明,我列出了我从文章中看到的优点和缺点.显然,有些不容易量化(例如易用性),因此无法用于量化比较.我会用可量化的方式标记那些我期望可量化的指标.
仅限标题的优点
仅限标题的缺点
您可以从较大的开源项目(比较类似大小的代码库)中使用的任何示例都非常感激.或者,如果您知道可以在仅标题版本和分离版本之间切换的项目(使用包含两者的第三个文件),那将是理想的.轶事数字也很有用,因为它们给了我一个可以获得一些洞察力的球场.
利弊来源:
提前致谢...
更新:
对于可能稍后阅读并且有兴趣获得关于链接和编译的一些背景信息的任何人,我发现这些资源很有用:
更新:(回应下面的评论)
仅仅因为答案可能不同,并不意味着测量是无用的.你必须开始测量一些点.您拥有的测量值越多,图像就越清晰.我在这个问题上要求的不是整个故事,而是对图片的一瞥.当然,如果他们想要不道德地宣传他们的偏见,任何人都可以使用数字来扭曲争论.但是,如果有人对两个选项之间的差异感到好奇并发布这些结果,我认为这些信息很有用.
没有人对这个话题感到好奇,足以衡量它吗?
我喜欢枪战项目.我们可以从删除大部分变量开始.只在一个版本的linux上使用一个版本的gcc.仅对所有基准测试使用相同的硬件.不要使用多个线程进行编译.
然后,我们可以测量:
benchmarking ×10
performance ×3
.net ×2
berkeley-db ×1
c# ×1
c++ ×1
flops ×1
header-only ×1
java ×1
javascript ×1
jsperf ×1
julia ×1
linux ×1
octave ×1
profiling ×1
rust ×1
sqlite ×1
symfony ×1
time ×1
unix ×1
web ×1