2012-02-20 136 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