自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

這款編譯器能讓Python和C++一樣快:最高提速百倍,MIT出品

人工智能 新聞
甚至比 C 的速度還快,現(xiàn)在已在 GitHub 上可用。

自深度學(xué)習(xí)興起以來,Python 一直是最熱門的編程語言之一,它在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)領(lǐng)域占主導(dǎo)地位,甚至是科學(xué)和數(shù)學(xué)計(jì)算領(lǐng)域的主角。如今你能想象到的任何項(xiàng)目,幾乎都可以找到一個(gè)相應(yīng)的 Python 包。

然而,盡管高級(jí)語言的簡化語法使其易于學(xué)習(xí)和使用,但和 C 或 C++ 等低級(jí)語言相比,它的速度更慢。

麻省理工學(xué)院計(jì)算機(jī)科學(xué)與人工智能實(shí)驗(yàn)室(CSAIL)的研究人員希望通過 Codon 來改變這一現(xiàn)狀,Codon 是一種基于 Python 的編譯器,允許用戶編寫與 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)建國際會(huì)議上。

圖片

  • 項(xiàng)目鏈接:https://github.com/exaloop/codon
  • 論文:https://dl.acm.org/doi/abs/10.1145/3578360.3580275

在開發(fā)工作中,人們需要使用編譯器將源代碼轉(zhuǎn)換為可由計(jì)算機(jī)處理器執(zhí)行的機(jī)器代碼,Codon 能幫助開發(fā)者在 Python 中創(chuàng)建新的領(lǐng)域特定語言(DSL),同時(shí)仍然獲得其他語言的性能優(yōu)勢。

「常規(guī) Python 會(huì)被編譯成所謂的字節(jié)碼,該字節(jié)碼在虛擬機(jī)中執(zhí)行,這就會(huì)讓速度慢上很多,」Codon 論文的主要作者 Ariya Shajii 表示,「通過 Codon,我們則進(jìn)行本地編譯,因此你可以直接在 CPU 上運(yùn)行最終結(jié)果 —— 不經(jīng)過中間虛擬機(jī)或解釋器?!?/span>

圖片

Codon 的編譯管道包括類型檢查,使其能夠更高效地運(yùn)行 Python 代碼。

基于 Python 的編譯器帶有適用于 Linux 和 macOS 的預(yù)構(gòu)建二進(jìn)制文件,你還可以從源代碼構(gòu)建或生成可執(zhí)行文件?!甘褂?Codon,你可以像 Python 一樣分發(fā)源代碼,或者你可以將它編譯成二進(jìn)制文件,」Shajii 說。「如果你想分發(fā)一個(gè)二進(jìn)制文件,它將與像 C++ 這樣的語言一樣,例如一個(gè) Linux 二進(jìn)制文件或一個(gè) Mac 二進(jìn)制文件。」

為了讓 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過程中進(jìn)行類型檢查,這讓我們避免了在 runtime 進(jìn)行所有昂貴的類型操作?!?/span>

MIT CSAIL 首席研究員 Saman Amarasinghe 補(bǔ)充說,「如果你有一種動(dòng)態(tài)語言(比如 Python),每次你有一些數(shù)據(jù)時(shí),你都需要在它周圍保留很多額外的元數(shù)據(jù),以確定 runtime 的類型。Codon 取消了這種元數(shù)據(jù),因此代碼速度更快,數(shù)據(jù)更小?!?/span>

根據(jù) Shajii 的說法,Codon 在運(yùn)行時(shí)沒有任何不必要的數(shù)據(jù)或類型檢查,所以開銷為零。在性能方面,「Codon 通常與 C++ 不相上下。與 Python 相比,我們通常看到的是 10 到 100 倍的速度改進(jìn)?!?/span>

另一方面,Codon 的方法有其權(quán)衡?!肝覀冞M(jìn)行這種靜態(tài)類型檢查,并且不允許使用 Python 的一些動(dòng)態(tài)特性,比如在 runtime 動(dòng)態(tài)更改類型,」Shajii 表示。

