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

Unladen Swallow項(xiàng)目計(jì)劃:提高Python速度5倍

系統(tǒng) Linux 后端
Google的Python工程師發(fā)布了一個(gè)新項(xiàng)目,目的是讓Python的速度提高至少5倍。新項(xiàng)目名叫Unladen Swallow,意圖尋找新的Python解釋程序虛擬機(jī),新的JIT編譯引擎。第一季度的目標(biāo)是實(shí)現(xiàn)25-35%的性能提升,目前已經(jīng)完成,代碼發(fā)布在Google Code 網(wǎng)站上。更多內(nèi)容和介紹見(jiàn)內(nèi)

Google的Python工程師發(fā)布了一個(gè)新項(xiàng)目,目的是讓Python的速度提高至少5倍。新項(xiàng)目名叫Unladen Swallow,意圖尋找新的Python解釋程序虛擬機(jī),新的JIT編譯引擎。***季度的目標(biāo)是實(shí)現(xiàn)25-35%的性能提升,目前已經(jīng)完成,代碼發(fā)布在Google Code 網(wǎng)站上。更多內(nèi)容和介紹見(jiàn)內(nèi)

目標(biāo)

我們要讓Python變的更快,同時(shí)我們也希望讓大型的,完好的現(xiàn)存應(yīng)用無(wú)痛苦的轉(zhuǎn)而使用Unladen Swallow項(xiàng)目。

   1. 創(chuàng)建一個(gè)比CPython速度至少快5倍的新Python版本。
   2. Python應(yīng)用的表現(xiàn)應(yīng)該非常穩(wěn)定。
   3. 維持與CPython應(yīng)用程序在源代碼級(jí)別的兼容。
   4. 維持于CPython擴(kuò)展模塊在源代碼級(jí)別的兼容。
   5. 我們并不是要維護(hù)一個(gè)長(zhǎng)期的Python實(shí)現(xiàn);我們把這個(gè)項(xiàng)目當(dāng)作一個(gè)開(kāi)發(fā)分支(branch),而不是一個(gè)版本分支(fork)。

項(xiàng)目概括

為了實(shí)現(xiàn)我們對(duì)于性能和兼容性的目標(biāo),我們選擇對(duì)CPython進(jìn)行修改,而不是從零開(kāi)始開(kāi)發(fā)這個(gè)實(shí)現(xiàn)。值得強(qiáng)調(diào)的是,我們選擇從 CPython 2.6.1著手:Python 2.6與2.4/2.5(當(dāng)前為大多數(shù)有價(jià)值的應(yīng)用使用)和Python 3.0(未來(lái)的***版本)都有可以很好的共存。從一個(gè)CPython的版本著手可以是我們避免重新實(shí)現(xiàn)大量的內(nèi)置函數(shù),對(duì)象和標(biāo)準(zhǔn)庫(kù)的模塊,同時(shí)讓我們重用一些現(xiàn)存且常用的CPython的C語(yǔ)言擴(kuò)展API。從一個(gè)2.x CPthon可以讓我們更輕松的遷移現(xiàn)存的應(yīng)用程序;假設(shè)我們從3.x開(kāi)始,并且要求大型應(yīng)用程序的維護(hù)者們率先遷移他們的程序,那對(duì)我們項(xiàng)目的受眾來(lái)說(shuō)是不切實(shí)際的。

我們的主要工作是集中力量提高Python代碼的執(zhí)行速度,而不會(huì)在Python的運(yùn)行時(shí)庫(kù)上過(guò)多的努力。我們的長(zhǎng)期計(jì)劃是是使用一個(gè)創(chuàng)建在LLVM基礎(chǔ)上的JIT來(lái)代替CPython傳統(tǒng)的虛擬機(jī),同時(shí)盡量少的影響Python的運(yùn)行模式的其他部分。通過(guò)觀察,我們發(fā)現(xiàn)Python 的應(yīng)用程序把大量的運(yùn)行時(shí)間花費(fèi)在了主eval循環(huán)。尤其是,即對(duì)例如操作碼調(diào)度(opcode dispatch)這樣虛擬機(jī)部件的微小調(diào)整也能對(duì)Python的運(yùn)行性能產(chǎn)生重大影響。我們相信通過(guò)LLVM的JIT引擎把Python代碼編譯為機(jī)器碼將會(huì)帶來(lái)更多的益處。

