效能模式技巧集 是做什麼的?
一本不斷增長的、已知會導致效能問題的程式碼模式目錄, 包含每個模式的檢測訊號和解決劇本。核心模式目錄專注於 x86 CPU 程式碼,並提供 Windows、WSL Linux、原生 Linux 和 CUDA/NVIDIA 環境的平台路由。
在硬體相同的情況下,最佳化知識是可移植的。不同平台之間 變化的是實作細節:Profiler 詞彙、編譯器標誌、除錯資訊格式、 同步原語、CPU 功能檢測,以及瓶頸是在 CPU 主機程式碼還是 CUDA 設備工作中。
步驟 0 — 路由平台
如果使用者提到了 WSL、Linux、CUDA、NVIDIA、GPU、Nsight、
驅動程式/工具套件不匹配、容器,或者平台不明確,請先閱讀
references/platform-routing.md。
然後載入平台特定的參考:
| 平台 / 症狀 | 閱讀 |
|---|---|
| Windows 原生 C/C++ CPU 效能 | PORTING-NOTES.md |
| WSL Linux CPU 效能 | references/wsl-linux.md,然後 references/linux-native.md |
| 原生 Linux CPU 效能 | references/linux-native.md |
| CUDA/NVIDIA 設定或 GPU 效能 | references/cuda.md |
當環境是問題所在,或者使用者沒有提供足夠的工具鏈/Profiler
上下文時,在 Windows 上使用 scripts/collect-perf-env.ps1,
在 WSL/原生 Linux 內部使用 scripts/collect-perf-env.sh。
如何使用此技巧
步驟 1 — 為你的情境載入正確的檔案
| 情境 | 閱讀此檔案 |
|---|---|
| 你擁有 ** Profiling 輸出**(VTune、AMD uProf、ETW/WPA、perf、火焰圖、Nsight 摘要等) | triggers/from-profile.md |
| 你正在 閱讀現有原始碼 且尚無 Profiling 資料 | triggers/from-source.md |
| 你正在 編寫新的 效能敏感的 C/C++ 或 SIMD 程式碼 | guidelines/new-code.md |
這些觸發檔案涵蓋了所有相同的模式;將它們分開是為了讓你只
載入相關的內容。guidelines/new-code.md 是一個寫入時的檢查
清單 — 在生成新程式碼時載入它,而不是在審查程式碼時載入。
步驟 2 — 識別匹配的模式
每個觸發檔案都包含一個精簡的表格和簡短的描述 — 足以判斷 程式碼或 Profile 是否匹配某個已知模式。
步驟 3 — 讀取模式詳細檔案
當模式匹配時,讀取 patterns/ 中對應的檔案。不要僅憑記憶
嘗試修復。
步驟 4 — 應用修復並驗證
按照模式檔案中的逐步說明和驗證方法進行操作,使用在步驟 0 中載入的路由檔案中的平台機制。
多個模式可以同時應用。在選擇一個模式之前,檢查所有可能的 匹配項。
可重複使用的程式庫模組
這些獨立的實作指南可供任何使用此技巧的代理程式使用,不僅限 於遵循特定模式時。如果需要該功能,請直接載入相關檔案。
| 模組 | 提供的內容 |
|---|---|
library/cpu-dispatch.md | Windows 上的執行時期 CPU 功能檢測和變體選擇。僅限手動函式指標分派 — target_clones 在 PE/COFF 目標上不可用(無 IFUNC)。涵蓋 __builtin_cpu_supports、顯式 __cpuid/_xgetbv 路徑以及每個變體的 __attribute__((target(...)))。供應商中立(Intel + AMD)。每當一個函式有多個需要執行時期連接的效能級別實作時使用。 |
patterns/simd-upconversion-impl.md | 在內建函式中加倍向量暫存器寬度的完整逐步拉鍊演算法(SSE→AVX2 或 AVX2→AVX-512);AVX-512 累加器模板;轉換後檢查清單(CPUID 保護、vzeroupper、目標屬性)。 |
patterns/fast-crc32c-impl.md | 即插即用 CRC32C 函式庫:AVX-512 VPCLMULQDQ 融合、SSE4.2 + PCLMULQDQ 多累加器、純 C 後備方案。包含執行時期 CPU 分派包裝器。每當需要新的 CRC32C 程式碼或現有實作是瓶頸時使用。 |
references/platform-routing.md | 在應用模式之前路由 Windows / WSL / 原生 Linux / CUDA 請求。 |
references/cuda.md | CUDA 設定和效能分級:驅動程式/工具套件可見性、Nsight Systems 與 Nsight Compute、WSL GPU 邊界。 |
跨技巧整合
Profiler/數據收集技巧可以在識別出已知模式後調用此技巧。此技巧 也可以單獨從原始碼、Profiler 片段或環境探測輸出中獨立運作。
技巧狀態
已針對 Windows 原生 C/C++ 進行移植和審查,然後擴展了 WSL Linux、
原生 Linux 和 CUDA/NVIDIA 環境的路由說明。以下核心檔案已存在:
此 SKILL.md、PORTING-NOTES.md、triggers/from-source.md、
triggers/from-profile.md、guidelines/new-code.md、design.md、
library/cpu-dispatch.md、CRC32C 函式庫原始檔、平台參考、
基準測試以及所有模式檔案:
parallel-accumulator、missing-vzeroupper、missing-restrictttas、false-sharing、per-cpu-stats、cold-path-annotationcv-thundering-herd、mutex-to-rwlock、simd-sortsimd-upconversion+simd-upconversion-implfast-crc32c+fast-crc32c-impllibrary-version-upgrade
references/library-versions.md 有意將未經驗證的第三方 DLL
條目保留在待辦事項表中;在沒有主要來源驗證和 Windows 測量的
情況下,請勿將這些條目提升為建議。