我试图比较c和cython运行时,并决定我应该为我的项目选择哪一个。所以我用这两种方法测试了一个简单的计算。但是我找不到任何好的答案来衡量cython的执行时间与c:
C:
#include <stdio.h>
#include <time.h>
int main() {
int a[3] = {2, 3, 4};
long long int n = 0;
clock_t start, end;
double cpu_time_used;
start = clock();
for(long long int i=0; i<1000000000; i++)
n += a[0] + a[2];
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("time : %f", cpu_time_used);
return 0;
}
Cython:
cpdef func():
cdef int arr[3]
arr[:] = [2, 3, 4]
cdef unsigned long long a = 0, i
for i in range(1000000000):
a += arr[0] + arr[2]
return a
我想知道如何比较cython的执行时间?Cython构建了可以从任何地方调用的库(这里您定义了cpdef,可以从python和c中调用)。您可以像调用任何其他库一样从c程序中调用。
就像你的例子一样,函数不需要任何输入,只需直接从python中使用timeit调用它并查看计时。
你的函数有一些问题,a没有初始化,函数不需要运行,如果a初始化为0,答案总是loopcount * (arr[0] + arr[2])
也不是很优化。您可以关闭边界检查或绕行,以消除在您的情况下不需要的额外开销。
- 你的C程序将不会给你任何答案,因为整个循环将被优化出来,并且该块的执行时间将等于零。
https://godbolt.org/z/bv793dGaa
- 使用可用的python分析器之一来分析python脚本-例如cProfile,或者如果您想测量小片段的执行时间,请使用
timeit