天人合一之毕设——准备阶段——4 字典benchmark

2023-10-18 11:30

本文主要是介绍天人合一之毕设——准备阶段——4 字典benchmark,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 以往的异构内存研究都是一个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一次吧

 函数参数列表中传入的对象不算访问吧?









这篇关于天人合一之毕设——准备阶段——4 字典benchmark的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/232291

相关文章

uva 10916 Factstone Benchmark(打表)

题意是求 k ! <= 2 ^ n ,的最小k。 由于n比较大,大到 2 ^ 20 次方,所以 2 ^ 2 ^ 20比较难算,所以做一些基础的数学变换。 对不等式两边同时取log2,得: log2(k ! ) <=  log2(2 ^ n)= n,即:log2(1) + log2(2) + log2 (3) + log2(4) + ... + log2(k) <= n ,其中 n 为 2 ^

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

POJ2001字典树

给出n个单词,求出每个单词的非公共前缀,如果没有,则输出自己。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

第十章 【后端】环境准备(10.4)——Vagrant

10.4 Vagrant Vagrant 官网 Vagrant 镜像仓库 下载 安装 直接 install。 设置环境变量 Vagrant 默认将镜像保存在用户文件夹的 .vagrant.d 目录下,若用户文件夹在C盘,下载的镜像文件会大量占用C盘空间。设置环境变量 VAGRANT_HOME 后,Vagrant 会将镜像保存到环境变量指定的文件夹下。

OpenStack离线Train版安装系列—2计算节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—1控制节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack镜像制作系列1—环境准备

本系列文章主要对如何制作OpenStack镜像的过程进行描述记录 CSDN:OpenStack镜像制作教程指导(全) OpenStack镜像制作系列1—环境准备 OpenStack镜像制作系列2—Windows7镜像 OpenStack镜像制作系列3—Windows10镜像 OpenStack镜像制作系列4—Windows Server2019镜像 OpenStack镜像制作