我是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 …
在G ++ 中用C++ 0x Lambda Expression玩弄了一下,我想知道在不使用lambda函数的情况下,与一般/特定情况相比,性能有多好.
有没有人知道一个或多或少全面的关于lambda表达性能的讨论或者在开发过程中应该避免使用它们的情况?
我喜欢F#; 我真的,真的.被"函数式编程"咬了之后,我强迫自己在有机会的时候使用它.事实上,我最近使用它(在一个星期的休假期间)来编写一个很好的AI算法.
但是,我尝试到目前为止(见与我第一次尝试一个SO问题在这里)似乎表明,虽然无疑是美丽的...... F#有我用过的所有语言中最慢的执行速度.
我在代码中做错了吗?
我在博客文章中详细解释了我的所作所为,在我的实验中,我看到OCaml和其他组的运行速度比F#快5到35倍.
我是唯一一个有这种经历的人吗?我觉得令人沮丧的是,我最喜欢的语言也是最慢的 - 有时到目前为止......
编辑:直接GitHub链接,代码以各种语言形式存在...
编辑2:感谢托马斯和丹尼尔,速度大大提高:
编辑3:Jon Harrop博士加入了战斗:60%的加速,使得ScoreBoard直接在"枚举"版本的数据上运行.现在,F#的命令版本运行速度比C++慢3-4倍,这对于基于VM的运行时来说是一个很好的结果.我认为问题解决了 - 谢谢你们!
EDIT4:在合并所有优化之后,这些就是结果(F#以命令式的方式达到C# - 现在,如果我只能做一些关于功能风格的话!)
我不确定是否应该在这里发布这个问题,因为这似乎是一个面向编程的网站.
无论如何,我认为必须有一些大师知道这一点.
现在我有一台运行CentOS 5的AMD Opteron服务器.我想为一个相当大的基于c ++ Boost的程序安装一个编译器.我应该选择哪种编译器?
我有一个简单的任务:除了测量在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类比.
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.
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 …
我的程序中的一些加载例程需要很长时间才能完成.我想要一个快速的小片段来检查函数执行的时间.我的意思是"最好没有第三方图书馆".
也许就像花费系统时间一样简单?
start = current_system_time()
load_something()
delta = current_system_time()-start
log_debug("load took "+delta)
Run Code Online (Sandbox Code Playgroud)
编辑:有问题的目标操作系统是Windows.
我试图通过计算两个元素的每个和,相对于主对角线相反,优化每个元素的索引和的方形二维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)