编程语言EF速度测试(1):spectral-norm

29 篇文章 1 订阅
23 篇文章 0 订阅

这是一个专门的编程语言/编译器速度测试/对比网站(http://shootout.alioth.debian.org/)给出的题目,

以下是EF源代码:

import 工具;

//spectral-norm
public class 启动类 <作者 = "liigo">
{
	private static double eval_A(int i, int j) { return 1.0/((i+j)*(i+j+1)/2+i+1); }

	private static eval_A_times_u(int N, double[] u, double[] Au)
	{
		int i,j;
		for(i=0;i<N;i++)
		{
			Au[i]=0;
			for(j=0;j<N;j++) Au[i]+=eval_A(i,j)*u[j];
		}
	}

	private static eval_At_times_u(int N, double[] u, double[] Au)
	{
		int i,j;
		for(i=0;i<N;i++)
		{
			Au[i]=0;
			for(j=0;j<N;j++) Au[i]+=eval_A(j,i)*u[j];
		}
	}

	private static eval_AtA_times_u(int N, double[] u, double[] AtAu)
	{ double[] v = new double[N]; eval_A_times_u(N,u,v); eval_At_times_u(N,v,AtAu); }

	public static  main(string[] args)
	{
		int time = 运行环境.取启动时间();
		int i;
		int N = 5500;
		double[] u = new double[N], v = new double[N];
		double vBv, vv;

		for(i=0;i<N;i++) u[i]=1;

		for(i=0;i<10;i++)
		{
			eval_AtA_times_u(N,u,v);
			eval_AtA_times_u(N,v,u);
		}

		vBv=0; vv=0;
		for(i=0;i<N;i++) { vBv+=u[i]*v[i]; vv+=v[i]*v[i]; }

		控制台.输出行(工具.数学运算.求平方根(vBv/vv));
		控制台.输出行("time(ms): ", 运行环境.取启动时间() - time);
		控制台.输入文本();
	}
}

 

这个EF程序,在我的机器上,运行耗时约 90 秒。相应的VC6最佳优化后运行耗时约 21 秒。

其它编程语言/编译器的表现,请看这里:http://shootout.alioth.debian.org/gp4/benchmark.php?test=spectralnorm&lang=all

总的来说,EF表现不坏。比不少编程语言(如C++, JAVA, C#, D, Fortran, Pascal)慢很多,又比另外不少编程语言(如Erlang, Python, Ruby, Perl, PHP, Lua, Groovy, SmallTalk, JavaScript)快很多。

进一步分析的话:EF作为编译型语言,通常比其它编译型语言都慢(毕竟EF编译器尚未优化),但最多慢3到5倍;EF通常比解释型语言都要快,往往快数倍、数十倍,以至上百倍。(Lua的表现有点出乎我的意外。)

还有很多测试题目,有时间再继续。想了解EF语言,请到EF官方博客:http://blog.csdn.net/efdev/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值