炸裂!讓Python和C一樣快,MIT推出新編譯器,訓(xùn)練大數(shù)據(jù)集可提速5-10倍
?大數(shù)據(jù)文摘出品
Python太慢了!
除了這個(gè)缺點(diǎn),Python可以說(shuō)是有無(wú)數(shù)個(gè)優(yōu)點(diǎn),但就是這個(gè)缺點(diǎn),讓無(wú)數(shù)程序員吐槽不已。
現(xiàn)在,麻省理工學(xué)院計(jì)算機(jī)科學(xué)與人工智能實(shí)驗(yàn)室(CSAIL)的研究人員希望通過(guò)一個(gè)新的編譯器來(lái)改變這種狀況——Codon。
Codon 是一個(gè)新的基于 Python 的編譯器,能讓用戶編寫(xiě)的 Python 代碼,運(yùn)行效率與 C 或 C++ 程序相當(dāng)。
這很香了。
裝上了渦輪增壓的 Python
Python 的主要優(yōu)勢(shì)在于語(yǔ)法簡(jiǎn)單易學(xué),這樣許多非專業(yè)程序員也能體會(huì)到編碼帶來(lái)的樂(lè)趣。
“我們意識(shí)到,人們不一定想學(xué)習(xí)一門(mén)新語(yǔ)言或一種新工具,尤其是那些非技術(shù)人員。所以我們想,讓我們把 Python 語(yǔ)法、語(yǔ)義和庫(kù)合并到一個(gè)從頭開(kāi)始構(gòu)建的新系統(tǒng)中。”Ariya Shajii Codon 的新論文的主要作者。
這篇論文被發(fā)表在了第32屆 ACM SIGPLAN 編譯器構(gòu)造國(guó)際會(huì)議上。
論文地址:https://dl.acm.org/doi/abs/10.1145/3578360.3580275
不像 C 和 C + + 這樣的語(yǔ)言都帶有一個(gè)編譯器來(lái)優(yōu)化生成的代碼以提高性能,Python 是一個(gè)直譯語(yǔ)言。為了讓 Python 變得更快,人們付出了很多努力,研究小組說(shuō),這種方法通常采用“自上向下的方法”,即采用普通的 Python 實(shí)現(xiàn),并結(jié)合各種優(yōu)化或“即時(shí)”編譯技術(shù)(一種在執(zhí)行過(guò)程中編譯對(duì)性能至關(guān)重要的代碼片段的方法)。這些方法擅長(zhǎng)于保持向后兼容性,但是這種方法也極大地限制了可以獲得的加速種類。
Codon 則采取了更多的自下而上的方法,從頭開(kāi)始實(shí)施所有的東西,雖然有一些限制,但是更加靈活。
例如,Codon 雖然不能支持某些動(dòng)態(tài)特性,但是可以使用優(yōu)化和其他靜態(tài)編譯技術(shù),這些技術(shù)從標(biāo)準(zhǔn)的 Python 優(yōu)化流程開(kāi)始就無(wú)法實(shí)現(xiàn)。
之前都沒(méi)人做,難點(diǎn)在哪?
第一個(gè)難點(diǎn)就在于運(yùn)行前的類型檢查。
編譯器執(zhí)行的第一個(gè)關(guān)鍵步驟之一稱為“類型檢查”,即在程序中計(jì)算每個(gè)變量或函數(shù)的不同數(shù)據(jù)類型的過(guò)程。例如,一些可以是整數(shù),一些可以是字符串,還有一些可以是浮點(diǎn)數(shù)ーー這是常規(guī) Python 不會(huì)去做的。在普通的 Python 中,在運(yùn)行程序時(shí)必須處理所有這些信息,這是使其運(yùn)行速度如此之慢的因素之一。
Codon 的的解決方法在于,在運(yùn)行程序之前進(jìn)行類型檢查。這允許編譯器將代碼轉(zhuǎn)換為本機(jī)代碼,從而避免了 Python 在運(yùn)行時(shí)處理數(shù)據(jù)類型的所有消耗。
第二個(gè)難點(diǎn)在于編譯器中的優(yōu)化。
舉個(gè)例子,如何使用插件實(shí)現(xiàn)一組特定于該某計(jì)算領(lǐng)域的優(yōu)化?比如使用涉及到使用基因組序列和其他生物學(xué)數(shù)據(jù)的基因組學(xué)庫(kù)。
Codon 的方法是生成一個(gè)可執(zhí)行文件——讓其以 C 或 C + + 的速度運(yùn)行,甚至一旦應(yīng)用了特定于領(lǐng)域的優(yōu)化,運(yùn)行速度甚至更快。
Codon 目前涵蓋了 Python 的一個(gè)相當(dāng)大的子集,不過(guò)它仍然需要合并幾個(gè)動(dòng)態(tài)特性,并擴(kuò)大其 Python 庫(kù)的覆蓋范圍。Codon 團(tuán)隊(duì)正在努力進(jìn)一步縮小與 Python 的差距,并期待在未來(lái)幾個(gè)月內(nèi)發(fā)布幾個(gè)新特性。Codon 目前在 GitHub 上公開(kāi)可用。
GitHub:https://github.com/exaloop/codon
研究小組對(duì)密碼頓進(jìn)行了嚴(yán)格的測(cè)試,結(jié)果證明它超出了預(yù)期。
具體來(lái)說(shuō),他們采用了大約10個(gè)用 Python 編寫(xiě)的常用基因組學(xué)應(yīng)用程序,并使用 Codon 編譯它們,實(shí)現(xiàn)了比原始手工優(yōu)化實(shí)現(xiàn)快5到10倍的速度。
除了基因組學(xué),他們還探索了定量金融的應(yīng)用,定量金融同樣也需要也處理大數(shù)據(jù)集,并大量使用 Python,效果也非常顯著。
同時(shí),Codon平臺(tái)還有一個(gè)并行后端,可以讓用戶編寫(xiě)可以明確編譯為 GPU 或多核并行的Python 代碼,而這些任務(wù)傳統(tǒng)上需要一定的編程專業(yè)知識(shí)。
相關(guān)報(bào)道:
https://www.csail.mit.edu/news/python-based-compiler-achieves-orders-magnitude-speedups
https://dl.acm.org/doi/abs/10.1145/3578360.3580275
https://spectrum.ieee.org/python-compiler