GitHub源碼處理提速 一趟掃描反而更慢
做文本處理的團(tuán)隊(duì)經(jīng)常會(huì)遇到類(lèi)似的情況一段代碼要在內(nèi)存里快速掃過(guò)把里面的字母統(tǒng)一折疊成小寫(xiě)供后面的大小寫(xiě)不敏感匹配使用。數(shù)據(jù)量一大第一反應(yīng)就是把檢測(cè)和轉(zhuǎn)換合并成一趟心想少讀一遍內(nèi)存總是快的。GitHub 工程師最近在博客里記錄了一次完整的對(duì)比實(shí)驗(yàn)結(jié)論和直覺(jué)正好相反兩趟分開(kāi)做吞吐量是融合方案的 2.6 倍。融合一趟為什么輸給了拆成兩趟這個(gè)問(wèn)題的場(chǎng)景是處理源代碼文本在 64 位系統(tǒng)上每 16 字節(jié)檢測(cè)一次用兩個(gè) u64 通道做或運(yùn)算再拿一個(gè) 0x8080_8080_8080_8080 掩碼檢查高位。檢測(cè)階段不寫(xiě)內(nèi)存轉(zhuǎn)換階段用向量化指令一次處理 16 字節(jié)。先試的是把兩者融合檢測(cè)到非 ASCII 字符就當(dāng)場(chǎng)轉(zhuǎn)換數(shù)據(jù)只讀一遍。結(jié)果很尷尬吞吐量只有 8.7 GiB/s。拆成兩階段后先無(wú)分支地掃描確認(rèn) ASCII 前綴再單獨(dú)做向量化轉(zhuǎn)換吞吐量到了 23 GiB/s——將近三倍差距。問(wèn)題出在分支上。融合方案每 16 字節(jié)就要做一次分支判斷編譯器看到分支就沒(méi)法對(duì)整個(gè)循環(huán)做向量化內(nèi)層轉(zhuǎn)換即使還能向量化也扛不住外層分支帶來(lái)的延遲。GitHub 工程師的判斷是在熱點(diǎn)循環(huán)里分支開(kāi)銷(xiāo)對(duì)性能的殺傷力遠(yuǎn)大于多讀一遍數(shù)據(jù)。數(shù)據(jù)訪問(wèn)次數(shù)減半但分支導(dǎo)致編譯器放棄優(yōu)化整體反而更慢。預(yù)分配緩沖區(qū)里的第二個(gè)取舍兩階段方案還有個(gè)細(xì)節(jié)為了避免內(nèi)存增長(zhǎng)觸發(fā)的重分配用預(yù)分配緩沖區(qū)只在必要時(shí)才擴(kuò)展。這換來(lái)了另一個(gè)權(quán)衡——檢測(cè)階段和轉(zhuǎn)換階段都要讀一遍數(shù)據(jù)內(nèi)存帶寬壓力是融合方案的兩倍。這里其實(shí)是兩個(gè)取舍疊在一起一個(gè)是少讀數(shù)據(jù)對(duì)無(wú)分支可向量化另一個(gè)是避免重分配對(duì)帶寬翻倍。GitHub 的結(jié)論是前者后者都選了后者實(shí)測(cè)數(shù)據(jù)支持這個(gè)選擇。但不要把這個(gè)結(jié)論推廣成兩趟永遠(yuǎn)比一趟快。這次能贏前提是檢測(cè)階段做到了完全無(wú)分支并且轉(zhuǎn)換階段能被編譯器向量化。如果檢測(cè)邏輯本身復(fù)雜到無(wú)法消除分支或者數(shù)據(jù)源不在內(nèi)存里而在磁盤(pán)上兩趟讀的成本結(jié)構(gòu)就完全不一樣了。融合方案在有些場(chǎng)景仍然合理這次實(shí)驗(yàn)說(shuō)明的是少讀一遍數(shù)據(jù)不值得用分支換。對(duì)做底層優(yōu)化的工程師來(lái)說(shuō)這類(lèi)經(jīng)驗(yàn)在編譯器后端、文本編輯器的語(yǔ)法高亮、數(shù)據(jù)清洗工具里都很常見(jiàn)。很多團(tuán)隊(duì)優(yōu)化熱點(diǎn)路徑時(shí)第一個(gè)想到的就是減少內(nèi)存訪問(wèn)次數(shù)畢竟帶寬在紙面上是最貴的資源。但編譯器優(yōu)化和 CPU 分支預(yù)測(cè)的實(shí)際行為往往比內(nèi)存帶寬更能決定吞吐量。實(shí)測(cè)里有個(gè)容易被忽略的細(xì)節(jié)兩階段方案里內(nèi)層 block convert 仍然向量化成了單個(gè) 16 字節(jié)操作。也就是說(shuō)把檢測(cè)和轉(zhuǎn)換分開(kāi)反而讓每一半都能獨(dú)立優(yōu)化到極致——檢測(cè)無(wú)分支無(wú)存儲(chǔ)轉(zhuǎn)換向量化無(wú)分支。各自做到最好合起來(lái)比勉強(qiáng)融合更強(qiáng)。目前沒(méi)有公開(kāi)信息說(shuō)明這個(gè)算法在不同架構(gòu)比如 32 位或 ARM上的表現(xiàn)也沒(méi)有部署成本和維護(hù)復(fù)雜度的數(shù)據(jù)。GitHub 分享的主要是一個(gè)優(yōu)化思路當(dāng)你在熱點(diǎn)循環(huán)里糾結(jié)要不要省一次內(nèi)存訪問(wèn)時(shí)先想想分支會(huì)不會(huì)讓編譯器放棄向量化。這個(gè)取舍的順序比少讀一遍本身更值得記下來(lái)。關(guān)于維基框架維基框架關(guān)注企業(yè)應(yīng)用開(kāi)發(fā)中的長(zhǎng)期維護(hù)問(wèn)題。在實(shí)際項(xiàng)目中業(yè)務(wù)系統(tǒng)往往同時(shí)涉及權(quán)限、微服務(wù)、接口協(xié)議、部署環(huán)境等復(fù)雜因素因此我們希望提供一套更容易擴(kuò)展和維護(hù)的基礎(chǔ)框架。官網(wǎng)framewiki.comGiteegitee.com/wiki-frameworkGitHubgithub.com/wiki-framework示例項(xiàng)目gitee.com/cdkjframework/framewiki-example 許可證MulanPSL-2.0木蘭寬松許可證第2版

