計劃于 4 月發布的 Fedora 32 有望給Python 開發者帶來驚喜。Fedora 項目的變更介紹頁面顯示,在構建 Python 解釋器時,開發團隊添加了-fno-semantic-interposition編譯器/鏈接器標志(compiler/linker flag),它將會顯著提升性能,當然具體的性能改進效果取決于工作負載,官方提供的數據是最多可以提升 27%。
諸如 nbody,scimark,django,光線跟蹤之類的測試用例提升了 20% 至 27% 的性能,而通過 PyPerformance 測得的性能提高了 5% 至 20%。
而這給用戶帶來的變化是他們將不再能夠使用 LD_PRELOAD 覆蓋來自 libpython 的符號,不過官方認為這是提升速度的不錯的折衷方案。
根據 GCC 關于語義插入(semantic interposition)標記的文檔,“某些對象格式,例如 ELF,允許動態鏈接器插入符號。這意味著對于從 DSO 導出的符號,編譯器無法按預期在執行過程中傳播、內聯和其他優化,但相關的函數或變量會有變化。盡管該功能很有用,例如,通過調試實現重寫內存分配功能,但這在代碼質量方面是昂貴的。使用-fno-semantic-interposition,編譯器假定如果函數發生插入的情況,則覆蓋函數將具有完全相同的語義(和副作用)。類似的,如果變量發生插入的情況,則變量的構造函數也將相同。該標志對顯式聲明為內聯的函數無效,對弱聲明的符號同樣無效。”
據了解,這些改進最初是針對Fedora 32 開發的,Fedora 項目的開發人員當時在研究靜態鏈接 Python 的方案以提高性能。后來由于社區的反饋,他們縮小了范圍,只希望優化 Fedora 32 中的 Python,并將其限制為使用-fno-semantic-interposition編譯器標志來構建 Python。
-
python
+關注
關注
56文章
4807瀏覽量
84970
發布評論請先 登錄
相關推薦
評論