Menggantikan pembilang gelung 32-bit dengan 64-bit boleh membawa kepada penyelewengan prestasi yang ketara dengan _mm_popcnt_u64 pada CPU Intel
Masalah ini timbul disebabkan kepada pergantungan data palsu, khususnya, arahan
_mm_popcnt_u64 mempunyai pergantungan palsu pada daftar destinasinya, menyebabkan ia menunggu sehingga daftar destinasi sedia sebelum melaksanakan. Kebergantungan ini boleh membawa merentas lelaran gelung, menyukarkan pemproses untuk menyelaraskan lelaran gelung yang berbeza.
Pilihan jenis pembolehubah gelung (tidak bertanda vs. uint64_t) mempengaruhi pengalokasi daftar
yang memberikan daftar kepada pembolehubah, yang membawa kepada perbezaan dalam peruntukan daftar dan rantai pergantungan palsu untuk Arahan _mm_popcnt_u64.
Memasukkan kata kunci statik di hadapan pembolehubah saiz
boleh mengubah peruntukan daftar dan memutuskan rantaian pergantungan palsu. Dalam sesetengah kes, ini boleh membawa kepada prestasi yang lebih baik dengan menghapuskan pergantungan lelaran silang pada daftar destinasi.
Untuk mengurangkan isu ini dan mencapai prestasi yang konsisten:
Atas ialah kandungan terperinci Mengapa Menukar Kesan Lebar Bit Pembilang Gelung _mm_popcnt_u64 Prestasi pada CPU Intel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!