Menyahoptimumkan program untuk saluran paip dalam CPU keluarga Intel Sandybridge
Pengenalan
tugasnya adalah untuk mengurangkan kecekapan program simulasi Monte-Carlo dengan mengeksploitasi seni bina pemproses Intel Sandybridge. Pemproses ini mempunyai saluran paip yang tidak tersusun dengan ciri seperti penamaan semula daftar dan penimbalan stor, menjadikannya mencabar untuk mengurangkan keselarian tahap arahan (ILP) dan memperkenalkan bahaya.
Analisis Program
Program ini ialah simulasi Monte-Carlo yang mengira harga pilihan panggilan dan letak vanila Eropah. Komponen utama program ini ialah:
- Gelung yang berulang beberapa kali tertentu
- Penjanaan nombor rawak Gaussian
- Formula Harga Pilihan Black-Scholes
Pengoptimuman Teknik
Teknik berikut boleh digunakan untuk mengurangkan kecekapan program:
-
Kebergantungan palsu: Perkenalkan kebergantungan yang tidak perlu antara arahan untuk meningkatkan gerai bahaya.
-
Sesak ingatan: Menyebabkan cache hilang dan ingatan kelewatan capaian dengan menjajarkan data atau menggunakan corak capaian memori bukan bersebelahan.
-
Arahan tertunda: Gunakan arahan yang mempunyai latensi yang lebih panjang dan boleh ditangguhkan melalui saluran paip.
-
Operasi yang kurang cekap: Gunakan operasi matematik yang kurang cekap seperti pembahagian dan bukannya pendaraban.
-
Salah ramal cawangan: Perkenalkan cawangan yang tidak dapat diramalkan untuk menyebabkan saluran paip mengalir.
-
Gerai penghantar stor: Gunakan teknik seperti XORing bait tinggi beregu untuk menyebabkan penghantaran stor gerai.
-
Cache arahan terlepas: Bahagikan rutin kepada bahagian kecil untuk menyebabkan kesilapan cache arahan.
Cadangan Khusus
Berdasarkan teknik di atas, berikut adalah beberapa cadangan khusus untuk meremehkan program:
- Gunakan std::atomic untuk pembilang gelung dan salah jajarkannya.
- Gorong perkongsian palsu antara pembolehubah bukan atom.
- Berbilang benang dengan satu pembilang gelung std::atomic.
- Tulis semula ungkapan dengan persamaan bersekutu/distributif untuk meningkat berfungsi.
- Gunakan fungsi intrinsik dengan berhati-hati untuk mengelakkan gerai saluran paip.
- Gunakan pemasangan sebaris untuk memecahkan cache uop.
- Gunakan CPUID/RDTSC untuk memasa setiap lelaran dan mendorong siri .
- Lintas tatasusunan dalam susunan tidak bersebelahan dan gunakan tatasusunan dengan pelapik dan tidak sejajar elemen.
- Gunakan ketepatan ganda dan bukannya terapung untuk meningkatkan kependaman.
- Paksa penukaran daripada integer untuk terapung dan kembali semula.
-
Lumpuhkan pengoptimuman pengkompil dengan -O0 dan gunakan -march=i386 untuk arahan yang lebih perlahan.
- Tetapkan perkaitan CPU dengan kerap kepada CPU yang berbeza.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Menyahoptimumkan Simulasi Monte-Carlo untuk Pemproses 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