天人合一之毕设——准备阶段——4 字典benchmark
2018-01-30 21:11
155 查看
以往的异构内存研究都是一个online的监测预测方式,我做的毕设主要是从程序层面来做对异构内存的放置进行优化。
要想效果好看一点,就要手写一个仿存特征明显一些的,有意的让他时冷时热,自己控制。
师兄推荐的是key-value的字典,这样可以进行增删改查,人为的制造数据热点。
gitup上下载了一个已实现的C程序。
下面是初步程序分析
1.malloc申请对象
因为是针对堆区做的,所以只关注malloc的对象(我下的这个程序里用的calloc)
用到calloc的地方主要有:
(1)hash_entry结构体
(2)hash_entry结构体中的value
(3)计算key的hash值,把key赋值给src
(4)整个hash表结构体
(5)hash表结构体中的size个hash_entry
(6)字典初始化函数里
总体来说,分配的对象太少了,我还需手动添加一些局部变量的malloc
特别是在for while循环当中可能存在的整体冷局部热的数据。
2.对象大小
每个指针占4个内存,这是dictionary_t和hash_entry_t 4个字节的原因
16个字节是hash_t结构体占的内存
264 = 256【KEY_MAX_LEN】+ 2*4(两指针)
注意:给指针成员分配内存后,还需要给指针指向的地方分配内存
h->array的大小为1024 由sizeof(hash_entry_t * )*HASH_SIZE而的达到
而目前本程序中为4*256=1024
另外两个entry->value 由sizeof(unsigned char)*value_len
完全是根据自己对value的赋值决定,譬如说赋值为“world”则大小为5
3.对象被访问
可以分别在每个子函数中计算对象被访问次数(一些不会进入的分支不考虑)。
如果将分配对象返回,在上层函数中还会继续使用,还要考虑名字变更的问题(可以考虑直接统一)
如果将分配对象传入,要考虑下层函数对对象的访问
而且还要避免重复命名,提取会很不易,避免短字母组合成为某函数的一部分错误识别
不确定的地方:
dict和h都是对象,dict->h算是访问了两个还是一个啊(目前觉得是两个)。
h是对象,size是h结构体的一部分,h->size计算访问h一次吧
函数参数列表中传入的对象不算访问吧?
要想效果好看一点,就要手写一个仿存特征明显一些的,有意的让他时冷时热,自己控制。
师兄推荐的是key-value的字典,这样可以进行增删改查,人为的制造数据热点。
gitup上下载了一个已实现的C程序。
下面是初步程序分析
1.malloc申请对象
因为是针对堆区做的,所以只关注malloc的对象(我下的这个程序里用的calloc)
用到calloc的地方主要有:
(1)hash_entry结构体
(2)hash_entry结构体中的value
(3)计算key的hash值,把key赋值给src
(4)整个hash表结构体
(5)hash表结构体中的size个hash_entry
(6)字典初始化函数里
总体来说,分配的对象太少了,我还需手动添加一些局部变量的malloc
特别是在for while循环当中可能存在的整体冷局部热的数据。
2.对象大小
每个指针占4个内存,这是dictionary_t和hash_entry_t 4个字节的原因
16个字节是hash_t结构体占的内存
264 = 256【KEY_MAX_LEN】+ 2*4(两指针)
注意:给指针成员分配内存后,还需要给指针指向的地方分配内存
h->array的大小为1024 由sizeof(hash_entry_t * )*HASH_SIZE而的达到
而目前本程序中为4*256=1024
另外两个entry->value 由sizeof(unsigned char)*value_len
完全是根据自己对value的赋值决定,譬如说赋值为“world”则大小为5
3.对象被访问
可以分别在每个子函数中计算对象被访问次数(一些不会进入的分支不考虑)。
如果将分配对象返回,在上层函数中还会继续使用,还要考虑名字变更的问题(可以考虑直接统一)
如果将分配对象传入,要考虑下层函数对对象的访问
而且还要避免重复命名,提取会很不易,避免短字母组合成为某函数的一部分错误识别
不确定的地方:
dict和h都是对象,dict->h算是访问了两个还是一个啊(目前觉得是两个)。
h是对象,size是h结构体的一部分,h->size计算访问h一次吧
函数参数列表中传入的对象不算访问吧?
相关文章推荐
- 天人合一之毕设——准备阶段7 我遇到的有关栈的错误
- 天人合一之毕设——准备阶段——3 HME仿真器
- 天人合一之毕设——准备阶段8 进阶正则表达式
- 天人合一之毕设——准备阶段——1 初识malloc
- 天人合一之毕设——准备阶段——Java图建立与遍历
- 天人合一之毕设——准备阶段9 C语言的传参形式
- 天人合一之毕设——准备阶段—— 2 函数调用图(call graph)
- 天人合一之毕设——实践阶段7—— 画图
- 天人合一之毕设——实践阶段4——棘手的return语句
- 机房准备阶段(一)
- Android高德地图开发(1)——准备阶段
- 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
- Zephyr OS 内核篇:系统启动 - C 准备阶段
- iOS 开源项目[我的衣橱]开发阶段1:项目准备
- nagios全攻略(一)---准备阶段
- 数据分析与挖掘学习日志之数据准备阶段(一)
- [茶聊] 项目准备阶段
- win10安装准备设备阶段黑屏
- [阶段总结]一个多月的求职从心理准备、实际准备到网申、笔试、面试的整个前期阶段的总结
- libevent项目分析(一) -- 准备阶段 .例程分析