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