甚至比 C 的速度還快,現(xiàn)在已在 GitHub 上可用。
自深度學(xué)習(xí)興起以來(lái),Python 一直是最熱門的編程語(yǔ)言之一,它在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域占主導(dǎo)地位,甚至是科學(xué)和數(shù)學(xué)計(jì)算領(lǐng)域的主角。如今你能想象到的任何項(xiàng)目,幾乎都可以找到一個(gè)相應(yīng)的 Python 包。
然而,盡管高級(jí)語(yǔ)言的簡(jiǎn)化語(yǔ)法使其易于學(xué)習(xí)和使用,但和 C 或 C++ 等低級(jí)語(yǔ)言相比,它的速度更慢。
麻省理工學(xué)院計(jì)算機(jī)科學(xué)與人工智能實(shí)驗(yàn)室(CSAIL)的研究人員希望通過(guò) Codon 來(lái)改變這一現(xiàn)狀,Codon 是一種基于 Python 的編譯器,允許用戶編寫(xiě)與 C 或 C++ 程序一樣高效運(yùn)行的 Python 代碼,同時(shí)可以定制和適應(yīng)不同的需求和環(huán)境。
該研究的最新論文《Codon: A Compiler for High-Performance Pythonic Applications and DSLs》發(fā)表在了 2 月份的第 32 屆 ACM SIGPLAN 編譯器構(gòu)建國(guó)際會(huì)議上。
項(xiàng)目鏈接:https://github.com/exaloop/codon
論文:https://dl.acm.org/doi/abs/10.1145/3578360.3580275
在開(kāi)發(fā)工作中,人們需要使用編譯器將源代碼轉(zhuǎn)換為可由計(jì)算機(jī)處理器執(zhí)行的機(jī)器代碼,Codon 能幫助開(kāi)發(fā)者在 Python 中創(chuàng)建新的領(lǐng)域特定語(yǔ)言(DSL),同時(shí)仍然獲得其他語(yǔ)言的性能優(yōu)勢(shì)。
「常規(guī) Python 會(huì)被編譯成所謂的字節(jié)碼,該字節(jié)碼在虛擬機(jī)中執(zhí)行,這就會(huì)讓速度慢上很多,」Codon 論文的主要作者 Ariya Shajii 表示,「通過(guò) Codon,我們則進(jìn)行本地編譯,因此你可以直接在 CPU 上運(yùn)行最終結(jié)果 —— 不經(jīng)過(guò)中間虛擬機(jī)或解釋器?!?/p>
Codon 的編譯管道包括類型檢查,使其能夠更高效地運(yùn)行 Python 代碼。
基于 Python 的編譯器帶有適用于 Linux 和 macOS 的預(yù)構(gòu)建二進(jìn)制文件,你還可以從源代碼構(gòu)建或生成可執(zhí)行文件。「使用 Codon,你可以像 Python 一樣分發(fā)源代碼,或者你可以將它編譯成二進(jìn)制文件,」Shajii 說(shuō)?!溉绻阆敕职l(fā)一個(gè)二進(jìn)制文件,它將與像 C++ 這樣的語(yǔ)言一樣,例如一個(gè) Linux 二進(jìn)制文件或一個(gè) Mac 二進(jìn)制文件?!?/p>
為了讓 Codon 更快,研究人員決定在編譯時(shí)執(zhí)行類型檢查。類型檢查涉及將數(shù)據(jù)類型(例如整數(shù)、字符串、字符或浮點(diǎn)數(shù)等)分配給值。例如數(shù)字 5 可以分配為整數(shù),字母 c 可以分配為字符,單詞 hello 可以分配為字符串,十進(jìn)制數(shù) 3.14 可以分配為浮點(diǎn)數(shù)。
「在常規(guī) Python 中,所有類型都給了 runtime,」Shajii 介紹道?!甘褂?Codon,我們?cè)诰幾g過(guò)程中進(jìn)行類型檢查,這讓我們避免了在 runtime 進(jìn)行所有昂貴的類型操作。」
MIT CSAIL 首席研究員 Saman Amarasinghe 補(bǔ)充說(shuō),「如果你有一種動(dòng)態(tài)語(yǔ)言(比如 Python),每次你有一些數(shù)據(jù)時(shí),你都需要在它周圍保留很多額外的元數(shù)據(jù),以確定 runtime 的類型。Codon 取消了這種元數(shù)據(jù),因此代碼速度更快,數(shù)據(jù)更小?!?/p>
根據(jù) Shajii 的說(shuō)法,Codon 在運(yùn)行時(shí)沒(méi)有任何不必要的數(shù)據(jù)或類型檢查,所以開(kāi)銷為零。在性能方面,「Codon 通常與 C++ 不相上下。與 Python 相比,我們通??吹降氖?10 到 100 倍的速度改進(jìn)?!?/p>
另一方面,Codon 的方法有其權(quán)衡。「我們進(jìn)行這種靜態(tài)類型檢查,并且不允許使用 Python 的一些動(dòng)態(tài)特性,比如在 runtime 動(dòng)態(tài)更改類型,」Shajii 表示。
「還有一些 Python 庫(kù)我們還沒(méi)有實(shí)現(xiàn)?!笰marasinghe 補(bǔ)充說(shuō),「Python 已經(jīng)過(guò)無(wú)數(shù)人的實(shí)際測(cè)試,而 Codon 還沒(méi)有達(dá)到那樣的水平,它需要運(yùn)行更多的程序,獲得更多的反饋,并加固更多。達(dá)到常規(guī) Python 的穩(wěn)定水平需要一些時(shí)間?!?/p>
Codon 最初設(shè)計(jì)用于基因組學(xué)和生物信息學(xué)的工作。研究人員嘗試了大約 10 個(gè)用 Python 編寫(xiě)的常用基因組學(xué)應(yīng)用程序,并使用 Codon 對(duì)其進(jìn)行了編譯,與最初的手動(dòng)優(yōu)化實(shí)現(xiàn)相比實(shí)現(xiàn)了 5 到 10 倍的加速。
「如今這些領(lǐng)域的數(shù)據(jù)集已變得非常大,而像 Python 和 R 這樣的高級(jí)語(yǔ)言速度太慢,無(wú)法處理每組測(cè)序 TB 級(jí)的數(shù)據(jù)量,」Shajii 說(shuō)道?!高@就是我們想要填補(bǔ)的空白 —— 通過(guò)構(gòu)建一種無(wú)需寫(xiě) C 或 C++ 代碼即可處理大數(shù)據(jù)的方法,從而為非計(jì)算機(jī)科學(xué)或?qū)I(yè)開(kāi)發(fā)者的領(lǐng)域?qū)<姨峁椭!?/p>
上述圖表在幾個(gè)基準(zhǔn)上比較了 Python(CPython 3)、PyPy、Codon 和 C++ 的性能。y 軸顯示 Codon 實(shí)現(xiàn)相對(duì)于 CPython 實(shí)現(xiàn)的加速。MIT/EXALOOP/UNIVERSITY OF VICTORIA/ACM
除了基因組學(xué),Codon 還可以應(yīng)用于處理海量數(shù)據(jù)集的類似應(yīng)用程序,以及基于 Python 的編譯器支持的 GPU 編程和并行編程等領(lǐng)域。事實(shí)上,Codon 現(xiàn)在正通過(guò)初創(chuàng)公司 Exaloop 在生物信息學(xué)、深度學(xué)習(xí)和量化金融領(lǐng)域進(jìn)行商業(yè)應(yīng)用,Shajii 創(chuàng)立了該公司,旨在將 Codon 從學(xué)術(shù)項(xiàng)目轉(zhuǎn)變?yōu)樾袠I(yè)應(yīng)用。
為了使 Codon 能夠適應(yīng)不同領(lǐng)域,該團(tuán)隊(duì)開(kāi)發(fā)了一個(gè)插件系統(tǒng)?!杆拖褚粋€(gè)可擴(kuò)展的編譯器,」Shajii 說(shuō)道?!改憧梢詾榛蚪M學(xué)或其他領(lǐng)域編寫(xiě)插件,這些插件可以有新的庫(kù)和新的編譯器優(yōu)化?!?/p>
此外,公司和機(jī)構(gòu)可以使用 Codon 來(lái)制作原型和開(kāi)發(fā)自己的應(yīng)用程序?!肝覀兛吹降囊环N模式是:人們使用 Python 進(jìn)行原型設(shè)計(jì)和測(cè)試,因?yàn)樗子谑褂?,但到了某些重要事?xiàng)上,他們就不得不重寫(xiě)應(yīng)用程序,或讓其他人用 C 或 C++ 在更大的數(shù)據(jù)集上進(jìn)行重寫(xiě)與測(cè)試,」Shajii 表示?!竿ㄟ^(guò) Codon,你就可以完全使用 Python,并獲得兩全其美的好處?!?/p>
關(guān)于 Codon 的未來(lái),Shajii 和他的團(tuán)隊(duì)目前正在研究廣泛使用的 Python 庫(kù)的本地實(shí)現(xiàn),以及特定于庫(kù)的優(yōu)化,以幫助人們從這些庫(kù)中獲得更好的性能。他們還計(jì)劃創(chuàng)建一個(gè)廣受歡迎的功能:Codon 的 WebAssembly 后端,以支持在 Web 瀏覽器上運(yùn)行代碼。
審核編輯 :李倩
-
C++
+關(guān)注
關(guān)注
22文章
2116瀏覽量
74603 -
編譯器
+關(guān)注
關(guān)注
1文章
1653瀏覽量
49751 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8481瀏覽量
133876
原文標(biāo)題:這款編譯器能讓Python和C++一樣快!最高提速百倍,MIT出品!
文章出處:【微信號(hào):CVer,微信公眾號(hào):CVer】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
SEGGER編譯器優(yōu)化和安全技術(shù)介紹 支持最新C和C++語(yǔ)言

C++編譯器數(shù)值性能比較
英特爾C++和Fortran編譯器的逐漸優(yōu)化過(guò)程介紹
MATLAB 64位C語(yǔ)言和C++編譯器應(yīng)用程序免費(fèi)下載

阿里云基礎(chǔ)軟件C/C++編譯器的工作現(xiàn)狀及挑戰(zhàn)

C/C++編譯器的缺省字節(jié)對(duì)齊方式
RX系列V3.06.00的C/C++編譯器包數(shù)據(jù)手冊(cè)

C7000優(yōu)化C/C++編譯器

TMS320C6000優(yōu)化C/C++編譯器v8.3.x

MSP430優(yōu)化C/C++編譯器v21.6.0.LTS

評(píng)論