0

我想知道有什么工具可以在循环展开方面优化我的程序,我该如何使用它?

我有以下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 优化器。

4

3 回答 3

4
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

没有多大意义。您正在迭代j0-999,并且每次都将您的巨大添加a到其中,这会立即被遗忘,因为接下来j会被采用。它可以重写为:

j = 999 + a

for b in range ( 0 , 1000 ) :
      result = j + b

也没有多大意义。它相当于:

result = j + 999 
于 2011-12-14T13:48:17.257 回答
3

如果您对代码的性能不满意,对其进行了分析,并发现像这样的低级循环是一个瓶颈,您应该能够通过使用cython转换昂贵的代码位来极大地加速您的代码进入 C 扩展。此外,如果您使用的是 python 2.x,则应该使用xrange而不是range.

于 2011-12-14T13:53:45.890 回答
2

有一篇关于 Python 中循环展开效果的科学论文(pdf 链接)。这些是相关演讲的幻灯片。

但是,就自动 C 代码优化而言,您可以将LLVMLooPo和可能的Polly结合使用。无论如何,LLVM 是一个很好的起点。

于 2011-12-14T13:50:40.067 回答