Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Menyahoptimumkan Program dengan Sengaja untuk CPU Intel Sandybridge?

Bagaimanakah Kami Boleh Menyahoptimumkan Program dengan Sengaja untuk CPU Intel Sandybridge?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-02 11:43:09955semak imbas

How Can We Intentionally Deoptimize a Program for Intel Sandybridge CPUs?

Menyahoptimumkan program untuk saluran paip dalam CPU keluarga Intel Sandybridge

Pengenalan

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.

Teknik Penyahoptimuman

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.

Penyahoptimuman berasaskan Pengkompil

1. Pembolehubah atom:
Gunakan std::atomic dan std::atomic untuk kod yang lebih perlahan dan lebih banyak overhed disebabkan oleh pagar memori.

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.

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn