我想知道有什么工具可以在循环展开方面优化我的程序,我该如何使用它?
我有以下python代码:
for i in range(0, 1000):
a = a * 10 + a%4 + i
for j in range(0, 1000):
j = j + a
for b in range(0, 1000):
result = j + b
我想优化这个代码段,以便我可以尝试理解循环展开。使用 Python,我想知道一个 C 优化器。
我想知道有什么工具可以在循环展开方面优化我的程序,我该如何使用它?
我有以下python代码:
for i in range(0, 1000):
a = a * 10 + a%4 + i
for j in range(0, 1000):
j = j + a
for b in range(0, 1000):
result = j + b
我想优化这个代码段,以便我可以尝试理解循环展开。使用 Python,我想知道一个 C 优化器。
a = 30
for i in range ( 0,1000 ) :
a = a * 10 + a%4 + i
可以改写为:
a = reduce(lambda a,b: a * 10 + a%4 + b, xrange(1000), 30)
大约需要相同的时间(在我的计算机上约为 4 毫秒)。
for j in range ( 0, 1000 ) :
j = j + a
没有多大意义。您正在迭代j
0-999,并且每次都将您的巨大添加a
到其中,这会立即被遗忘,因为接下来j
会被采用。它可以重写为:
j = 999 + a
for b in range ( 0 , 1000 ) :
result = j + b
也没有多大意义。它相当于:
result = j + 999
如果您对代码的性能不满意,对其进行了分析,并发现像这样的低级循环是一个瓶颈,您应该能够通过使用cython转换昂贵的代码位来极大地加速您的代码进入 C 扩展。此外,如果您使用的是 python 2.x,则应该使用xrange
而不是range
.