緩存排序算法
緩存排序算法(Cache-Aware / Cache-Oblivious Sorting) 目標:讓排序過程儘可能在 L1/L2 緩存內完成,減少 DRAM 帶寬與 TLB miss,從而在 MB~GB 級數據上獲得幾倍甚至十幾倍加速。 分為兩條路線: Cache-Aware(需手動指定緩存大小) Cache-Oblivious(無需參數,理論最優) 1 性能瓶頸
昵稱 木子君_求贊
貢獻者58
粉絲0
緩存排序算法(Cache-Aware / Cache-Oblivious Sorting) 目標:讓排序過程儘可能在 L1/L2 緩存內完成,減少 DRAM 帶寬與 TLB miss,從而在 MB~GB 級數據上獲得幾倍甚至十幾倍加速。 分為兩條路線: Cache-Aware(需手動指定緩存大小) Cache-Oblivious(無需參數,理論最優) 1 性能瓶頸
昵稱 木子君_求贊
堆排序(Heap Sort)完整指南 維度 內容 核心思想 用數組模擬完全二叉堆,反覆彈出最大值(或最小值)完成排序 平均複雜度 O(n log n) 最壞複雜度 O(n log n) (無退化) 額外空間 O(1) (原地) 穩定性 否 (相等元
昵稱 木子君_求贊
在原生 Timsort 基礎上,增加顯式緩存友好策略: 歸併緩衝區複用(對象池) 分段預取(software prefetch) 塊大小與 L2 容量對齊 實測 1e7 int 相比 std::stable_sort 再快 15~25%,內存峯值相同。 1 設計要點 緩存策略 實現方式 收益 緩衝區池
昵稱 木子君_求贊
帶緩存的堆排序(Cache-Optimized Heap Sort)——C++ 實現 目標: 讓 sift-down 始終落在 L2 緩存 內 消除 頻繁 new/delete(緩衝區池) 用 軟件預取 隱藏 DRAM 延遲 實測 1e7 int 相比 std::make_heap + std::sort_heap 再快 20~30%,內存峯值仍 O(1)
昵稱 木子君_求贊
下面給出一份“一句話就能落地”的導讀: Learned Sort 2.1 的核心賣點是 「用機器學習模型代替傳統 pivot / radix,把元素一次性扔進幾乎正確的位置」,而 2025 年 MIT 團隊在 2.1 基礎上追加的 緩存優化層(Cache-Optimized Learned Sort)才是本文重點——它讓算法在 L3 的數據量 下仍能保持 Radix 級吞吐 且 內存佔用不爆炸。
昵稱 木子君_求贊
下面給出一份 可直接編譯運行 的「帶緩存 AdaRank」C++17 參考實現。 核心思想:把每次迭代中最熱的「梯度-權重」計算拆成 ≤ L2/2 的塊,用 L1-resident 小緩衝區存放下標,無分支批量更新;溢出桶同樣按塊處理,從而把原算法的隨機訪存變成順序、緩存友好的模式。 1 緩存設計總覽 原算法熱點 緩存改造 收益 隨機訪存
昵稱 木子君_求贊
帶緩存的 SpringRank(Cache-Optimized SpringRank)——C++17 實現 把「物理彈簧」迭代改成 L2 分塊 + L1 索引緩衝 + 預取, 在 L3 大圖 上仍能保持 Radix 級吞吐,內存仍 O(V+E)。 1 問題背景 熱點 原算法訪存 緩存痛點 隨機讀 Δᵢⱼ for (j ∈
昵稱 木子君_求贊
帶緩存的 RankNet(Cache-Optimized RankNet)——C++17 實現 把「pairwise 比較 → 梯度 → 權重更新」整條鏈路上最熱的隨機訪存,全部切成 ≤ L2/2 的塊, 再用 L1 索引緩衝 + 預取 + 無分支批量更新,在 L3 大數據 上仍能維持 全內存吞吐; 實測 1e7 pair×64 dim 比原始實現快 ~30 %,內存峯值仍 O(
昵稱 木子君_求贊
IPS4o 排序算法 2025 年最新進展(Markdown 速覽) 綜合 2025-01 → 2025-09 權威信源(arXiv、ALENEX、IPDPS、GitHub Release、SegmentFault 技術對比) 給出"一條時間線 + 一張技術表 + 一句結論",10 秒看懂 IPS4o 今年動向。 ① 2025 年度時間線(已公開) 日期 事件
昵稱 木子君_求贊
Learned Sort 2.1 最新進展(2025年9月版) 2025 年 MIT 團隊在 2.1 主幹上追加 顯式緩存層 + GPU 管道 + 標準庫推進, 把「機器學習排大體,緩存塊寫細節」推向生產就緒。 ① 2025 年度時間線(公開可查) 日期 事件 來源 / 鏈接 核心看點 2025-01 arXiv:2
昵稱 木子君_求贊
GPU 堆排序(Heap Sort on GPU)——2025 實現路線與最新進展 把「完全二叉堆」塞進 CUDA / HIP / OpenCL,利用 數據並行 + 共享內存 + 多級歸併 實現 O(n log n) 且 常數級遠小於 CPU 的堆排序; 2025 年最新工作集中在 Blocked-Heap + 共享內存緩存 + Learned-Index 建堆,實測 1e8 int 相
昵稱 木子君_求贊
在數字化轉型浪潮中,教育領域正迎來深刻變革。尤其是虛擬現實(VR)技術,憑藉其沉浸式、交互式特點,成為推動教學方式演進的重要力量。然而,傳統VR教學方案受限於硬件性能、部署成本與使用門檻等因素,難以大規模普及。在此背景下,雲VR教學模式成為新的發展方向藉助以點量雲流實時雲渲染為代表的輕終端交互技術,可以突破傳統教學瓶頸,為教育行業帶來全新的可能性。 一、雲 VR 教學:邁向教育普惠與深度沉浸的新
@dianliangxiaocheng_19854189632
昵稱 點量實時雲渲染
在數字化轉型進程加速的時代背景下,知識產權與核心數據資產的安全管控,以及跨地域、跨團隊的協同效率,已成為教培企業高質量發展的關鍵議題。尤其對以教材研發為立身之本與發展核心的團隊來説,如何在構建嚴密防護體系保障核心資料安全的同時,實現辦公模式的靈活性與協同流程的高效性,正成為其數字化轉型道路上的重要戰略課題。 近日,我司憑藉先進的辦公“雲電腦”解決方案,成功為一家專注於教材研發的培訓企業打造了安全、
@dianliangxiaocheng_19854189632
昵稱 點量實時雲渲染
哈嘍,大家好,我是小康! 今天要和大家聊一個特別有意思的話題——基數樹。 説實話,我第一次聽到這個名詞的時候,內心是懵逼的。基數?樹?這玩意兒到底是啥? 直到有一天,我在研究TCMalloc內存池源碼的時候,發現了一個神奇的現象:為什麼Google的工程師不用std::unordered_map來做頁號映射,而要自己實現一個看起來很複雜的數據結構? 帶着這個疑問,我深入研究了一下,結果發現了一個寶
昵稱 小康
1,什麼是“c++”? C++的發展歷程是一個不斷演進和完善的過程,以下是其主要發展階段: 起源(1979–1985):1979年,Bjarne Stroustrup在貝爾實驗室開始給C加入類,受Simula面向對象思想影響,用於系統編程和網絡仿真,最初稱為“C with Classes”。1983年,語言名字正式變為C++,象徵在C基礎上“自增”,此時具備了class、inline、//註釋
昵稱 星辰大海
”指針是C語言的精髓!“ ——出自學校教《C語言程序設計》的老師 1 內存和地址 1.1 內存 為了理解指針,首先要從內存和地址講起。 在講之前,先舉一個現實世界中的例子。大學宿舍都有門牌號,當需要找到某個學生時,我們只需要知道宿舍的門牌號就可以了。 在計算機中內存很重要,程序經常需要從內存中讀取和寫入數據。在購買電腦的時候,內存的大小常有8/16/32GB等,這些空間又是如何被管理的? 其實也是
昵稱 BlackQid
**C++ 中 std::vector 全面解析(從基礎到進階) std::vector 是 C++ 標準庫(STL)中最常用的動態數組容器,能自動管理內存、動態擴容,比手動用 new[] 分配數組更安全高效,是日常開發的“高頻工具”。下面從基礎用法到進階技巧,帶你吃透它~** 一、基礎:怎麼用 std::vector? 1. 頭文件與初始化 用 std::vector 前必須包含頭文件 vect
昵稱 星辰大海
在 C++ 中,自定義函數就像我們自己設計的 “工具”,需要先 “造工具”(定義函數),再 “用工具”(調用函數)。下面用通俗的方式講清楚調用方法和規則: 一、先搞懂 “函數三要素” 每個自定義函數都有三個關鍵部分,就像工具的 “説明書”: 返回值類型:工具做完事後給你的 “結果類型”(比如算加法後返回一個數字,就用int;如果只是打印文字不需要結果,就用void)。 函數
昵稱 星辰大海
本文將要學習如何使用gperftools工具定位C/C++程序的性能瓶頸,並用kcachegrind工具進行可視化展示。 gperftools簡介 gperftools(Google Performance Tools)是由谷歌開源的性能分析工具,能夠對程序進行profile,通俗的講就是能夠以一定的頻率對程序的堆棧進行採樣,採樣的次數越高,説明這個堆棧對應的代碼越熱。這個功能對於定位性能瓶頸十分
昵稱 Hankin_Liu收徒
嘿,各位C++er們!我是小康 👋 今天我們來聊一個每個開發者都繞不開的話題——日誌記錄。 你是不是還在用最原始的 cout 和 printf 調試代碼?是不是因為線上程序出問題找不到日誌而抓狂?別急,今天我就來給大家盤點一下C++界那些大名鼎鼎的日誌庫,看看哪個最適合你的項目! 為什麼需要專業的日誌庫? 在深入介紹各種日誌庫之前,先説説為什麼我們需要專業的日誌庫: 專業需求 性能要求:生產
昵稱 小康
嘿,各位C++er們!我是小康。 👋 今天我要給大家揭秘一個讓無數程序員拍案叫絕的"黑科技"——侵入式鏈表! 你可能會問:不就是個鏈表嗎,有什麼神奇的? 別急,當你看完這篇文章,你會發現這個看似簡單的數據結構,竟然是Nginx、Linux內核、TCMalloc等頂級項目的性能秘密武器! 🤔 從一個"奇怪"的現象説起 先看一段讓人疑惑的代碼: // 這段代碼在幹什麼?為什麼要這樣寫? stati
昵稱 小康
一、引言:為什麼需要 happens-before? 在多線程程序中,“語句順序” ≠ “執行順序”。 現代 CPU 和編譯器會對指令重排,只要單線程的結果不變,就可以自由優化。 然而,在併發場景下,這會導致嚴重的問題: bool ready = false; int data = 0; void writer() { data = 42; ready = true;
昵稱 Hankin_Liu收徒
記得剛入行時一位老哥就跟我説“代碼是寫給人看的”,我很認同這句話,但是直到如今也不敢説自己能完全做到,即便如此我依然有些心得體會,於是便有了本文。 實踐一: struct僅用於數據封裝。 參考示例 struct Point { int _x = 0; int _y = 0; }; 實踐二: 類名採用帕斯卡命名法(大駝峯),使用名詞或名詞短語命名,除非專有名詞或廣泛被使用的縮
昵稱 artificer
🚫 付費插件黨建議划走 🎯 白嫖黨、多語言戰士、IDE統一教信徒請繼續 💡 想體驗"一個IDE學多種語言"的快感嗎?這篇指南就是你的答案! 🙏 大家好! 最近一直在爆肝更新"四語言同步學"教程,C/C++系列一直未來得及更(求輕噴😅)。今天特地為大家帶來一篇純白嫖向的實用指南—— 今天特地為大家帶來一篇實用指南——JetBrains IDE外部工具配置C/C++開發環境。 這可能是
昵稱 ERP老兵_冷溪虎山