当前位置:网站首页>Programming skills for optimizing program performance
Programming skills for optimizing program performance
2022-07-05 12:28:00 【yang881221】
After reading 《 Deep understanding of computer systems 》, Our programming is not just simple code . Instead, we should combine the foundation of the system to write more optimized code . We write code by understanding how computers work . Look at our code at a lower level , Perhaps a simple loop can change the overall efficiency of the code .
Modern compilers are complex , It does a lot of work for the program , The goal is to make the program safer and faster . For example, our compilation optimization options -Og -O1 -O2 -O3 etc. , But also due to optimization , Our machine instructions are arranged “ Beyond recognition ”, If you don't believe it, you can use the optimized code to disassemble , It will be much more than you think .
Here are a few guidelines that apply
1. Eliminate the inefficiency of the cycle , Never add extra calculations , What should be moved outside the circulation is moved outside the circulation
2. Reduce procedure calls , Of course, this is a double-edged sword , For example, the use of inline functions , But if you reduce it too much , It will make our code logic messy
3. Reduce unnecessary memory references , The best examples here are copy constructors and move constructors . After all, deposit access and cpu Compared with the execution cycle of , Too slow .
4. Try to improve cache shooting , This requires writing code , Try to put frequently accessed data into one cacheline in , Or do cacheline Alignment of , Here is another double-edged sword , It may waste a lot of space after alignment , After all cache Still valuable .
5. Loop unrolling , Use circular blocking , Reduce the number of iterations of the loop , Increase the number of elements calculated per iteration . Reduces the number of operations that do not directly contribute to program results , Provide some ways to optimize your code , Reduce the number of operations on the critical path in the whole calculation .
6. Improve parallelism , Contemporary computer systems are basically multi-core architecture , Different cores can process different data , Of course, the splitting of data here is very important , In particular, the correlation of data has a great impact on parallelism .
7. Write code suitable for conditional delivery , After all, branch prediction is miss The price is relatively high , Need to fill in the assembly line again .
8. Understand memory performance , Memory bus bandwidth , If you can use register variables, you don't need memory variables .
9. By using multiple accumulation variables and recombination techniques , Find ways to improve the parallelism of instruction sets .
10. Try to reduce cache line Of miss and cache The shaking of .
11. Disassemble the code of high-level language , Find ways to optimize from the assembly .
边栏推荐
- Leetcode-1. Sum of two numbers (Application of hash table)
- Experimental design - using stack to realize calculator
- Master the new features of fluent 2.10
- Semantic segmentation experiment: UNET network /msrc2 dataset
- The survey shows that traditional data security tools cannot resist blackmail software attacks in 60% of cases
- MySQL stored procedure
- How to design an interface?
- Flutter2 heavy release supports web and desktop applications
- ZABBIX agent2 monitors mongodb nodes, clusters and templates (official blog)
- 只是巧合?苹果 iOS16 的神秘技术竟然与中国企业 5 年前产品一致!
猜你喜欢

Tabbar configuration at the bottom of wechat applet

The relationship between the size change of characteristic graph and various parameters before and after DL convolution operation

Linux Installation and deployment lamp (apache+mysql+php)

Knowledge representation (KR)

Matlab struct function (structure array)

The evolution of mobile cross platform technology

One article tells the latest and complete learning materials of flutter

Detailed structure and code of inception V3

Four operations and derivative operations of MATLAB polynomials

Learn memory management of JVM 01 - first memory
随机推荐
MySQL splits strings for conditional queries
【ijkplayer】when i compile file “compile-ffmpeg.sh“ ,it show error “No such file or directory“.
Error modulenotfounderror: no module named 'cv2 aruco‘
Handwriting blocking queue: condition + lock
A guide to threaded and asynchronous UI development in the "quick start fluent Development Series tutorials"
Resnet18 actual battle Baoke dream spirit
Get the variable address of structure member in C language
ZABBIX ODBC database monitoring
ZABBIX monitors mongodb templates and configuration operations
Swift - enables textview to be highly adaptive
Acid transaction theory
II. Data type
Why do you always fail in automated tests?
Redis highly available slice cluster
SENT协议译码的深入探讨
ZABBIX 5.0 - LNMP environment compilation and installation
Learn JVM garbage collection 05 - root node enumeration, security points, and security zones (hotspot)
Matlab boundarymask function (find the boundary of the divided area)
Leetcode-1. Sum of two numbers (Application of hash table)
Learn the memory management of JVM 02 - memory allocation of JVM