aim*_*aim 3 java benchmarking d
我是D的新手,我在简单测试中将它与Java进行比较,并希望看到母语更快(或大致相同).但是在我第一次使用递归D的测试中,它比Java慢得多(差不多两次).
Java(这是糟糕的java性能测试,但它只是简单的想法):
public static void main(String... args) {
long before = System.nanoTime();
System.out.println(fibonacci(40));
System.out.println(TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - before));
}
static int fibonacci(int n) {
if (n < 2) {
return n;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
环境:Win7 64bit,JDK:1.7.0_10 x64.
d:
import std.stdio;
import std.datetime;
void main(string[] args)
{
auto r = benchmark!(simplebench)(1);
writefln("%s", r[0].to!("msecs", int));
}
void simplebench() {
writeln(fibonacci(40));
}
int fibonacci(int n) {
if (n < 2) {
return n;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
环境:Win7 64bit,dmd 2.061,编译选项:-noboundscheck -inline -O -release
Java~570ms和D~1011ms.
我究竟做错了什么?谢谢!
Java也是通过其JIT编译器原生的.如果您使用-Xint
(强制解释器)禁用JIT,那么您将看到D明显更快.为了它的价值,我在C中尝试了类似的实现,并获得与D中相同的速度.
这些微基准测试对于测试一般性能没有用.你在这里所做的只是测试Java JIT编译代码与D编译代码.他们都被编译了.此外,这不是典型的Java代码.典型的Java程序在堆上分配了大量内存,而典型的D程序则没有.
如果您想了解D与Java的真实性能,那么您需要在真实程序上进行测试.
DMD是D的参考编译器,但是它的后端并不像其他编译器,GDC和LDC那样快速生成代码,就像之前提到的CyberShadow一样.
在我的电脑上测量的时间:
D编译器,全部使用以下标志或其等价物:-noboundscheck -inline -O -release
DMD~905ms,LDC~663ms,GDC~382ms
Java~445ms
在-O3下g ++ ~370ms
这些(微)结果表明,当使用相同的后端编译时,D代码与cpp等效的性能相同,并且它比Java代码更快.
归档时间: |
|
查看次数: |
809 次 |
最近记录: |