跳转至

C++

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

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

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

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

借此,搜索了一下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,讲解的很清晰。

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

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

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

C++的“Base-from-Member”技法解决了什么问题?

C++ has indeed become too “expert friendly” – Bjarne Stroustrup

Bjarne Stroustrup 的说得很对,因为专家们对 C++语言中的惯用法非常熟悉。随着程序员理解的惯用法的增加,该语言对他们来说变得更加友好。 这篇文章介绍的“Base-from-Member”就是 c++中的一种惯用法(idioms)。通过掌握现代 C++ 惯用法,提升这方面的知识,C++对我们来说就更加友好。

“Base-from-Member”技法的目的

“Base-from-Member”技法的目的是,解决 C++在继承中,如何初始化一个依赖派生类(子类)成员变量的基类。

从Deepseek开源库3FS中学习fuse的使用-如何开发一个文件系统(一)

背景介绍

Deepseek开源了一系列AI infra的相关的项目,其中包括了deepseek-ai/3FS

A high-performance distributed file system designed to address the challenges of AI training and inference workloads.

文件系统是任何操作系统的支柱,负责管理数据的存储和检索方式。传统上,开发文件系统是一项复杂而艰巨的任务,需要对内核编程有深入的了解。然而,有了 FUSE(用户空间文件系统),这项任务变得更加容易和通用。