gcc 向量化相关选项
1. alias选项 strict aliasing是编译器优化中依赖的一个假设,即不同类型的指针,指向不同的内存区域。基于该假设,gcc编译器可以进行一些优化。gcc优化-O2默认开启该选项(-fstrict-aliasing)。 使用该选项,需要保证不同类型指针的内存区域不重叠,否则会导致未定义行为。例如: int a = 10; int* p1 = &a; float* ...
1. alias选项 strict aliasing是编译器优化中依赖的一个假设,即不同类型的指针,指向不同的内存区域。基于该假设,gcc编译器可以进行一些优化。gcc优化-O2默认开启该选项(-fstrict-aliasing)。 使用该选项,需要保证不同类型指针的内存区域不重叠,否则会导致未定义行为。例如: int a = 10; int* p1 = &a; float* ...
现代性能分析,使用针对pipeline的分析办法(取代CPU cycles分析)。这源于现代CPU架构的复杂性。 现代CPU处理指令架构,分为前端 Front-end,后端 Back-end两部分。阻碍指令执行的因素,从硬件看,源于前端或后端的Stall。 1. CPU 流水线 Intel CPU流水线一般分为5级。其中解码(ID),意思是将指令操作分解为多个uOp(即拆分为多个更...
1. auto 占位符 1.1 规则 auto推导的原则为:保持原有变量的类型(如cv限定),大致分两种情况: auto: auto含义是创建了一个新的变量: 表达式为T或者T&或者const T& – auto推导为T – 即新变量的类型去除cv限定 (如果原有表达式有cv限定); 表达式为T* const或者T* – auto...
使用Debug模式编译 sort 和 unsort 代码: #include <algorithm> #include <ctime> #include <iostream> int main(int argc, char* argv[]) { constexpr int kArrLen = 1024 * 1024; int* data = n...
1. perf 介绍 perf及子命令可以测量/记录系统性能,可以记录的性能数据项繁多。包括CPU/PMU等硬件数据,以及software counter/tracepoint等系统内核采集的数据。可以关注的几类: CPU / PMU (Performance Monitoring Unit)数据。包括: dTLB, iTLB, cache 计数以及miss计数;branch及br...
1. perf stat 基本使用 perf stat 基本功能 – 统计: cycles 数, IPC (instructions per cycle)。IPC >= 1 表示指令执行效率高 分支切换次数(branchs), 分支预测失败次数(branch-misses),以及失败比例 上下文切换次数(context switches),以及每秒切换次数 CPU...
1. Virtual Memory Statistics – vmstat vmstat 检测cpu、系统内存(包括 slab)、进程、块设备IO等使用情况: CPU相关:用户时间 / 系统时间 / 空闲时间占比。每秒中断数量 / 上下文切换数量。活动进程数量 / 阻塞进程数量,fork进程数量。 内存相关:active/inactive内存,buff/cache内存,swap...
1. 编译选项 -fverbose-asm -fverbose-asm 将编译信息(编译选项等等)、C源码中的变量名,以注释的形式嵌入到汇编代码中,便于分析。
“真实的” 内存空闲率 = (free + shared + buffers + cached)/ Total = 5860 M / 7983M X 100 % = 73.4 % 1. Linux内存分类 匿名内存:存储用户计算过程中间的数据,与物理磁盘上的文件无关; File-Backed内存:用作磁盘高速缓存,其物理内存与物理磁盘上的文件对应; 1.1 Shmem...
1. 配置 1.1 安装 perf sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r` 1.2 设置系统相关设置项以允许 perf 采集 # 允许非特权用户进行内核分析和访问 CPU 事件 echo 0 | sudo tee /proc/sys/kernel/perf_...