`
mryufeng
  • 浏览: 982264 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

转:CPU密集型计算 erlang和C 大比拼

阅读更多

原文地址:http://pseudelia.wordpress.com/2009/08/23/erlang-native-code-benchmark/

Normalerweise compiliert Erlang Bytecode (heißt das so in Erlang?). Das coole daran ist, dass man die beam files leicht auf anderen Rechnern benutzen kann. Aber die Geschwindigkeit von diesem Code hat mich nicht überzeugen können. Darum habe ich ausprobiert wie gut der native Code ist den Erlang baut.

Der Versuchsaufbau ist einfach: Ich habe eine simple rekursive Funktion geschrieben, die Fibonaccizahlen berechnet. Dann wir 5-mal Fibonacci von 40 berechnet und die Zeit gemessen. Das ganze mache ich mit nur einem Kern. Diesen Test mache ich insgesamt 3-mal. Einmal mit nativem Erlangcode, einmal mit nicht nativem Erlangcode und einmal mit einem in C geschriebenen Programm. Der Benchmark besteht aus drei Dateien:

cpu_intensive.erl:

-module(cpu_intensive).
-compile(export_all).

fib_test() ->
fib(40), fib(40), fib(40), fib(40), fib(40).

fib(0) -> 1;
fib(1) -> 1;
fib(N) -> fib(N-1) + fib(N-2).

cpu_intensive.c

unsigned int fib(unsigned int n) {
if (n == 0 || n == 1) {
return 1;
}
return fib(n-1) + fib(n-2);
}

int main() {
fib(40); fib(40); fib(40); fib(40); fib(40);
return 0;
}

Makefile:

all: native normal c

native:
@erlc +native cpu_intensive.erl
@echo ""
@echo "Fibonacci Erlang native code"
@time erl -noshell -s cpu_intensive fib_test -s erlang halt

normal:
@erlc cpu_intensive.erl
@echo ""
@echo "Fibonacci Erlang non-native code"
@time erl -noshell -s cpu_intensive fib_test -s erlang halt

c:
@gcc -O0 -o cpu_intensive cpu_intensive.c
@echo ""
@echo "Fibonacci written in C without optimizations"
@time ./cpu_intensive

Ich habe obige drei Dateien angelegt und die Makefile ausgeführt. Das Ergebnis war bei meinem Core 2 Duo 8400

Fibonacci Erlang native code
13,99 real        13,00 user         0,95 sys

Fibonacci Erlang non-native code
116,81 real       115,46 user         1,00 sys

Fibonacci written in C without optimizations
11,14 real        11,10 user         0,00 sys

Man sieht sehr schön, dass der native Erlangcode fast genauso schnell ist wie nicht optimierter C-Code. Ausserdem sieht man, dass der nicht native Erlangcode hier etwa die zehnfache Zeit braucht.

Fazit: Der native Erlangcode ist super wuschig und ich frage mich warum das +native Flag nicht in der Manpage von erlc dokumentiert ist.
分享到:
评论
2 楼 mryufeng 2009-08-31  
这个只是侧向表明hipe的jit还是可以的 erlang不是想象中的那么慢。
1 楼 Arbow 2009-08-31  
这种非尾递归fib做的CPU密集计算,感觉意义不大啊

相关推荐

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    提供的"爱尔兰B计算器.exe"和"ErlangC计算工具.xls"正是用于执行这些计算的工具。前者可能是一个图形用户界面的应用程序,用户可以直接输入呼叫参数,如呼叫到达率、系统容量等,然后软件将根据Erlang B公式计算出无...

    erlang整理的一些心得和lunix查看cpu和内存信息的方法

    4. **分布式编程**:Erlang 支持跨节点的分布式计算,可以轻松地构建大规模的分布式系统。 5. **热代码升级**:Erlang 允许在运行时更新代码,无需停止服务,这对于维护和更新生产环境中的系统非常有用。 6. **OTP...

    图书:Erlang和OTP实战

    《Erlang和OTP实战》是一本专注于Erlang编程语言和OTP(Open Telecom Platform)框架的专业书籍。这本书深入浅出地介绍了Erlang在分布式系统、并发处理以及高可用性设计中的应用,同时结合 OTP 提供了强大的工具和库...

    Erlang:并行计算和云计算

    他的作品《孟岩谈Erlang:并行计算和云计算》详细解读了Erlang在这些领域的应用,涵盖了语言基础、并发模型、分布式系统设计以及实际案例分析,是学习Erlang和理解其在现代计算领域应用的重要参考资料。 综上所述,...

    Erlang C计算公式 .pdf

    Erlang C计算公式是呼叫中心领域中用于预测和优化人力资源分配的重要工具,由丹麦科学家Agner Krarup Erlang在20世纪初期提出。这个公式主要用于计算在给定的服务水平下,为了处理呼叫流量所需的坐席数量。Erlang C...

    erlang -c语言程序接口.pdf

    ### Erlang与C语言程序接口详解 #### 一、引言 在软件开发领域,不同编程语言之间的交互是一项重要的技术。Erlang作为一种专为构建高并发、容错性强的应用程序而设计的语言,在与其他语言(如C语言)的集成方面具有...

    Erlang_to_C

    - **高效性**:Turbo Erlang通过将Erlang程序编译为C代码,并利用C语言的强大编译器工具链进行进一步优化,实现了极高的执行效率。 - **可移植性**:该实现不仅限于特定的操作系统或硬件平台,可以轻松地在各种环境...

    rabbitmq3.8.4 和 erlang23.0

    压缩包包含有 rabbitmq3.8.4 和 erlang23.0,亲测可用。 1. erlang安装配置: Windows版下载地址:http://www.erlang.org/downloads, 打开后选择最新的下载即可,需要注意的是你的系统是32位还是64位的就可以了。...

    erlang-23.2.1-1.el7.x86-64.rpm

    Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...

    Centos7安装RabbitMQ的文档和安装包(包含erlang安装包).rar

    在本文中,我们将深入探讨如何在CentOS 7系统上安装RabbitMQ,这是一个流行的开源消息代理和队列管理器。RabbitMQ基于Erlang编程语言,因此在安装RabbitMQ之前,我们需要先安装Erlang环境。本文将涵盖以下几个关键...

    Erlang-Formula.zip_Erlang B _Erlang-B_erlang_erlang B计算_erlang C

    Erlang B 和 Erlang C 是在电信领域中广泛使用的两个数学公式,用于预测和管理电话交换系统的呼叫处理能力。这两个公式由丹麦工程师 Agner Krarup Erlang 在20世纪初开发,对于理解通信系统中的呼叫占用率、阻塞率和...

    erlang资源

    这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...

    Erlang and OTP in Action MEAP May 2010

    Erlang and OTP in Action Martin Logan, Eric Merritt, and Richard Carlsson MEAP Began: August 2008 Softbound print: May 2010 (est.) | 500 pages ISBN: 1933988789 Part One: Getting Past Pure Erlang; ...

    Erlang和RabbitMQ安装包

    Erlang和RabbitMQ是两个在分布式系统和消息队列领域中至关重要的技术。Erlang是一种函数式编程语言,以其并发性、容错性和热代码升级能力而闻名,而RabbitMQ则是基于Erlang构建的一个开源消息代理,用于实现应用程序...

    Erlang-B&C曲线MATLAB源码

    Erlang-B和Erlang-C曲线是通信工程和排队理论中的重要概念,它们用于分析电话交换系统和其他服务系统的性能。这两个模型可以帮助我们理解在给定资源限制下,多条电话线路或服务台如何处理呼叫或请求的流量。MATLAB...

    kerl:轻松构建和安装ErlangOTP实例

    - **C编译器**:Erlang是用C语言编写的,因此需要C编译器来构建它。 - **Homebrew(仅限macOS)**:如果你是macOS用户,可以使用Homebrew来简化`kerl`的安装过程。 #### macOS使用Homebrew安装 ```bash brew tap ...

    通信网理论基础:第三章 Erlang拒绝和等待系统.pdf

    《通信网理论基础》第三章主要探讨的是Erlang拒绝和等待系统,这是通信网络性能分析中的关键概念。首先,章节介绍了如何建立电话交换系统的排队模型,并对其性能进行分析。电话交换系统由多条线路组成,业务量是衡量...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建...通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。

    erlang 深度分析

    - **应用场景**: 实现Erlang与C语言编写的程序之间的交互。 #### 13. SMP支持 - **概念**: 支持多处理器或多核心架构下的并行计算。 - **实现**: 利用Erlang的轻量级进程模型和自动任务分配机制。 - **优势**: - *...

    适用于windows版本的 Erlang25.2.3 and RabbitMQ server 3.11.9下载

    3. 分布式:Erlang天生支持分布式计算,可以在多台机器上无缝部署和运行应用程序。 4. OTP(Open Telecom Platform):Erlang的配套框架,提供了模块化、可重用的组件,便于构建大型、复杂的系统。 RabbitMQ是一个...

Global site tag (gtag.js) - Google Analytics