Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Menyahoptimumkan Program dengan Sengaja untuk CPU Intel Sandybridge?
Menyahoptimumkan program untuk saluran paip dalam CPU keluarga Intel Sandybridge
Matlamat tugasan ini adalah untuk ubah suai program tertentu untuk mengurangkan prestasinya, yang dikenali sebagai penyahoptimuman. Tugasan ini memerlukan pemahaman tentang seni bina saluran paip Intel i7 dan cara menyusun semula laluan arahan untuk memperkenalkan bahaya.
1. Perkongsian palsu:
Atur pembolehubah bukan atom untuk disimpan dalam baris cache yang sama, yang membawa kepada gerai kiriman stor.
2. Gerai pemaju stor:
Gunakan XOR untuk membalikkan bit tanda ganda dan bukannya menggunakan operator "-", memaksa kedai sempit kepada hanya satu bait daripada gandaan.
3. Nyahkekaburan memori:
Letakkan data 4096B untuk mencetuskan kebergantungan palsu pada kedai ke halaman yang berbeza.
4. Data tidak sejajar:
Gunakan __attribute__((packed)) untuk memaksa penjajaran pembolehubah merentasi baris cache atau sempadan halaman, meningkatkan kesilapan cache.
5. Stride:
Gelung pada tatasusunan dengan langkah 4096 bait, menyebabkan akses memori tidak bersebelahan dan mengurangkan penggunaan cache.
6. Senarai terpaut:
Simpan hasil dalam senarai terpaut, memperkenalkan kebergantungan beban mengejar penuding dan nod yang berpotensi berselerak dalam ingatan.
1. Pembolehubah atom:
Gunakan std::atomic
2. Berganda panjang:
Gunakan pembolehubah berganda panjang untuk memaksa emulasi x87, walaupun dengan CPU berkeupayaan SSE2.
3. Penukaran integer:
Tukar berulang kali antara jenis integer dan apungan, memperkenalkan arahan penukaran dengan kependaman tinggi.
4. Panggilan sistem:
Perkenalkan panggilan sistem yang tidak diperlukan yang kerap untuk memaksa suis konteks dan cache/TLB terlepas.
Dengan menggunakan teknik ini, adalah mungkin untuk meremehkan perkara yang diberikan dengan ketara program dan menjadikannya berjalan lebih perlahan daripada versi asalnya. Kunci kepada penyahoptimuman yang berjaya adalah untuk mewajarkan setiap langkah dengan "ketidakcekapan jahat" dan bukannya niat jahat.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Menyahoptimumkan Program dengan Sengaja untuk CPU Intel Sandybridge?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!