对于C++的初始化列表,一直以来处于知其然而不知其所以然的状态,即知道怎么用,但对于其背后的工作原理却并不了解,这样的情况下,用起来是并不舒服的。仔细研究了一番,发现这一块学问还是比较多的,特做记录。
C++11之前的{}初始化:聚合初始化
在C++11之前,使用{}进行初始化就是可行且常用的,其主要用于两种特定情况:
本系列将分析ByteDance项目ABQ-LLM
的源码,并将重点放在llama模型端到端性能测试上,ABQ-LLM
的模型端到端性能测试是基于NVIDIA的FasterTransformer
项目搭建的。ABQ-LLM
的github仓库:https://github.com/bytedance/ABQ-LLMABQ-LLM
论文链接:https://arxiv.org/abs/2408.08554FasterTransformer
的github仓库:https://github.com/NVIDIA/FasterTransformer
在构建FasterTransformer
时,由于需克隆第三方的cutlass
和googletest
github仓库用于性能对比,而github的访问不太稳定,导致构建缓慢或失败,可选的解决方案包括挂代理和使用github镜像,这里推荐使用github镜像,自己用下来效果比较好的是githubfast.com
。在开始构建前在CMakeLists.txt
中把相关git仓库的链接修改即可。
最近在实现一个LSM键值对存储系统时遇到了一个问题:
LSM键值对存储系统的DELETE
操作是通过插入特殊的符号~DELETE~
实现的,然而对于不同的value类型(string
、int
…),需要定义不同的代表删除的符号。为了定义不同类型的删除符号,初步实现如下:
1 | // 基模板类,提供value()方法获取删除符号,isDeleted()方法判断传入的值是否为删除符号 |