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?

Mengapa Menukar Pembilang Gelung daripada 32-bit kepada 64-bit Memberi Impak Secara Dramatik Prestasi _mm_popcnt_u64 pada CPU Intel?

Barbara Streisand
Barbara Streisandasal
2024-12-17 01:00:25827semak imbas

Why Does Changing a Loop Counter from 32-bit to 64-bit Dramatically Impact _mm_popcnt_u64 Performance on Intel CPUs?

Menggantikan pembilang gelung 32-bit dengan 64-bit memperkenalkan penyelewengan prestasi gila dengan _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

  1. Mengapa terdapat perbezaan prestasi sedemikian antara menggunakan pembilang gelung 32-bit dan 64-bit?
  2. Bagaimana boleh menggantikan saiz penimbal tidak tetap dengan nilai malar membawa kepada kod lebih perlahan?
  3. Bagaimanakah penambahan kata kunci 'statik' pada pembolehubah saiz penimbal menjadikan gelung 64-bit lebih cepat?

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!

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