日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

我有一段很厉害的代码,不外传的那种

發布時間:2024/7/5 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我有一段很厉害的代码,不外传的那种 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文 | 郭忠明@知乎

最近在知乎上看到一個問題,叫做“程序員有沒有很厲害、不外傳的代碼”。

?

好像在這個遍地都是開源項目的時代,啥代碼都藏不住。

但其實,是有的,而且有不少!

很多算法在沒有公開前,普通程序員都完全想不明白是怎么做到的。

?

舉個例子。

80年代就有部分大神級程序員的代碼中使用了乘一個magic數字,然后移位,實現實質代替除法的功能,性能很快,代碼有效。

普通程序員完全不理解這些代碼的含義,為啥這樣寫也能行。實質是除數被除數同時乘以一個2的N次方的數字,那么結果不變,被除數如果是一個常量,那么兩個常量相除就得到了magic, 計算時先乘以magic再移位就實現了高性能除法,大約能夠有一個數量級的性能提升。

經過很多年后,該技術就慢慢擴散開了,成為不是秘密的秘密,一些編譯器內部集成了這些黑魔法。

直到intel 九代cpu后,該魔法才徹底在intel cpu上沒用了,intel cpu把除法從80個時鐘周期壓縮到了18個時鐘周期。

但是江湖上還流傳一種新的除法算法,大約比intel十代cpu快一倍,我這邊在做內存分配庫的free內部計算offset/ref size per bit尋找bit定位時有用,新除法算法的源代碼只有三行,非常簡單有效。

所以,free 才那么快,最小只有7ns, 要知道做一次除法就要18個時鐘周期了,那些快到不可思議的庫,不少背后是有各種秘密算法的黑科技加持。(注意: 有一些公開文章中的magic不能適配所有整數, 存在工程上的坑,高手都是親自寫代碼做全整數覆蓋驗證,不會輕易亂用)。

最近幾年比較出名的黑魔法一個是wait free queue, 尤其是多生產者/多消費者隊列,做量化交易領域的部分高手會弄這個東西,知乎上也見過有量化領域的人提到過具體的實現,就一句話的原理。

開源的都是最簡單的spsc單生產者單消費者隊列,一些源碼也有bug。寫的內存分配庫有用這個算法,用于跨線程內存釋放。

最新版本16線程并發下,主線程malloc 8字節1000萬,傳給其它16個線程, ?其它線程以生產者方式push到隊列,主線程以消費者方式pop出隊列,主線程free,五個動作累計,平均開銷大約是26ns,是堪稱神器級別的多線程并發工具包,有數千行源碼,只有很小的并發開銷。在內存分配庫的測試源碼用例的最后有測試。

總之,最近兩年寫的內存分配庫中,已經把自己能夠找到的黑魔法都用上了,所以,性能才會比google tcmalloc快一個數量級。

尤其在高性能領域,江湖上那些快到不可思議的庫,真的打開,里面到處都是黑魔法一樣的代碼,不少繞了一圈的算法,如果不告訴你這些代碼都是干什么用的,基本很難理解原來如此。

舉一個例子,寫的內存分配庫中由于是bitmap算法,會大量使用移位操作,但是源碼中沒有1<<N的移位,用其它更快的算法代碼替換掉了,又是一堆的magic, 移位操作的性能提升了3倍,原因在于intel cpu的內置移位操作單元不足,而現代cpu都是多發射的,導致現代cpu的多發射時移位操作和相關上下文的串行等待,拖累性能表現。一直到intel cpu 12代cpu增加了一倍的移位操作單元(查一下最新改進的說明就明白),才算徹底解決了這個瓶頸。測試源碼和內存分配庫so文件在下面下載。

https://gitee.com/wlmqgzm

話說回來,你們有那種私藏的黑科技代碼嗎?歡迎在評論區分享!

后臺回復關鍵詞【入群

加入賣萌屋NLP/IR/Rec與求職討論群

后臺回復關鍵詞【頂會

獲取ACL、CIKM等各大頂會論文集!

總結

以上是生活随笔為你收集整理的我有一段很厉害的代码,不外传的那种的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。