关于阅读源码的一点心得
朋友们,阅读优秀的源码可以学到很多,例如代码的结构组织、设计模式、为了解决一些问题特殊处理、写法技巧、优化策略等,同时也扩展了对编程语言的熟悉程度、关于这个项目的解决问题思路。
朋友们,阅读优秀的源码可以学到很多,例如代码的结构组织、设计模式、为了解决一些问题特殊处理、写法技巧、优化策略等,同时也扩展了对编程语言的熟悉程度、关于这个项目的解决问题思路。
Git Worktree 是 Git 提供的一个强大功能,允许你在同一个仓库中创建多个独立的工作目录,每个目录可以关联不同的分支(或者 commit),从而实现并行开发而无需频繁切换分支或依赖 git stash 暂存代码 。
C++反射中,有个必要的就是需要获取一个类的成员个数,然后就可以根据个数,将类的成员通过std::tie转换成tuple。继而可以实现equal、hash、serialize等功能。
在阅读Candle(rust的机器学习库)时,看到了rust中利用mmap和Cow机制实现零拷贝反序列化加载模型的tensor。
其中为了解决mmap的数据生命周期为’a, 如果用Cow<’a>引用mmap返回的指针, 使用的生命周期如果超过’a则不能使用,不利于代码开发和引用。因此引入了yoke crate擦除生命周期。
借此,搜索了一下c++的零拷贝反序列化库,找到了cista。
这个group结构体是Swiss Table实现中的核心组件,用于高效处理哈希表控制位的批量操作。
朋友们,大家好!上文我们介绍了C++零拷贝反序列化库 cista,今天接着介绍一下 cista 库的实现。
可以从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的方式,看优缺点:
链表法:指针稳定性,能采取扩容之外的手段阻止查询性能退化,比如把过长链表转换成搜索树。缺点:缓存不够友好,冲突较多的时候缓存命中率较低从而影响性能。
线性探测法:缓存友好,加上冲突会有连锁影响,没有指针稳定性。
采用windows + wsl2(安装ubuntu)的方式进行开发。
comate是一个和vscode类似的AI智能编码工具,但是没有wsl直接远程连接,只能通过ssh连接。 因此,需要windows上ssh远程wsl2。
推荐配置模式:
如果你的windows使用了clash工具使用网络代理,那么可以暴露一个7890的http代理端口(clash自带功能)。采用mirror模式,wsl2访问windows的7890端口进行代理就很方便了,直接配置127.0.0.1:7890即可。例如:proxychains4 -f /etc/proxychains.conf
| Bash | |
|---|---|
| Bash | |
|---|---|
在设计一个类时,类的成员就固定下来了。但是某些场景下,需要扩展类的成员,但是又不想改变类的定义。这种情况怎么办呢?
torch_memory_saver是一个开源的高性能CUDA内存管理工具,主要功能是允许暂停和恢复PyTorch张量的CUDA内存占用。保持用户使用的虚拟地址不变,暂停后释放显存,恢复重新分配显存,绑定到虚拟地址上。
本文会介绍核心原理,以及拦截CUDA runtime API的实现。你还可以看到如何实现一个python c++扩展。在sglang大模型推理库中也有使用到这个torch_memory_saver库。