跳转至

博客文章

您好,很高兴认识你 👋我是 KenForever1 能同途偶遇在这星球上,探索、记录、享受…🎶🐧😆

C++零拷贝反序列化库cista

C++零拷贝反序列化库cista

在阅读Candle(rust的机器学习库)时,看到了rust中利用mmap和Cow机制实现零拷贝反序列化加载模型的tensor。

其中为了解决mmap的数据生命周期为’a, 如果用Cow<’a>引用mmap返回的指针, 使用的生命周期如果超过’a则不能使用,不利于代码开发和引用。因此引入了yoke crate擦除生命周期。

借此,搜索了一下c++的零拷贝反序列化库,找到了cista

cista零拷贝反序列化库实现之swiss_table哈希表实现

朋友们,大家好!上文我们介绍了C++零拷贝反序列化库 cista,今天接着介绍一下 cista 库的实现。

swiss_table实现原理

可以从cista库的介绍中看到如下内容:

Comes with a serializable high-performance hash map and hash set implementation based on Google’s Swiss Table technique.

swiss table的实现可以参考简单了解下最近正火的SwissTable,讲解的很清晰。

本小节大多数内容是站在巨人肩膀上,引用简单了解下最近正火的SwissTable,加上作者结合cista库的介绍。

以三种实现hashmap的方式,看优缺点:

  • 链表法:指针稳定性,能采取扩容之外的手段阻止查询性能退化,比如把过长链表转换成搜索树。缺点:缓存不够友好,冲突较多的时候缓存命中率较低从而影响性能。

  • 线性探测法:缓存友好,加上冲突会有连锁影响,没有指针稳定性。