一时的选择
aad056d760d37af61e9208b0dbddcb0ccc99385f680f2091d958a7e791d2e4fb1cb5649874b5b30fb97a80e79bca545a5949d3f29028b5682f1e9a903f1341e3ba94b872e15c8ce352b033e4aa887cd47d31d0d7ac9532cc437da5694a027b824bbd8e3ee02c1063c465bd64bc54ed29acec976aab7b9b95646e569cd351bda8c45e32741a82d1d99c5374acac4395512a736f8e7590d1bb838aeb58a95f1d709fe3bdb73e78baecb5edca877bf9a86775952e2d1c0bb55d830970f3097a97c4cbf696cb7fbae07476196dd085e753bb074c00adfe777407c0593548a7f2a60376b721c27c4c0caf787c641269cae00e4676ee01b2c08d3a9 ...
ocolos论文阅读笔记
摘要非托管代码(unmanaged code):指不依赖于运行时环境来管理内存和其他资源的代码。通常,C、C++、Rust 等语言编写的程序属于非托管代码,直接与操作系统交互,开发者需要手动管理内存、线程等资源。
托管代码(managed code):在某种运行时环境中执行的代码,这些环境负责自动管理内存、线程、垃圾回收等资源,减少了开发者的负担。例如Java运行在JVM上,JVM会负责内存分配和垃圾回收等工作。
基本概念1. 什么是函数重排和基本块重排基本块重排是指在函数内部,重新排列程序的基本块顺序。基本块是程序中由顺序执行的一组指令组成的片段,且在执行的过程中不会发生跳转(除了最后一条指令可能是跳转指令)。重排的目的是使 高频执行的基本块(热路径) 彼此相邻,以减少分支跳转,增加代码的局部性。
123456if (condition) { // Basic Block A (frequently executed)} else { // Basic Block B (rarely executed)}// Basic Block ...
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 ...