相關(guān)新聞

從0到月銷(xiāo)5000冊(cè):一位插畫(huà)師轉(zhuǎn)型AI繪本創(chuàng)業(yè)者的全周期路徑(含MidJourney+ChatGPT+Canva自動(dòng)化工作流)

從0到月銷(xiāo)5000冊(cè):一位插畫(huà)師轉(zhuǎn)型AI繪本創(chuàng)業(yè)者的全周期路徑(含MidJourney+ChatGPT+Canva自動(dòng)化工作流)

更多請(qǐng)點(diǎn)擊: https://kaifayun.com 第一章:AI生成兒童繪本的商業(yè)價(jià)值與市場(chǎng)定位 AI生成兒童繪本正從技術(shù)實(shí)驗(yàn)快速邁向規(guī)模化商業(yè)落地,其核心價(jià)值在于顯著壓縮內(nèi)容生產(chǎn)周期、降低創(chuàng)作門(mén)檻,并實(shí)現(xiàn)個(gè)性化內(nèi)容按需交付。傳統(tǒng)繪本出版…

2026/8/3 17:09:00 閱讀更多
為什么92.7%的AI自媒體失???揭穿3大認(rèn)知陷阱,第2個(gè)連頭部MCN都在偷偷修正

為什么92.7%的AI自媒體失???揭穿3大認(rèn)知陷阱,第2個(gè)連頭部MCN都在偷偷修正

更多請(qǐng)點(diǎn)擊: https://kaifayun.com 第一章:AI做自媒體賺錢(qián) 人工智能正深刻重塑內(nèi)容創(chuàng)作與流量變現(xiàn)的底層邏輯。借助大模型、自動(dòng)化工具和智能分發(fā)平臺(tái),普通人無(wú)需專(zhuān)業(yè)剪輯或?qū)懽鞴Φ?amp;#xff0c;也能規(guī)模化生產(chǎn)高傳播性內(nèi)容,并通…

2026/8/3 17:09:00 閱讀更多
2026年高性價(jià)比項(xiàng)目管理軟件評(píng)測(cè)與選型指南

2026年高性價(jià)比項(xiàng)目管理軟件評(píng)測(cè)與選型指南

1. 項(xiàng)目管理軟件市場(chǎng)現(xiàn)狀與選型痛點(diǎn) 2026年的企業(yè)協(xié)作環(huán)境正面臨前所未有的復(fù)雜度提升。根據(jù)Gartner最新調(diào)研數(shù)據(jù),73%的中小企業(yè)團(tuán)隊(duì)同時(shí)進(jìn)行著跨時(shí)區(qū)、跨部門(mén)的敏捷與瀑布式混合項(xiàng)目,而傳統(tǒng)電子表格和郵件協(xié)作方式導(dǎo)致的進(jìn)度失控率高達(dá)41%。我最近為5家…

2026/8/3 16:59:00 閱讀更多
C++游戲開(kāi)發(fā):俄羅斯方塊背景系統(tǒng)設(shè)計(jì)與SFML實(shí)現(xiàn)詳解

C++游戲開(kāi)發(fā):俄羅斯方塊背景系統(tǒng)設(shè)計(jì)與SFML實(shí)現(xiàn)詳解

