明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1023|回复: 1

[运行时] cad.net 最快的字典SwissTable

[复制链接]
发表于 2025-6-29 14:45:03 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 2025-6-30 17:42 编辑

其实世界上大部分软件很多都没有发挥真正的硬件速度.
起码2-48倍提速是大部分软件都可以做到的,
大部分人是因为写得方便而不考虑运行速度,
这也无可厚非,不过不学习别人怎么加速的话,
就会像个别群友一样觉得行业顶尖软件就是最好最快,
从而小看了大公司惰性,因为一句工程实现简单就很容易断送了后续.

例如
SimdJson代替了已有方案.
ZLinq代替了Linq.
只要有个是API层面兼容的,基本上没有什么理由不去换包.

软件开发三部曲:先做出来,再把它做好,最后是做快.
我在思考怎么把扫描线算法逼近5ms


谷歌推出SwissTable巧妙的利用了
开放寻址法+元数据数组+分片扩容+对齐数组+SIMD+渐进扩容.
它构建了两个hash,h1检索分片,h2检索槽.
主要加速其实是SIMD微并行,
因为分支预测失败一次回退15-20时钟周期,4核并行就相当于30-80条指令.
也就是宁愿写多30-80条指令进行处理,也不要触发一次失败,
这说明分类和SIMD真的好重要哦.
难怪字节跳动都提议Go语言map换成它.
https://www.cnblogs.com/apocelipes/p/17562468.html

众所周知,编程拉到极限总是要处理分支预测失败.
它没有利用多核并行+SIMD(我最下面会说为什么)
只是在查询时候用一次SIMD来代替多次跳跃检查.
并且hash命中末尾的话,没有采用绕回,而是会写入到下一个分片.
在当前h1命中分片上面找不到:
SIMD对比执行了一次+遍历结果集进行EQ,
如果仍然找不到,会去下一个分片继续.

它的缩容也很有趣,它不是没有删除元素,而是标记槽为墓碑,来实现延迟处理,并且是meta元数组进行标记,不是槽数组.
分离设计就是SOA (Structure of Arrays)数组的结构体.

其实耗尽CPU算力岂不是导致其他进程短时间饥饿导致QPS下降,所以我觉得SIMD在服务器上面用处应该很少.
CK数据库真的那么干之后,发现QPS真的很少.
不过这次看到了一个微并行的SIMD场景.

在OLTP或高QPS场景中,
这种资源竞争可能导致整体吞吐量下降.
ClickHouse(CK)作为OLAP系统,
更注重单查询性能而非高并发,所以这种取舍是合理的


对了AVX512引发降频,还不如不用.

https://mp.weixin.qq.com/s?__biz ... 1&app_lang=zh-CN#rd

评分

参与人数 1明经币 +1 收起 理由
zhoupeng220 + 1 很给力!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-10-6 01:40 , Processed in 0.159868 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表