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

2022 年 2 月 22 日 夕小瑶的卖萌屋

文 | 郭忠明@知乎

最近在知乎上看到一个问题,叫做“程序员有没有很厉害、不外传的代码”。

好像在这个遍地都是开源项目的时代,啥代码都藏不住。

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

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

举个例子。

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等各大顶会论文集!

登录查看更多
0

相关内容

知乎是中文互联网最大的知识社交平台,拥有认真、专业和友善的独特氛围,连接各行各业的精英。用户分享着彼此的专业知识、经验和见解,为中文互联网源源不断地提供高质量的信息。

ICLR 2022 评审出炉!来看看得分最高8份的31篇论文是什么!
专知会员服务
47+阅读 · 2021年5月21日
专知会员服务
31+阅读 · 2020年4月24日
2020图机器学习GNN的四大研究趋势,21篇论文下载
专知会员服务
135+阅读 · 2020年2月10日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
【强化学习】深度强化学习初学者指南
专知会员服务
178+阅读 · 2019年12月14日
【综述】关键词生成,附10页pdf论文下载
专知会员服务
52+阅读 · 2019年11月20日
看不懂代码?AI给你做翻译,说人话的那种
量子位
0+阅读 · 2022年1月30日
6000字,快速理解低代码
人人都是产品经理
2+阅读 · 2022年1月3日
混合精度训练原理总结
极市平台
1+阅读 · 2021年12月7日
手把手教你入门深度强化学习(附链接&代码)
THU数据派
75+阅读 · 2019年7月16日
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
2+阅读 · 2010年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
Arxiv
0+阅读 · 2022年4月19日
已删除
Arxiv
31+阅读 · 2020年3月23日
Arxiv
15+阅读 · 2018年4月5日
VIP会员
相关VIP内容
ICLR 2022 评审出炉!来看看得分最高8份的31篇论文是什么!
专知会员服务
47+阅读 · 2021年5月21日
专知会员服务
31+阅读 · 2020年4月24日
2020图机器学习GNN的四大研究趋势,21篇论文下载
专知会员服务
135+阅读 · 2020年2月10日
模型压缩究竟在做什么?我们真的需要模型压缩么?
专知会员服务
27+阅读 · 2020年1月16日
【强化学习】深度强化学习初学者指南
专知会员服务
178+阅读 · 2019年12月14日
【综述】关键词生成,附10页pdf论文下载
专知会员服务
52+阅读 · 2019年11月20日
相关资讯
看不懂代码?AI给你做翻译,说人话的那种
量子位
0+阅读 · 2022年1月30日
6000字,快速理解低代码
人人都是产品经理
2+阅读 · 2022年1月3日
混合精度训练原理总结
极市平台
1+阅读 · 2021年12月7日
手把手教你入门深度强化学习(附链接&代码)
THU数据派
75+阅读 · 2019年7月16日
相关基金
国家自然科学基金
0+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
2+阅读 · 2010年12月31日
国家自然科学基金
0+阅读 · 2009年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
Top
微信扫码咨询专知VIP会员