昨天写了第一个lab,没来得及更新,今天追更,第一次用优快云的Markdown,有点意思。
一些编译优化命令
1、Parallel Optimization Basics (并行优化)
程序类型:计算(Computing)密集型、IO密集型
并行类型:指令级(Instruction Level)- SIMD - 通过调编译器参数(Compiler Parameters)优化
线程级(CPU core level)
机器级(Machine level) - MPI
2、Compiling Optimizations (GCC)
- 与编译器优化无关的选项(功能性选项)
-g:开关调试信息
-l :链接库
-L:增加链接库的搜索路径
-I :增加头文件搜索路径
-D:传宏文件
-S:不完成编译,只生成汇编
-c:.c => .o
-o:输出文件名
-pthread / -qopenmp // ICC specified :调用pthread库,进行多线程编译
-openmp:调用openmp库,进行多线程编译
-emit-llvm // clang specified - 编译器优化选项
-O[0-3] (Optimization):优化等级开关(等级越高,优化越强,也有可能出现更大的bug,看不出编译处的语句对应哪条源代码,编译速度越慢)。是一个比较大的开关。具体信息参考https://blog.youkuaiyun.com/zhang626zhen/article/details/52988242
-f[](Flag):是个小开关,[ ]内填参数,有的和优化相关(-funroll-loop),有的和语义相关.
-fno-[]:例如-fno-expetions
-mtune
-march=[ivybridge, haswell, broadwell, native]:其中native参数指和本地一致,调到本机CPU支持的最新指令
CPUID instruction:运行时判断CPU版本的指令
gcc编译器参数手册:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options
3. HPC Related Toolchains
编译器:
GCC(开源)
Clang / Clang++ - LLVM C/C++ (开源)
ICC - Intel C++ Compiler(付费):对Intel自家的优化效果特别好
GPI - NVIDIA (付费)