Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kami Boleh Menyahoptimumkan Simulasi Monte-Carlo untuk Pemproses Intel Sandybridge?

Bagaimanakah Kami Boleh Menyahoptimumkan Simulasi Monte-Carlo untuk Pemproses Intel Sandybridge?

Linda Hamilton
Lepaskan: 2024-12-03 22:16:12
asal
434 orang telah melayarinya

How Can We Deoptimize a Monte-Carlo Simulation for Intel Sandybridge Processors?

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan