2012-07-10 62 views
1

我很樂意使用llvm來優化我的python代碼。我閱讀了一些教程,但我還沒有想出如何,讓我們說,從Python代碼導出類對象到llvm。我學會了如何在llvm-py中創建一個函數,但是類並不是我的力量。如何將python中的Class對象轉換爲llvm?

這裏是我想在LLVM代碼來創建類的實例:

class Char(): 
    def __init__(self,c): 
     self.c=c 
    def next(self,line,p): 
     try: 
      return self.c==line[p] 
     except: 
      return False 
    def next_rep(self,line,p): 
     try: 
      return self.c==line[p],p 
     except: 
      return False,p 

我會感謝任何幫助!

+1

一個粗略的調查表明,llvm-py只是一個用一些python nicet創建llvm代碼的工具。它不是一個Python編譯器。也許看看[pypy](http://pypy.org/),它有一個llvm後端。 [This fork](https://bitbucket.org/mjacob/pypy-llvm/src/bbae9b5448ef/pypy/translator/llvm/genllvm.py)似乎仍在積極開發之中,並且有一些代碼。 – 2012-07-10 13:16:18

+0

感謝您的建議,但事情是,我正在生成確定性有限自動機,我希望這些自動機更快。所以我認爲在llvm bitcode中生成它們會很好。我想在Python代碼中使用它們...所以,也許我應該問 - 我如何使用llvm-py來重寫llvm位代碼。 – Jendas 2012-07-10 13:47:21

+0

爲什麼llvm?瓶頸在哪裏? – 2012-07-10 14:26:58

回答

1

簡答:你不行。

原因是Python是一種解釋型語言,並且語言中有幾種語句不容易借用靜態評估。

我的建議是,您可以對您的程序進行配置(例如,如果您運行的是Linux,使用IPython的run -p選項,或者通常通過cProfile模塊),並計算出大部分程序的時間。

在大多數程序中,總運行時間的高百分比是採取的代碼相對小的面積,和改善它(通過一個算法改善或通過編寫C延伸,例如通過SWIG)可以經常導致性能提高了一個數量級。

這種優化通常比試圖讓「一切運行得更快」更有效。

相關問題