Home >Backend Development >C++ >How Can We Intentionally Deoptimize a Program for Intel Sandybridge CPUs?
Deoptimizing a program for the pipeline in Intel Sandybridge-family CPUs
The goal of this assignment is to modify a given program to decrease its performance, known as deoptimization. This task requires an understanding of the Intel i7 pipeline architecture and how to re-order instruction paths to introduce hazards.
1. False sharing:
Arrange for non-atomic variables to be stored in the same cache line, leading to store-forwarding stalls.
2. Store-forwarding stalls:
Use XOR to flip the sign bit of a double instead of using the "-" operator, forcing a narrow store to just one byte of the double.
3. Memory disambiguation:
Place data 4096B apart to trigger false dependencies on stores to different pages.
4. Misaligned data:
Use __attribute__((packed)) to force misalignment of variables across cache line or page boundaries, increasing cache misses.
5. Stride:
Loop over arrays with a stride of 4096 bytes, causing non-contiguous memory access and reducing cache utilization.
6. Linked list:
Store results in a linked list, introducing pointer-chasing load dependencies and potentially scattered nodes in memory.
1. Atomic variables:
Use std::atomic
2. Long double:
Use long double variables to force x87 emulation, even with SSE2-capable CPUs.
3. Integer conversions:
Repeatedly convert between integer and float types, introducing conversion instructions with high latency.
4. System calls:
Introduce frequent unnecessary system calls to force context switches and cache/TLB misses.
By employing these techniques, it is possible to significantly pessimize the given program and make it run much slower than its original version. The key to successful deoptimization is to justify each step with "diabolical incompetence" rather than malicious intent.
The above is the detailed content of How Can We Intentionally Deoptimize a Program for Intel Sandybridge CPUs?. For more information, please follow other related articles on the PHP Chinese website!