爱刷美剧的安德鲁在写总结 level
获赞
0
粉丝
0
关注
0
看过 TA
0
清华大学
2027
Python
IP属地:上海
暂未填写个人简介
私信
关注
08-12 14:17
清华大学 Python
实验:1.0 基本香农熵块级重排\n\n目标:在 单个基本块 内,用 香农熵 度量指令分布混乱度,然后贪心重排使同 opcode 相邻,观察 SPEC2006/2017 子项 401.bzip2 的能量变化。\n\n---\n\n1. 环境\n\n- 硬件:i7-13700H,固定 3.6 GHz,Turbo/HT 关  \n- 软件:LLVM 18 Release + 手写 FunctionPass  \n- 基准:401.bzip2(训练输入 `input.combined`)  \n- 指标:`perf stat -e energy-pkg,task-clock,instructions,cycles`  \n- 编译:`-O3 -fno-unroll-loops -mllvm -enable-entropy-v1`\n\n---\n\n2. 实现(60 行 Pass)\n\n```cpp\n// EntropyV1.cpp\nstruct EntropyV1 : public FunctionPass {\n  static char ID;\n  EntropyV1() : FunctionPass(ID) {}\n\n  bool runOnFunction(Function &F) override {\n    for (BasicBlock &BB : F) {\n      if (BB.size() \u003C 4) continue;\n\n      // 1) 统计 opcode 频次\n      DenseMap\u003Cunsigned, unsigned> freq;\n      for (Instruction &I : BB)\n        ++freq[I.getOpcode()];\n\n      // 2) 计算香农熵\n      unsigned N = BB.size();\n      double H = 0.0;\n      for (auto [opc, c] : freq) {\n        double p = 1.0 * c / N;\n        H -= p * log2(p);\n      }\n\n      // 3) 贪心重排:按 opcode 频次升序,同 opcode 尽量连续\n      SmallVector\u003CInstruction *> order;\n      for (auto &I : BB) order.push_back(&I);\n      std::stable_sort(order.begin(), order.end(),\n                       [&freq](Instruction *a, Instruction *b) {\n                         return freq[a->getOpcode()] \u003C freq[b->getOpcode()];\n                       });\n\n      // 4) 原地重排
0 点赞 评论 收藏
分享
08-12 08:13
清华大学 Python
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务