「還有一些 Python 庫我們還沒有實(shí)現(xiàn)?!笰marasinghe 補(bǔ)充說,「Python 已經(jīng)過無數(shù)人的實(shí)際測試,而 Codon 還沒有達(dá)到那樣的水平,它需要運(yùn)行更多的程序,獲得更多的反饋,并加固更多。達(dá)到常規(guī) Python 的穩(wěn)定水平需要一些時(shí)間?!?/span>

Codon 最初設(shè)計(jì)用于基因組學(xué)和生物信息學(xué)的工作。研究人員嘗試了大約 10 個(gè)用 Python 編寫的常用基因組學(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í)語言速度太慢,無法處理每組測序 TB 級(jí)的數(shù)據(jù)量,」Shajii 說道?!高@就是我們想要填補(bǔ)的空白 —— 通過構(gòu)建一種無需寫 C 或 C++ 代碼即可處理大數(shù)據(jù)的方法,從而為非計(jì)算機(jī)科學(xué)或?qū)I(yè)開發(fā)者的領(lǐng)域?qū)<姨峁椭??!?/span>

圖片

上述圖表在幾個(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)在正通過初創(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ì)開發(fā)了一個(gè)插件系統(tǒng)?!杆拖褚粋€(gè)可擴(kuò)展的編譯器,」Shajii 說道。「你可以為基因組學(xué)或其他領(lǐng)域編寫插件,這些插件可以有新的庫和新的編譯器優(yōu)化?!?/span>

此外,公司和機(jī)構(gòu)可以使用 Codon 來制作原型和開發(fā)自己的應(yīng)用程序?!肝覀兛吹降囊环N模式是:人們使用 Python 進(jìn)行原型設(shè)計(jì)和測試,因?yàn)樗子谑褂?,但到了某些重要事?xiàng)上,他們就不得不重寫應(yīng)用程序,或讓其他人用 C 或 C++ 在更大的數(shù)據(jù)集上進(jìn)行重寫與測試,」Shajii 表示?!竿ㄟ^ Codon,你就可以完全使用 Python,并獲得兩全其美的好處?!?/span>

關(guān)于 Codon 的未來,Shajii 和他的團(tuán)隊(duì)目前正在研究廣泛使用的 Python 庫的本地實(shí)現(xiàn),以及特定于庫的優(yōu)化,以幫助人們從這些庫中獲得更好的性能。他們還計(jì)劃創(chuàng)建一個(gè)廣受歡迎的功能:Codon 的 WebAssembly 后端,以支持在 Web 瀏覽器上運(yùn)行代碼。

責(zé)任編輯:張燕妮 來源: 機(jī)器之心
相關(guān)推薦

2023-04-07 22:11:36

2010-01-14 14:55:14

C++編譯器

2022-12-12 13:36:04

Python編譯器

2010-01-18 10:34:21

C++編譯器

2010-01-21 09:11:38

C++編譯器

2010-01-18 10:28:15

C++編譯器

2010-10-20 13:43:37

C++編譯器

2010-01-14 15:29:44

C++編譯器

2010-02-03 13:14:03

C++編譯器命令

2010-01-12 16:42:59

C++編譯器

2010-01-21 09:26:53

CC++編譯器

2020-05-01 12:35:31

C++Python編程

2010-01-27 16:39:48

C++編譯器

2009-01-12 10:16:11

Visual C++編譯器選項(xiàng)設(shè)置

2023-07-31 07:33:04

Rust編譯器內(nèi)存

2010-01-27 14:48:55

優(yōu)秀C++編譯器

2014-03-03 10:00:53

編譯器集成開發(fā)環(huán)境

2010-01-08 16:00:46

C++編譯器

2012-02-09 09:14:32

C++

2010-01-13 17:12:26

C++編譯器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)