当前位置:首页 > 每日看点 > 正文内容

程序员有很厉害,不外传的代码吗?

卡卷网1年前 (2024-12-17)每日看点214

有的,而且有不少,很多算法在没有公开前,普通程序员都完全想不明白是怎么做到的。例如: 80年代就有部分大神级程序员的代码中使用了乘一个magic数字,然后移位,实现实质代替除法的功能,性能很快,代码有效。普通程序员完全不理解这些代码的含义,为啥这样写也能行。实质是除数被除数同时乘以一个2的N次方的数字,那么结果不变,被除数如果是一个常量,那么两个常量相除就得到了magic, 计算时先乘以magic再移位就实现了高性能除法,大约能够有一个数量级的性能提升。经过很多年后,该技术就慢慢扩散开了,成为不是秘密的秘密,一些编译器内部集成了这些黑魔法。直到intel 九代cpu后,该魔法才彻底在intel cpu上没用了,intel cpu把除法从97个时钟周期压缩到了18个时钟周期。但是江湖上还流传一种新的除法算法,大约比intel十代cpu快一倍,我这边在做内存分配库的free内部计算offset/ref size per bit寻找bit定位时有用,新除法算法的源代码只有三行,非常简单有效,所以,free 才那么快,最小只有5ns, 要知道做一次除法就要18个时钟周期了,那些快到不可思议的库,不少背后是有各种秘密算法的黑科技加持。(注意: 有一些公开文章中的magic不能适配所有整数, 存在工程上的坑,高手都是亲自写代码做全整数覆盖验证,不会轻易乱用)。

最近几年比较出名的黑魔法一个是wait free queue, 尤其是多生产者/多消费者队列,做量化交易领域的部分高手会弄这个东西,知乎上也见过有量化领域的人提到过具体的实现,就一句话的原理。开源的都是最简单的spsc单生产者单消费者队列,一些源码也有bug。写的内存分配库有用这个算法,用于跨线程内存释放。最新版本16线程并发下,主线程malloc 8字节1000万,传给其它16个线程, 其它线程以生产者方式push到队列,主线程以消费者方式pop出队列,主线程free,五个动作累计开销大约是21ns,平均每个动作的开销是4ns, 是堪称神器级别的多线程并发工具包,有数千行源码,只有很小的并发开销。在内存分配库的测试源码用例的最后有测试。

总之,最近两年写的内存分配库中,已经把自己能够找到的黑魔法都用上了,所以,性能才会比google tcmalloc快一个数量级。

高性能领域,江湖上那些快到不可思议的库,真的打开,里面到处都是黑魔法一样的代码,不少绕了一圈的算法,如果不告诉你这些代码都是干什么用的,基本很难理解原来如此。举一个例子,写的内存分配库中由于是bitmap算法,会大量使用移位操作,但是源码中没有1<<N的移位,用其它更快的等效软件算法代码替换掉了,又是一堆的magic,移位操作的性能提升了3倍,原因在于intel cpu的内置移位操作单元不足,而现代cpu都是多发射的,导致现代cpu的多发射时移位操作和相关上下文的串行等待,拖累性能表现。intel cpu 12代cpu增加了一倍的移位操作单元(查一下最新改进的说明就明白),才算彻底解决了这个瓶颈。内存库测试源码和内存库so文件在下面下载。

gitee.com/wlmqgzm

========================================================================

刚才看到评论中有人想了解能否看看以前的不外传代码,推荐一篇我的文章是我在2019年8月31号公开了3个关于 除法算法的源码,都是以前很早写的,还有特殊场景下比 Intel 10代CPU 至少快一倍的除法算法和代码未公开。

公开原因是 Intel 10代CPU idiv的 latency 从 97 cycles 减少到 18 cycles,一部分算法在未来已经对一些高性能软件算法 在 Intel 10代CPU及以后的CPU 已经没有作用了,就公开了。后面2段源码估计也许可以有助于 国产 CPU 也设计出 18 cycles 除法,也公开了。

郭忠明:C++ 二进制转十进制优化 除法软件仿真算法及代码

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/12/4782.html

分享给朋友:

相关文章

中国CEO直播简史

中国CEO直播简史

  领导人爱对外发言这事,是中国的一个传统文化。  从乾隆爱往名画上盖章上,就可见一斑。  3Q大战时代,微博成了大佬“吵架”的战场,饭否变成了部分爱面子者的日记。  某种程度上说,互联网公关行业的诞生,和大佬们爱发言有着直接的关系。只不过...

计算机专业不干互联网不热爱技术,还能转行干什么?

转行的思路,无非也就是那几个。我们顺着每个思路,一路捋一遍,基本上,大致可行的方向,也就有了。一、跟对口职业和岗位业务链条相邻的职业和岗位计算机专业如果找到了对口的技术岗位,跟技术工作联系最紧密的岗位是什么?产品经理。当然,大多数产品经理也...

报名的网课分期付款怎么退?

你在你分期付款的订单下面有客服电话,直接打电话描述一下你的问题,你可以告诉他你是被恶意绑定的,在不了解有退学条件这一说的情况下报的课程,可能遇到消费者诈骗了,不承认有退学金,说是霸王条款,诈骗消费者,你若分期了先把自动续费关了,别让自己个人...

无意中发现技术主管写的代码,大家帮忙看看什么水平?

无意中发现技术主管写的代码,大家帮忙看看什么水平?

虽然很多答主用了诸如“典范级”、“心旷神怡” 的形容, 赞美这段代码, 但这里, 出于技术讨论的动机, 我说说不同看法.栈, 如果善于利用栈来处理树结构, 那么可以写出更简洁的代码, 根本不需要 recuresiveFn 这种方法. 泛型,...

有哪些让你目瞪口呆的 Bug ?

有哪些让你目瞪口呆的 Bug ?

成都有个监狱情况比较特殊,关押的基本全是重犯,而且还都是经济犯和政治犯,他们以前都是一方大佬,在自己的一亩三分地翻手为云覆手为雨,无非是不小心中箭落马或帮老大顶锅才进监狱,所以即使进来了,他们依然保持着体面和骄傲,依从性差,虽然不至于和监狱...

用wordpress做这个网站的话,需要用到哪些插件?

一个完整成型的B2C电商独立站,如果用wordpress+woocommerce搭建,最终会用上20来个插件,而且是在经过慎重筛选,剔除不必要的插件的情况下,别问我为什么。wordpress建站,插件安装多了,速度会变慢,这是常识,但需要在...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。