-
levelDB是一个有序的KV存储,因此key的顺序是十分关键的 levelDB提供用户自己定义key顺序的能力 先看下comparator的接口 接口 include/leveldb/comparator.h 1 2// A Comparator object provides a total order across slices that are 3// used as keys in an sstable or a database. A Comparator implementation 4// must be thread-safe since leveldb may invoke its methods …
Read More -
背景 最近在做一个智能算力相关的项目,类似美团外卖广告智能算力的探索与实践 其中实现控制系统需要与数据库交互。 虽然最后技术选型并没有使用到levelDB,但是想趁机把代码读了吧。 很惊讶的发现我大三的时候声称自己读过部分levelDB代码,甚至还写了几篇相关的博客,比如 murmurhash源码分析 Lock-free vs wait-free concurrency 内存屏障(Memory Barriers) levelDB 学习笔记 但是我却一点都没印象了.... 仔细看来很多概念在当时可能都是没有充分理解的,而且从数目上来看,应该并没有完整看完levelDB代码。 所以重新开个坑,看看自己比起毕业前有没有长进【没有 先从 …
Read More -
博客要长草了。。趁着过年时间多,打理一下。。 添加google analytics hugo本身已经集成了这个功能 要点是集成的是旧版本的universal analytics (对应的是UA-ID) 而目前google主推得其实是新版本google analytics 4(对应的是GA4-ID) 更换主题 更换主题为 hugo-clarity 最主要的原因是之前的博客主题语法高亮有些问题... cpp中代码添加了注释后,会将代码显示在注释的同一行 proto文件不能正确换行 所以换了个可以正确解析语法的主题... 问题1 github actions执行正常,访问渲染好的页面提示 1 2This page contains …
Read More -
Goodbye 2021
Jan 3, 2022 · 1 min read在公司做ppt做到吐血,恰好想起2021年终总结还没有写 过去的一年 总的来说,2021年真的是无比辛苦的一年。 转行互联网的阵痛期这句话其实完全不是开玩笑。从CV转来做推荐,技术栈看起来接近,但是问题的重点变得很不一样。 推荐场景存在大量稀疏特征,而CV下大部分特征都是稠密的 推荐模型更新频繁,几分钟就要做一次更新,而CV模型的迭代速度是以天或者周来计算的 离线请求和在线serving. 当然这点其实并不是CV/推荐 带来的不同 以至于对于行业内一些人尽皆知的概念,我第一次听到也一头雾水。比如"看一下服务的流量分布",比如“统计下p99”最初这一个个简单的概念都让工作比较吃力 说起"阵痛 …
Read More -
背景 最近在调研各种hashmap.. 发现ska::flat hash map性能优秀。。于是来看看代码。。 发现最大的特点是,ska::flat_hash_map使用了带probe count上限的robin hood hashing 相关概念 Distance_from_desired 对于采用了open addressing的hash实现,当插入发生冲突时,会以一定方式(如线性探测、平方探测等)来探测下一个可以插入的slot. 因而实际插入的slot位置与理想的slot位置通常不相同,这段距离定义为distance_from_desired 在没有冲突的理想情况下,所有distance_from_desired的值应该都为0 …
Read More -
背景 起因是同事在实现int4的功能,结果流水线有一条死活过不了(gcc版本为4.8.5),一直core dump 经过初步排查,找出了如下最小可以复现的代码: 1 2#include <immintrin.h>3 4class Test{ 5 public: 6 Test(){ 7 tmp = _mm256_set_epi32(0,0,0,0,0,0,0,0); 8 } 9 private: 10 __m256i tmp; 11}; 12int main(){ 13 auto *tmp = new Test(); 14 return 0; 15} gcc版本为4.8.5 其中编译选项为 1g++ -std=c++11 …
Read More -
背景 动手实现一个简单的Lab,主要依赖于课本第八章的内容 感觉主要是05比较难。。发现执行的顺序不太对。。原因是SIGCHLD里面waitpid参数没写对。。 后面的就相对简单了 累计大概花了10个小时的样子 实现细节 built-in comamnd built-in command 指的是shell自身的命令,因此只有少数几个,比如pwd.在上使用which pwd的时候,会提示"pwd: shell built-in command" 测试文件的构成 以trace04.txt举例 1# 2# trace04.txt - Run a background job. 3# 4/bin/echo -e …
Read More -
背景 怎么算微分。。通常有三种方法。 Symbolic Differentiation Numerical Differentiation Automatic Differentiation (auto diff) auto diff中两种主流的方式分别是forward-mode和reverse-mode 由于forward-mode的方法中,计算的时间复杂度是O(n),n是输入的参数个数。而reverse-mode中,计算的时间复杂度是O(m),m是输出节点的个数。在dnn中,n往往很大,远大于m,因此这里主要介绍reverse-mode auto diff方法。 backprop和reverse mode auto …
Read More -
背景 动手实现一个memory allocator,体会core到爆炸的乐趣(不是 trace file 结构分析 trace file 是对allocator的输入的描述,可以从mdriver.c中的 1static trace_t *read_trace(char *tracedir, char *filename); 看到Parse的逻辑,从而得到trace file的结构。 1 fscanf(tracefile, "%d", &(trace->sugg_heapsize)); /* not used */ 2 fscanf(tracefile, "%d", …
Read More -
迫于生计,从今天开始学习推荐系统相关的内容,今天先来读一篇推荐系统领域的综述 Toward the next generation of recommender systems: a survey of the state-of-the-art and possible extensions 由于目前的工作其实是偏向推荐系统的serving,训练的开发,因此这些paper可能都是粗读,也不会把paper中的内容逐句翻译,而是找出我认为最为重要的一些概念加以记录。 INTRODUCTION 推荐的问题简单可以归纳成对user未看见的item进行打分的过程,这个分一般称之为rating.有了rating,推荐前top k 个最好 …
Read More