一些顯著的好處:

    * 轉(zhuǎn)向JIT能讓我們把Python從基于堆棧的機(jī)(stack-based machine)轉(zhuǎn)為一個(gè)基于寄存器的機(jī)(register machine),實(shí)踐證明這種轉(zhuǎn)變提升了另一個(gè)類(lèi)似語(yǔ)言的性能。
    * 其他的先不提,單是消除對(duì)收發(fā)操作碼(opcodes)的需要本身已經(jīng)是一項(xiàng)勝利。請(qǐng)參考http://bugs.python.org/issue4753上一個(gè)當(dāng)前CPython對(duì)操作碼發(fā)送變化的敏感性的討論。
    * 目前的CPython虛擬機(jī)操作碼接受/發(fā)送限制使進(jìn)進(jìn)一步的性能優(yōu)化變得幾乎不可能。舉例來(lái)說(shuō),我們想實(shí)現(xiàn)數(shù)據(jù)類(lèi)型回饋(type feedback)和動(dòng)態(tài)的重新編譯(dynamic recompilation ala SELF-93),但是我們認(rèn)為用CPython編譯的二進(jìn)制代碼來(lái)實(shí)現(xiàn)多態(tài)性?xún)?nèi)聯(lián)高速緩存(polymorphic inline caches)將是無(wú)法接受的慢。
    * LLVM尤為值得注意。那是因?yàn)樗鼮槎鄠€(gè)平臺(tái)生成代碼功能(codegen)的易用性,和它具有把C和C++編譯為同種中間代碼——這正是我們想要帶給 Python的。它能夠讓內(nèi)聯(lián)和交錯(cuò)解析(inlining and analysis)成為可能,消除這個(gè)當(dāng)前Python和C之間的障礙。

有了產(chǎn)生機(jī)器碼的框架,我們就可以把Python編譯為更加高效的實(shí)現(xiàn)。以以下這段代碼為例:

    for i in range(3):

         foo(i)

目前它將被低效的翻譯成這樣

    $x = range(3)

    while True:

         try:

             i = $x.next()

         except StopIteration:

             break

         foo(i)

一旦我們有了知道range()代表range()內(nèi)置函數(shù)的辦法,我們可以把它變?yōu)轭?lèi)似這樣

    for (i = 0; i < 3; i++)

         foo(i)

在C語(yǔ)言里,使用unboxed數(shù)據(jù)類(lèi)型進(jìn)行數(shù)學(xué)運(yùn)算,可以把這個(gè)循環(huán)展開(kāi)為

    foo(0)

    foo(1)

    foo(2)

我們有意將Unladen Swallow的內(nèi)部結(jié)構(gòu)設(shè)計(jì)為支持多內(nèi)核。服務(wù)器將來(lái)只會(huì)有越來(lái)越多的內(nèi)核,我們要發(fā)掘這一點(diǎn),從而可以在并行結(jié)構(gòu)中完成更多的工作。例如,我們可以用一個(gè)內(nèi)核作為并行優(yōu)化器,它能在代碼運(yùn)行的時(shí)候進(jìn)行日益昂貴(重要)的代碼優(yōu)化,用另一個(gè)內(nèi)核來(lái)執(zhí)行代碼本身。我們也在考慮實(shí)現(xiàn)一個(gè)并行的GC,利用另一個(gè)內(nèi)核來(lái)釋放內(nèi)存模塊。由于大多數(shù)工業(yè)級(jí)的服務(wù)器都具有4到32個(gè)內(nèi)核,我們相信這項(xiàng)優(yōu)化的收益是一筆潛在的財(cái)富。然而,我們還是要關(guān)注高度并行的應(yīng)用程序的需要,而不能盲目的消耗掉這些內(nèi)核。

強(qiáng)調(diào)一下,這里的很多領(lǐng)域已經(jīng)被其他的一些動(dòng)態(tài)語(yǔ)言考慮或者實(shí)現(xiàn)過(guò)了,例如jRuby,Rubinius和Parrot, 更包括像Jython,PyPy和IronPython這些其他的Python實(shí)現(xiàn)。我們正在從這些其他實(shí)現(xiàn)里尋找有關(guān)調(diào)試信息,正則性能以及其他提高動(dòng)態(tài)語(yǔ)言性能的點(diǎn)子。這是一條已經(jīng)被很多人走過(guò)的路,我們需要盡量避免重新發(fā)明輪子的困境。計(jì)劃藍(lán)圖

Unladen Swallow 將會(huì)每3個(gè)月發(fā)行一個(gè)新版本,發(fā)行期間進(jìn)行bug修復(fù)。

2009 ***階段 (Q1)