1. 項(xiàng)目概述與核心價(jià)值最近在重構(gòu)一個(gè)經(jīng)典的C俄羅斯方塊項(xiàng)目,版本號(hào)定在了14.2運(yùn)行版。這次迭代的核心目標(biāo)之一,就是徹底優(yōu)化游戲場(chǎng)景的背景系統(tǒng)。你可能覺(jué)得,背景不就是一張圖或者一個(gè)純色塊嗎?有什么好折騰的。但實(shí)際做下來(lái)才發(fā)…

2026/8/3 17:59:02 閱讀更多
C++俄羅斯方塊實(shí)戰(zhàn):從控制臺(tái)到圖形化界面的工程化進(jìn)階

C++俄羅斯方塊實(shí)戰(zhàn):從控制臺(tái)到圖形化界面的工程化進(jìn)階

1. 項(xiàng)目概述與核心價(jià)值 最近在整理舊項(xiàng)目時(shí),翻出了一個(gè)用C寫(xiě)的俄羅斯方塊。這個(gè)版本比較特別,它有一個(gè)完整的“歡迎界面”。你可能覺(jué)得,一個(gè)俄羅斯方塊,不就是直接開(kāi)始游戲嗎?但恰恰是這個(gè)看似簡(jiǎn)單的歡迎界面&#xff…

2026/8/3 17:59:02 閱讀更多
Blender倒角建模核心技術(shù):從參數(shù)解析到工作流實(shí)戰(zhàn)

Blender倒角建模核心技術(shù):從參數(shù)解析到工作流實(shí)戰(zhàn)

1. 從“硬邊”到“真實(shí)感”:為什么倒角是建模的必修課如果你剛開(kāi)始接觸Blender或者任何3D建模軟件,可能會(huì)覺(jué)得建模就是把一堆基礎(chǔ)的幾何體(立方體、圓柱體、球體)拼湊起來(lái)。但很快你就會(huì)發(fā)現(xiàn),這樣做出來(lái)的模型總有一種…

2026/8/3 17:59:02 閱讀更多
python的工業(yè)過(guò)程控制場(chǎng)景模擬第五十篇:水力閘門(mén)液位流量數(shù)據(jù),擬合水位—泄流量數(shù)學(xué)模型。

python的工業(yè)過(guò)程控制場(chǎng)景模擬第五十篇:水力閘門(mén)液位流量數(shù)據(jù),擬合水位—泄流量數(shù)學(xué)模型。

水力閘門(mén)水位—泄流量數(shù)學(xué)模型擬合系統(tǒng) —— 基于 OOP 的曲線回歸實(shí)戰(zhàn)"水利樞紐的中控室里,操作員盯著屏幕上密密麻麻的閘門(mén)開(kāi)度和水位數(shù)據(jù),手動(dòng)對(duì)照著一張十幾年前印的水位—流量關(guān)系曲線圖來(lái)估算下泄流量。這張圖還是按當(dāng)時(shí)的河床斷面畫(huà)的&#x…

2026/8/3 17:59:02 閱讀更多
如何用WeChatFerry構(gòu)建智能微信機(jī)器人:從零到實(shí)戰(zhàn)的完整指南

如何用WeChatFerry構(gòu)建智能微信機(jī)器人:從零到實(shí)戰(zhàn)的完整指南

如何用WeChatFerry構(gòu)建智能微信機(jī)器人:從零到實(shí)戰(zhàn)的完整指南 【免費(fèi)下載鏈接】WeChatFerry 微信機(jī)器人,可接入DeepSeek、Gemini、ChatGPT、ChatGLM、訊飛星火、Tigerbot等大模型。微信 hook WeChat Robot Hook. 項(xiàng)目地址: https://gitcode.com/GitHub_…

2026/8/3 17:59:02 閱讀更多
全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

更多請(qǐng)點(diǎn)擊: https://kaifayun.com 第一章:全球僅7家廠商通過(guò)ISO/IEC 27001認(rèn)證的名片AI引擎概覽 名片AI引擎是企業(yè)級(jí)智能文檔處理的核心組件,專(zhuān)注于高精度OCR、語(yǔ)義結(jié)構(gòu)化提取與跨語(yǔ)言實(shí)體對(duì)齊。截至2024年第三季度,全球范圍內(nèi)僅…

2026/8/3 0:07:47 閱讀更多
Dism++系統(tǒng)優(yōu)化實(shí)戰(zhàn):3大場(chǎng)景深度清理Windows性能瓶頸

Dism++系統(tǒng)優(yōu)化實(shí)戰(zhàn):3大場(chǎng)景深度清理Windows性能瓶頸

Dism系統(tǒng)優(yōu)化實(shí)戰(zhàn):3大場(chǎng)景深度清理Windows性能瓶頸 【免費(fèi)下載鏈接】Dism-Multi-language Dism Multi-language Support & BUG Report 項(xiàng)目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism是一款基于微軟底層技術(shù)的專(zhuān)業(yè)Windows系統(tǒng)優(yōu)…

2026/8/3 0:07:47 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類(lèi)短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢(qián)從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/3 7:44:46 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/3 12:53:38 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/2 2:52:49 閱讀更多