2012-02-20 103 views
1

我想将我的Python代码移植到C,但在此之前,我做了性能测试,但看起来并没有改善性能。Cython性能测试

首先C程序:

#include <stdio.h> 
main() 
{ 
    printf("hello world \n"); 
} 

[[email protected] c]$ gcc test.c 
[[email protected] c]$ time ./a.out 
hello world 

real 0m0.001s 
user 0m0.000s 
sys  0m0.000s 

二Python程序:

#!/usr/bin/env python 

print "hello world \n" 


[[email protected] c]$ time python test.py 
hello world 


real 0m0.024s 
user 0m0.020s 
sys  0m0.003s 

三分之一用Cython ...

test.py 

print "hello world \n" 

[[email protected] c]$ cython --embed test.py 
[[email protected] c]$ gcc $CFLAGS -I/usr/include/python2.6 -o test test.c -lpython2.6 -lpthread -lm -lutil -ldl 

[[email protected] c]$ time ./test 
hello world 


real 0m0.024s 
user 0m0.019s 
sys  0m0.004s 

所以对我来说,它看起来像用Cython没有真正提高任何表现。任何想法为什么以及如何我可以解决这个问题作为cython应该使python代码运行速度更快?

+2

Cython删除字节码调度开销,并且如果您给它提供静态类型注释,有时可以删除Python对象。它不能神奇地将所有的Python代码编译成等效的'libc'调用,并且不能调用解释器的C API来实现大多数Python语义。试着比较一个循环增加十亿个整数。 – delnan 2012-02-20 12:56:42

回答

13

你在这里看到的是没有真正的性能测试。您只在程序中执行一个微小的操作。

完整的执行时间是无效的。在执行时间内唯一重要的是开销。启动过程的开销,以及Python启动解释器的情况开销。

最后,您正在测试I/O的性能。这本身是一件非常棘手的事情,因为I/O的性能通常不受编程语言的限制,而是受操作系统的限制。

+2

准确的响应 - 如果您添加一个适当测试cython和c代码以及结果的示例,我会投票赞成。我会自己做,但我在Windows上,似乎无法让Cython编译... – Alex 2012-06-21 01:07:55