
Python貓注:在今年5月的 Python 語言峰會上,Guido van Rossum 作了一場《Making CPython Faster》的分享(材料在此),宣告他加入了激動人心的“香農(nóng)計劃”,旨在 4 年內(nèi)提升 Python 性能至 5 倍。近日,Guido 上了一檔英文播客節(jié)目(時長 30 分鐘),談?wù)摿怂谧龅呐c高性能相關(guān)的工作,解答了幾個問題。播客作者整理了一份內(nèi)容紀要,本文是對該紀要的翻譯。
作者:Software at Scale
譯者:豌豆花下貓
Guido:在某種意義上,它對我來說是一個相對舒服的話題,因為這意味著與 Python 的核心打交道,而我對這方面還算熟悉。當我在微軟工作時,我曾短暫地關(guān)注過 Azure,但我意識到我在谷歌或 Dropbox 時就不喜歡這類工作。然后我關(guān)注了機器學(xué)習(xí),但這需要花很多時間來做一些與 Python 無關(guān)的事情,甚至它與 Python 相關(guān)的部分就很少。
Guido:我喜歡他思考問題的方式。大多數(shù)其它聚焦于 Python 性能的方法,如 PyPy 和 Cinder,并不適用于所有的使用場景,因為它們不能向后兼容擴展模塊。Mark 具有 CPython 開發(fā)者的視角和經(jīng)驗,并且有一種可行的方法來維持向后兼容性,這是最難解決的問題。Python 的字節(jié)碼解釋器經(jīng)常要在小版本之間(例如 3.8→3.9)進行修改,原因有很多,比如新的操作碼,所以修改它是一種相對安全的方案。
Guido:當執(zhí)行一個程序時,你不知道它會在運行了幾分之一毫秒后崩潰,還是會持續(xù)運行三周時間。因為對于同一份代碼,在第一種情況下,它可能觸發(fā)了一個 bug。如果運行程序需要三周時間,也許提前半小時優(yōu)化所有待運行的代碼是有意義的。
但很明顯,特別是在像 Python 這樣的動態(tài)語言中,我們盡可能多地做,而不要求用戶告訴我們他們到底需要怎么做,你只是想盡快開始執(zhí)行代碼。所以,如果有一個小腳本,或者一個大程序,它碰巧執(zhí)行失敗了或者因為某些原因提前退出了,你就不用花費時間去優(yōu)化全部的代碼了。
所以,我們要做的就是保持字節(jié)碼編譯器的簡單化,以便能盡快地開始執(zhí)行代碼。如果有某些函數(shù)被多次執(zhí)行,那么我們就稱其為 hot 函數(shù)?!癶ot”存在多種定義。在某些情況下,如果一個函數(shù)被調(diào)用超過一次,或者超過兩次,或者超過 10 次,那么它被定義成一個熱門函數(shù)。而在其它保守的情況下,你可能說“只有被調(diào)用 1000 次才算 hot”。
然后,當參數(shù)的類型是某些特定類型時,專門化的自適應(yīng)編譯器(PEP-659 Specializing Adaptive Compiler)會嘗試用更快的字節(jié)碼來替換某些字節(jié)碼。一個簡單的假想的例子是 Python 中的加號運算符,它可以令很多對象相加,比如整數(shù)、字符串、列表,甚至元組。但是,你不能將整數(shù)與字符串相加。
因此,優(yōu)化的方法就是提供一個單獨的“兩個整數(shù)相加”的字節(jié)碼,它是一個對用戶隱藏的第二層字節(jié)碼。(“優(yōu)化”通常被稱為加速 quickening,但一般在我們的語境中,我們稱之為專門化 specializing)。這個操作碼假設(shè)它的兩個參數(shù)都是真正的 Python 整型對象,直接讀取這些對象的值,并在機器寄存器中將這些值相加,最后將結(jié)果推回堆棧。
兩個整數(shù)相加的操作仍然需要對參數(shù)進行類型檢查。因此,它不是完全不受約束的,但這種類型檢查相比于完全泛化的面向?qū)ο蟮募犹柌僮?,前者在實現(xiàn)上要快得多。
最后,有可能一個函數(shù)被整型參數(shù)調(diào)用了數(shù)百萬次,然后突然一小段代碼用浮點型參數(shù)調(diào)用它,或者出現(xiàn)更糟的情況。此時,解釋器會直接執(zhí)行原始的字節(jié)碼。這是一個重要的部分,讓你始終能得到完整的 Python 語義。
Python貓注:“香農(nóng)計劃”的最終目標是將解釋器的執(zhí)行過程分層,并對不同層做出定制的優(yōu)化。
Guido:即時編譯的方案有一大堆我們想要避免的情感包袱。比如,我們不清楚到底編譯什么,以及什么時候編譯。在程序開始執(zhí)行之前,解釋器將源代碼編譯成字節(jié)碼,然后,再將字節(jié)碼轉(zhuǎn)換為專門的字節(jié)碼。這意味著,所有的事情都在運行時的某個時刻發(fā)生,那么,哪個部分是所謂的即時(Just-In-Time)呢?
另外,人們通常認為 JIT 會自動地使所有代碼變得更好。不幸的是,你通常無法真正地預(yù)測代碼的性能。由于有現(xiàn)代的 CPU 和它們神奇的分支預(yù)測,我們已經(jīng)擁有了足夠的性能。例如,我們以一種本認為能夠明顯減少內(nèi)存訪問次數(shù)的方式,編寫了一份代碼。但是,當對它進行基準測試時,我們發(fā)現(xiàn)它的運行速度與舊的未優(yōu)化代碼一樣快,因為 CPU 在沒有我們?nèi)魏螏椭那闆r下,計算出了優(yōu)化的訪問模式。我希望我知道現(xiàn)代 CPU 在分支預(yù)測和內(nèi)聯(lián)緩存方面做了什么,因為這就像是魔法一般。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認 ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準 ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03