Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Simulasi Monte Carlo Boleh Dinyahoptimumkan Lagi untuk Memperlahankan Perlaksanaan Dengan Ketara pada CPU Intel Sandybridge-Family?

Bagaimanakah Simulasi Monte Carlo Boleh Dinyahoptimumkan Lagi untuk Memperlahankan Perlaksanaan Dengan Ketara pada CPU Intel Sandybridge-Family?

DDD
DDDasal
2024-11-29 00:57:10951semak imbas

How Can a Monte Carlo Simulation Be Further Deoptimized to Significantly Slow Down Execution on an Intel Sandybridge-Family CPU?

Menyahoptimumkan program untuk saluran paip dalam CPU keluarga Intel Sandybridge

Matlamat: Untuk mengasingkan program untuk berjalan lebih perlahan, dengan mengeksploitasi pengetahuan tentang Intel i7 saluran paip.

Masalah:

Tugasan menyediakan dua pilihan: program Whetstone atau Monte-Carlo. Pelajar memilih program simulasi Monte-Carlo, tetapi usaha pesimisme mereka hanya meningkatkan masa berjalan kod sesaat.

Soalan:

Bagaimanakah pelajar boleh terus pesimis kod untuk mencapai yang lebih penting kelembapan?

Jawapan:

Strategi Umum:

  • Perkenalkan cawangan yang tidak dapat diramalkan untuk meningkatkan penalti yang salah ramal.
  • Panjangkan rantai pergantungan yang dibawa gelung untuk mengurangkan tahap arahan selari.
  • Gunakan operasi dan div FP yang lebih perlahan, terutamanya fungsi exp dan log.

Idea Khusus Uarch:

Dengan intrinsik ():

  • Gunakan movnti untuk membuang data daripada cache.
  • Gunakan kocok integer antara operasi matematik FP untuk menyebabkan kelewatan pintasan.
  • Elakkan mencampurkan arahan SSE dan AVX tanpa menggunakan vzeroupper.

Dengan (sebaris) asm:

  • Isu penjajaran paksa untuk memecahkan cache uop.
  • Gunakan diri mengubah suai kod untuk mencetuskan saluran paip jelas.

Menimbulkan Kehilangan Cache dan Kelembapan Memori:

  • Lakukan kedai sempit untuk menyebabkan gerai kiriman stor.
  • Ganti vars tempatan dengan ahli struct besar untuk mengawal susun atur memori.
  • Susun susun atur memori untuk meningkatkan kehilangan cache dan beban pisah halaman.
  • Gunakan pembolehubah tidak sejajar untuk merentangi sempadan baris cache atau halaman.
  • Gelung pada tatasusunan dalam susunan tidak bersebelahan.
  • Pertimbangkan menggunakan senarai terpaut dan bukannya tatasusunan.

Lain-lain Teknik:

  • Gunakan std::atomic pembilang gelung untuk operasi atom yang lebih perlahan.
  • Kompilasi dengan -m32 atau -march=i386 untuk memaksa penjanaan kod yang lebih perlahan.
  • Paksa pengiraan berganda panjang berketepatan lebih rendah untuk lebih perlahan.
  • Sering tetapkan pertalian CPU kepada CPU yang berbeza.
  • Laksanakan sistem yang berlebihan memerlukan penukaran konteks di atas kepala.

Nota Akhir:

  • Walaupun teknik ini berkesan memperlahankan kod, tahap "ketidakcekapan jahat" mereka bergantung atas justifikasi yang diberikan.
  • Pengajar tugasan mungkin bertujuan untuk pelajar mengetahui tentang bahaya saluran paip dan kebergantungan, bukannya hanya menggunakan teknik ini secara membuta tuli.

Atas ialah kandungan terperinci Bagaimanakah Simulasi Monte Carlo Boleh Dinyahoptimumkan Lagi untuk Memperlahankan Perlaksanaan Dengan Ketara pada CPU Intel Sandybridge-Family?. 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