Rumah >pembangunan bahagian belakang >C++ >Mengapa Menukar Pembilang Gelung daripada 32-bit kepada 64-bit Memberi Impak Secara Dramatik Prestasi _mm_popcnt_u64 pada CPU Intel?
Ringkasan Masalah
Prestasi penanda aras popcount berubah secara drastik apabila gelung pembolehubah balas telah ditukar daripada 32-bit tidak ditandatangani kepada 64-bit tidak ditandatangani, walaupun perubahan itu tidak kelihatan menjejaskan operasi asas gelung.
Soalan
Jawapan
1. Perbezaan prestasi adalah disebabkan kebergantungan data palsu dalam arahan popcnt pada CPU Intel.
Apabila pembilang gelung adalah 32-bit, arahan popcnt dalam setiap lelaran gelung dilaksanakan secara bebas, membenarkan selari perlaksanaan. Walau bagaimanapun, apabila pembilang gelung adalah 64-bit, pergantungan data palsu diperkenalkan antara arahan popcnt, menjadikannya mustahil untuk mereka melaksanakan secara selari. Kebergantungan ini disebabkan oleh daftar destinasi untuk arahan popcnt yang digunakan semula untuk lelaran seterusnya, mewujudkan kebergantungan buatan yang mengehadkan prestasi.
2. Menggantikan saiz penimbal tidak tetap dengan nilai malar boleh memperlahankan kod kerana ia menghalang pengkompil daripada melaksanakan beberapa pengoptimuman.
Dengan saiz penimbal tetap, pengkompil mengetahui saiz penimbal yang tepat pada masa penyusunan, yang boleh membolehkan corak capaian memori dan penjadualan arahan yang lebih cekap. Walau bagaimanapun, dengan saiz penimbal tidak tetap, pengkompil perlu mengambil senario terburuk, yang boleh membawa kepada kod yang kurang dioptimumkan.
3. Menambah kata kunci 'statik' pada pembolehubah saiz penimbal menjadikan gelung 64-bit lebih pantas kerana ia menjadikan saiz penimbal pemalar masa kompilasi, membolehkan pengkompil melakukan pengoptimuman tambahan.
Dengan membuat saiz penimbal pemalar masa kompilasi, pengkompil boleh lebih agresif mengoptimumkan corak capaian memori dan penjadualan arahan, menghasilkan lebih cepat kod.
Pelajaran yang Diperoleh
Malah perubahan kecil dalam gelung boleh memberi kesan yang ketara pada prestasi disebabkan kebergantungan yang tidak dijangka atau pengoptimuman pengkompil. Adalah penting untuk memahami kebergantungan ini dan cara ia mempengaruhi prestasi untuk menulis kod yang cekap.
Atas ialah kandungan terperinci Mengapa Menukar Pembilang Gelung daripada 32-bit kepada 64-bit Memberi Impak Secara Dramatik Prestasi _mm_popcnt_u64 pada CPU Intel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!