标签: benchmarking

在Haskell中编写时间函数

我是Haskell的新手,我希望能够计算给定函数调用或代码片段的运行时间.

在Clojure中我可以使用' 时间 ':

user=> (time (apply * (range 2 10000)))
"Elapsed time: 289.795 msecs"
2846259680917054518906413212119868890148051...
Run Code Online (Sandbox Code Playgroud)

在Scala中,我可以自己定义函数:

scala> def time[T](code : => T) =  {
     |   val t0 = System.nanoTime : Double
     |   val res = code
     |   val t1 = System.nanoTime : Double
     |   println("Elapsed time " + (t1 - t0) / 1000000.0 + " msecs")
     |   res
     | }
time: [T](=> T)T

scala> time((1 to 10000).foldLeft(1:BigInt)(_*_))
Elapsed time 274.292224 msecs
res0: BigInt = 284625968091705451...
Run Code Online (Sandbox Code Playgroud)

如何在Haskell中编写我的Scala函数或Clojure的'time'的等价物?我在Hackage上找到的System.TimeIt模块不够通用,因为它仅在测量IO计算时才有效.所以timeIt(4 …

time benchmarking haskell scala clojure

27
推荐指数
3
解决办法
4841
查看次数

去语言基准?

我认为Go的速度几乎与C相当,但有没有可用的基准测试呢?

benchmarking go

27
推荐指数
4
解决办法
1万
查看次数

lambda在GCC中的运行速度有多快

在G ++ 中用C++ 0x Lambda Expression玩弄了一下,我想知道在不使用lambda函数的情况下,与一般/特定情况相比,性能有多好.

有没有人知道一个或多或少全面的关于lambda表达性能的讨论或者在开发过程中应该避免使用它们的情况?

c++ performance benchmarking lambda c++11

27
推荐指数
3
解决办法
5971
查看次数

F#似乎比其他语言慢......我能做些什么来加快速度?

我喜欢F#; 我真的,真的.被"函数式编程"咬了之后,我强迫自己在有机会的时候使用它.事实上,我最近使用它(在一个星期的休假期间)来编写一个很好的AI算法.

但是,我尝试到目前为止(见与我第一次尝试一个SO问题在这里)似乎表明,虽然无疑是美丽的...... F#有我用过的所有语言中最慢的执行速度.

我在代码中做错了吗?

我在博客文章中详细解释了我的所作所为,在我的实验中,我看到OCaml和其他组的运行速度比F#快5到35倍.

我是唯一一个有这种经历的人吗?我觉得令人沮丧的是,我最喜欢的语言也是最慢的 - 有时到目前为止......

编辑:直接GitHub链接,代码以各种语言形式存在...

编辑2:感谢托马斯和丹尼尔,速度大大提高:

  • 最大的速度提升:从"参考"转变为"可变"提供了高达30%的速度.
  • 删除异常并使用while/flagChecks给了另外16%.
  • 从歧视的工会转向枚举,又增加了5%.
  • "内联"给出了0.5-1%

编辑3:Jon Harrop博士加入了战斗:60%的加速,使得ScoreBoard直接在"枚举"版本的数据上运行.现在,F#的命令版本运行速度比C++慢3-4倍,这对于基于VM的运行时来说是一个很好的结果.我认为问题解决了 - 谢谢你们!

EDIT4:在合并所有优化之后,这些就是结果(F#以命令式的方式达到C# - 现在,如果我只能做一些关于功能风格的话!)

  • 真正的0m0.221s:那是C++
  • 真正的0m0.676s:那是C#(命令式,C++镜像)
  • 真正的0m0.704s:那是F#(命令式,C++镜像)
  • 真正的0m0.753s:那是OCaml(命令式,C++镜像)
  • 真正的0m0.989s:那是OCaml(功能)
  • 真正的0m1.064s:那是Java(势在必行)
  • 真正的0m1.955s:那是F#(功能)

performance benchmarking f#

27
推荐指数
2
解决办法
3945
查看次数

这里有人对英特尔C++编译器和GCC进行了基准测试吗?

我不确定是否应该在这里发布这个问题,因为这似乎是一个面向编程的网站.

无论如何,我认为必须有一些大师知道这一点.

现在我有一台运行CentOS 5的AMD Opteron服务器.我想为一个相当大的基于c ++ Boost的程序安装一个编译器.我应该选择哪种编译器?

c++ linux compiler-construction benchmarking boost

26
推荐指数
5
解决办法
3万
查看次数

使用类似IPython的timeit测量(最大)内存使用量,但请注意

我有一个简单的任务:除了测量在Python中执行一大块代码所花费的时间之外,我还需要测量给定代码块所需的内存量.

IPython有一个很好的实用程序timeit,其工作方式如下:

In [10]: timeit 3 + 3
10000000 loops, best of 3: 24 ns per loop
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是这样的:

In [10]: memit 3 + 3
10000000 loops, best of 3: 303 bytes per loop
Run Code Online (Sandbox Code Playgroud)

我知道这可能不是内置于IPython中 - 但我喜欢timeit- memit类比.

python memory benchmarking ipython

26
推荐指数
1
解决办法
5888
查看次数

Why is iterating over std::ranges::views::join so slow

This is a follow-up of this SO Answer. Given a flat input range and three size_t dimensions, the code creates a nested random_access_range of random_access_ranges of random_access_ranges, modelling a three-dimensional array.

在此输入图像描述 Quickbench

Iterating over the elements in the "multidimensional" range using a nested-for loop and indices is a bit slower than directly iterating over the elements of the input range (factor 4 slower). I suppose some performance drop can be expected, but a factor of 4 hurts …

c++ benchmarking c++20 std-ranges

26
推荐指数
1
解决办法
1450
查看次数

寻找基准测试代码片段(c ++)

我的程序中的一些加载例程需要很长时间才能完成.我想要一个快速的小片段来检查函数执行的时间.我的意思是"最好没有第三方图书馆".

也许就像花费系统时间一样简单?

start = current_system_time()
load_something()
delta = current_system_time()-start
log_debug("load took "+delta)
Run Code Online (Sandbox Code Playgroud)

编辑:有问题的目标操作系统是Windows.

c++ windows time benchmarking

25
推荐指数
3
解决办法
2万
查看次数

25
推荐指数
5
解决办法
7万
查看次数

Java 2D阵列填充 - 无辜的优化导致可怕的减速

我试图通过计算两个元素的每个和,相对于主对角线相反,优化每个元素的索引和的方形二维Java数组的填充.但是,代替加速或至少相当的性能,我的代码速度慢23(!)倍.

我的代码:

@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
@OperationsPerInvocation(ArrayFill.N * ArrayFill.N)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class ArrayFill {
    public static final int N = 8189;
    public int[][] g;

    @Setup
    public void setup() { g = new int[N][N]; }

    @GenerateMicroBenchmark
    public int simple(ArrayFill state) {
        int[][] g = state.g;
        for(int i = 0; i < g.length; i++) {
            for(int j = 0; j < g[i].length; j++) {
                g[i][j] = i + j;
            }
        }
        return g[g.length - 1][g[g.length - 1].length - 1];
    } …
Run Code Online (Sandbox Code Playgroud)

java arrays performance benchmarking multidimensional-array

25
推荐指数
1
解决办法
3180
查看次数