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