當前位置: 華文星空 > 知識

怎樣寫出一個更快的 memset/memcpy ?

2015-08-31知識

glibc中最新的memcpy和memset都是我寫的,我們的程式碼同時也考慮預取,對齊(編譯之後使用-D 可以清晰看到),減少指令跳轉錯誤提升效能,,希望能夠幫助你

原始碼如下:

a. memcpy:

https:// sourceware.org/git/gitw eb.cgi?p=glibc.git;a=commitdiff;h=05f3633da4f9df870d04dd77336e793746e57ed4

b. memset:

https:// sourceware.org/ml/libc- alpha/2014-06/msg00480.html

c. memcpy in Linux Kernel

[tip:core/locking] x86, mem: Optimize memcpy by avoiding memory false dependece

Linus Torvalds 的評價: 「The code looks clever and nice」!

更多早些我寫的glibc 函數程式碼 :

http:// blog.csdn.net/linguranu s/archive/2011/02/16/6189676.aspx

程式碼中主要考慮了記憶體的讀寫最佳化、指令跳轉、指令對齊,指令缺失等問題

雖然最佳化memcpy/memset等glibc函數,然而任何數據的遷移對於整體系統將是非常沈重的負擔(RC 導致延遲),坦誠的說如果發現我們的程式中由於memcpy/memset等 成為效能的瓶頸,那麽程式在間接的告訴我們架構不正確建議考慮數據參照如零拷貝,如果內容很短(如64字節之內)就直接用按需賦值就好(避免跳轉預測失敗帶來額外的成本),而不是著重進一步最佳化這些函數。

也許我們學習知識的目的是為了了解事物的規律,然後在工作中避免問題的產生,而不是等到問題出現再進一步的最佳化, 在開發高頻交易系統的時候我拒絕了memcpy,在做高可用分布式數據庫的時候拒絕了自旋鎖