Q1主要用來(lái)對(duì)顯存的CPython實(shí)現(xiàn)進(jìn)行相對(duì)小的修改。我們的目標(biāo)是在目前的基線(xiàn)上實(shí)現(xiàn)25-35%的性能提升。這個(gè)階段的目標(biāo)是相對(duì)保守的,我們想盡可能快的給客戶(hù)應(yīng)用程序一些看得見(jiàn)的性能優(yōu)化,而不是要他們等到整個(gè)項(xiàng)目完成。

2009 第二階段 (Q2)

Q2會(huì)集中力量來(lái)廢除Python的虛擬機(jī),并用一個(gè)具有相同功能的基于LLVM的實(shí)現(xiàn)將其代替。我們預(yù)期將會(huì)有一些性能提升,不過(guò)那不是2009Q2的主要任務(wù)。我們主要是要得到一個(gè)建立在LLVM之上的可以運(yùn)行的東西。給它提速是本階段之后的人物。


2009 第三階段(Q3)以及將來(lái)

從Q3開(kāi)始的任務(wù)將是“簡(jiǎn)單的“做好這些作業(yè)。我們不渴望做原創(chuàng)工作,而是盡可能的利用近30年來(lái)的研究成果。請(qǐng)移步相關(guān)論文來(lái)瀏覽我們打算實(shí)現(xiàn)內(nèi)容的論文清單的一部分(遠(yuǎn)不及全部)。
我們計(jì)劃強(qiáng)調(diào)對(duì)正則引擎何其他被確定為性能瓶頸的擴(kuò)展模塊的考慮。然而,正則表達(dá)式已經(jīng)被確定為一個(gè)很好的目標(biāo)并且會(huì)是我們考慮***個(gè)進(jìn)行優(yōu)化的領(lǐng)域。
另外,我們打算去除Python的GIL和多線(xiàn)程的狀態(tài)。我們相信通過(guò)實(shí)現(xiàn)一個(gè)更高級(jí)的GC,這一點(diǎn)是可以實(shí)現(xiàn)的,類(lèi)似IBM的Recycler。
我們的長(zhǎng)期目標(biāo)是讓Python的速度快到可以從把那些為了速度而使用C實(shí)現(xiàn)的類(lèi)型重新用Python取代。
2009Q3準(zhǔn)確的性能優(yōu)化目標(biāo)會(huì)在Q2的期間確定。 原文鏈接: http://code.google.com/p/unladen-swallow/wiki/Proj ectPlan

譯文鏈接: http://danmarner.yo2.cn/unladen-swallow-project-pl an

原著: Google 譯者: DaNmarner

歡迎轉(zhuǎn)載,請(qǐng)保留原/譯文鏈接。

=========================

Unladen Swallow項(xiàng)目計(jì)劃——優(yōu)化Python計(jì)劃
注:所有引用資料的鏈接見(jiàn)相關(guān)論文。

【編輯推薦】

  1. 嵌入式系統(tǒng)Linux內(nèi)核開(kāi)發(fā)實(shí)戰(zhàn)指南
  2. 嵌入式設(shè)備上的 Linux 系統(tǒng)開(kāi)發(fā)
  3. Linux模塊你能結(jié)課了嗎?
責(zé)任編輯:張燕妮 來(lái)源: Linux論壇
相關(guān)推薦

2009-03-30 09:01:09

Python性能Unladen SwaGoogle

2009-07-15 09:10:27

Unladen SwaPython性能

2017-10-20 10:09:01

代碼CocoaPods編譯

2023-05-04 07:34:37

Rust代碼CPU

2022-04-27 09:24:22

前端代碼速度

2021-07-21 17:03:35

Chrome網(wǎng)絡(luò)釣魚(yú)瀏覽器

2020-02-14 09:40:14

人工智能機(jī)器學(xué)習(xí)技術(shù)

2018-09-19 15:46:51

編程語(yǔ)言Python編譯器

2021-05-12 11:19:08

DevTools堆棧追蹤

2018-10-07 05:27:03

Python代碼機(jī)器學(xué)習(xí)

2024-03-11 15:47:11

RustPython代碼

2019-09-24 09:25:05

Vue項(xiàng)目加載

2012-10-30 14:08:59

Titan超級(jí)計(jì)算機(jī)NVIDIA

2024-02-07 13:37:39

AWS系統(tǒng)應(yīng)用程序

2018-03-12 09:26:31

C++IBM數(shù)據(jù)

2018-10-25 10:46:21

互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)

2018-10-24 14:15:15

機(jī)器學(xué)習(xí)人工智能谷歌

2012-07-11 14:41:45

Wabacus

2018-11-26 12:29:27

2025-03-07 10:02:10

點(diǎn)贊
收藏

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