ocolos论文阅读笔记
基本概念1. 什么是函数重排和基本块重排基本块重排是指在函数内部,重新排列程序的基本块顺序。基本块是程序中由顺序执行的一组指令组成的片段,且在执行的过程中不会发生跳转(除了最后一条指令可能是跳转指令)。重排的目的是使 高频执行的基本块(热路径) 彼此相邻,以减少分支跳转,增加代码的局部性。
123456if (condition) { // Basic Block A (frequently executed)} else { // Basic Block B (rarely executed)}// Basic Block C (frequently executed)
基本块重排:对函数内部的基本块重新排序,优化局部性,减少跳转和缓存失效。函数重排:对整个程序中函数的顺序进行调整,以便高频调用的函数相邻,优化函数调用的性能。
2. 获得函数地址后为什么要进算数混淆再还原使用在 C/C++ 中,函数指针 是一个保存函数入口地址的变量。即通过该指针,你可以调用函数。当你将函数指针强制转换成整数时,本质上是获取了函数在内存中 ...
CMake学习
基本介绍CMake是一个跨平台的编译工具,可以用简单的语句来描述所有平台的编译过程。 CMake能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性。 CMake的配置文件叫做CMakeLists.txt。 CMake不直接生成最终的软件,而是生成标准的构建文件,然后再用一般的构建方式使用。 CMake可以帮助开发者在复杂的项目中管理编译关系,简化二次开发的过程。
BOLT学习笔记
背景:数据中心应用程序通常非常庞大和复杂,因此代码布局成为提高性能的重要优化手段。BOLT是一个链接后优化工具,它可以对已经编译和链接的二进制文件进行重新代码布局和优化,以提高程序的性能。文章证明了,虽然在早期注入配置文件可以通过更多的优化使用,但稍后注入可以更准确的使用信息,以获得更好的代码布局。
主要贡献:
描述了基于LLVM架构的优化
后链接优化可更好的利用分析数据
编译时、链接时、后链接 FDO 之间互补而非互相替代。
BOLT工具介绍:BOLT是一个后链接二进制优化工具,通过重新布局应用程序的二进制代码,从而减少指令缓存(ICache)不命中率。因为ICache不命中会对性能产生重大影响,特别是对于那些指令密集型的应用程序。
执行流程:1.BOLT首先分析程序的执行,收集关于分支和基于性能的信息。2.它利用这些信息来重新布局二进制文件的函数和基本块,以减少ICache的不命中。3.通过调整代码以利用现代硬件上的其他特性。
优点:与其他优化技术相比,BOLT具有更好的性能提升,尤其是对于大型、长时间运行的应用程序。BOLT不需要源代码进行优化,可以直接在二进制文件上操作。
工 ...
布尔逻辑和逻辑门
1 简介计算机是由二进制表示的,起初人们试过3进制和5进制,但是当状态存在的越多的时候,我们越难以区分不同状态之间的界限。你的手机显示电量不足很可能是因为周围微波炉信号的干扰,想想看那样是不是很糟糕。
二进制代表两个状态:true or false ,仅仅靠着这两个状态我们就可以实现控制晶体管,执行相应的程序,不夸张的说,有了二进制,你就拥有了全世界。
2 布尔代数和通常我们所学的代数不同,逻辑代数的值只有 True ,false和逻辑操作,当然由他的名字我们很容易知道,他是由英国数学家布尔发明的。布尔代数又称作逻辑代数。
3 逻辑门对于逻辑运算 ,我们可以通过简单的晶体管实现:
not:
or:
and:
xor:
编译器概述
编译器的定义与分类Q:平常软件的输入输出是什么?A:举例:美图秀秀输入原始照片,输出修图调节后的照片;语音识别:输入语音输出识别后的文本。
定义:
把高级编写的程序转换为源程序、目标代码、中间语言程序这几种类型。
中间语言->可执行代码
一种汇编->另一种汇编
一种二进制->另外一种二进制
Q:静态编译和动态编译的区别?A:静态编译运行在编译之后,动态编译编译和运行同时发生。
程序的中间表示
符号表
程序运行时的内存组织
程序分析和优化
交叉编译用编译器优化程序的迭代循环
研读用于识别编译器关键优化的热点驱动半自动竞争分析框架
相关知识1.热点代码: 意指在程序运行时频繁执行的部分代码,这些代码可能会成为性能瓶颈,因此通过识别热点代码可以实现程序运行时的性能优化。
2.动态二进制检测: 一种用于分析和测试计算机程序的方法,它在程序执行时,对程序的二进制代码进行分析。与静态分析不同,动态二进制检测是在程序运行时获取和分析信息,这使得它能够捕获程序的实际行为和状态。
3.热点的指令表征: 是指在程序执行期间特定代码段(通常是循环或频繁执行的代码块)的指令序列的特性或表示。这些特性用于分析和优化程序的性能。
4.二进制文件热点检测的一般过程:
二进制文件的热点检测过程是指在分析程序的二进制可执行文件时,识别和定位程序中的热点代码段的过程。热点代码段通常是程序中频繁执行的部分,可能会对程序的性能产生显著影响。以下是一般的二进制文件热点检测过程的关键步骤:
(1) 二进制反汇编:首先,将二进制可执行文件反汇编为汇编代码,以便进一步分析。这一步通常由反汇编工具执行。
(2)指令计数:对反汇编后的代码进行指令计数,以确定哪些指令或代码块在程序执行期间被频繁执行。这可以通过跟踪指令的执行次数或执行路径来实现。
(3)性能分析 ...
麻麻花的春天
我出生于山西的一个小村庄。
小的时候,最喜欢和爷爷在繁华似锦的季节,带着小篮子,去采一种叫做“麻麻花”的植物。那种花很小,但很香,那种沁人心脾的感觉,就好像整个人置身于花海之中游趟。这种花开的很小,开的很少,采的时候也很有讲究。要采那种含苞待放的花骨朵,在它的香气没有蔓延出来时,保存起来。待到做饭时,捏一两朵,趁着油刚热和葱花一起在锅里翻涌。这样炒出来的面有着春天的味道。每当这个时节,那便是我最开心的时候,我们会给自己留下一点,剩下的全部,拿到市场上去卖。城里人很看好这种花,因为很罕见,所以我们都能卖个大价钱。
图1 我和爷爷
这份动力,便是支撑着我,在柳絮纷飞的季节邂逅春天。每当我们采累了的时候,都会在那高高的山上,望向那一座座的城,那一幢幢的高楼大厦,是我记忆中最大的风景。我爱这山,爱她庇护着我们一代代的人,爱她在春天时开着漫山遍野的野花,爱她在夏天时山脚处的幽凉,爱她在秋天时捧着满眼金黄的稻穗,爱她在冬天时裹着皑皑的白雪。但我又讨厌她,她拉开了了我们与城市的距离。
这个时候的爷爷总会对我说,人要望的远,不能活在当下。就像这一座座的山,你只有在高处才能看到山 ...
黎明破晓之日
aad056d760d37af61e9208b0dbddcb0c9f1229a9ba1d5b41c2e259f52ac88e70fa88cd9e53a60d503cc46b27935912415cb431024d9540b40095035765221f6867b66da4b4c5436c8b977c60e63941aa8af1054935bde86c7f1a4831751de5cf0bfb563486a06e83bfe7ea21be39d5d2c7ef58a6570c438ddc4d7853b2ad83b1b50747cbaeeaa6c0e84f67b2a5fadf4df99bfcbba09148c08d2785405ce80fc050f13a5331aade39894d42422667a12e86ad88569801eb6a6f008aa344286725ed902aa796a096c7e64d3a26f8bcd39e5f60523d9c67d7522466c18fee30ae625145514bd314a16c764fc3773dcb5637bd141c8cc1b5c0363 ...
海康威视校园招聘--第一弹(人工智能)
【🌟海康威视2024届全球校园招聘正式启动】
🎯【多元岗位,给你更多选择】10大岗位类别,全球工作地点,网申通道现开启。
🉐 【加入海康威视,你可以获得】🚀 影响世界的宽广舞台✨ 持续可期的成长回报💪 踏实专注的做事氛围💡 接轨市场的创新实践
📮 【简历投递方式】➡ PC端校招官网(建议):campushr.hikvision.com▶ 微信端:关注“海康威视招聘”公众号,投递微简历内推码:54A73I推荐岗位:算法/网络安全/大数据类:AI加速算法工程师、仪表算法工程师、无损检测算法工程师、安全研究员 等器件电路类:电路设计工程师、系统全栈开发工程师、光电传感器开发工程师、封装设计工程师、X-Ray探测器开发工程师 等
加入海康威视,智能物联新未来,因你来!