Rumah > pembangunan bahagian belakang > C++ > Mengapa Popcount 64-bit Lebih Lambat Daripada 32-bit pada CPU Intel Kerana Ketergantungan Data Palsu?

Mengapa Popcount 64-bit Lebih Lambat Daripada 32-bit pada CPU Intel Kerana Ketergantungan Data Palsu?

Susan Sarandon
Lepaskan: 2024-12-09 22:19:11
asal
868 orang telah melayarinya

Why is 64-bit Popcount Slower Than 32-bit on Intel CPUs Due to False Data Dependencies?

Ketergantungan Data Palsu Kesan Prestasi Popcount pada CPU Intel

Isu:

Anda melihat ketara sisihan prestasi antara menggunakan pembilang gelung 32-bit dan 64-bit untuk operasi kiraan pop pada Intel CPU. Prestasi menurun sebanyak 50% apabila menggunakan pembilang 64-bit, pada mulanya dikaitkan dengan pepijat pengkompil.

Penjelasan: Ketergantungan Data Palsu

CPU Intel mempunyai pergantungan palsu pada daftar destinasi dalam arahan popcnt, yang mempengaruhi berbilang lelaran gelung ketat. Kebergantungan ini menghentikan arahan sehingga daftar destinasi tersedia. Bilangan arahan yang dipengaruhi oleh kebergantungan ini bergantung pada lokaliti gelung, menghasilkan variasi prestasi.

Akibat Ketergantungan:

  • Daftar Berbeza: Apabila gelung menggunakan daftar berbeza untuk operasi popcnt berturut-turut, kebergantungan tersebar merentas lelaran gelung, memberi kesan ketara kepada prestasi.
  • Daftar Sama: Jika semua operasi popcnt menggunakan daftar yang sama, kebergantungan kekal dalam satu lelaran, mengurangkan kesan prestasi.
  • Rantaian Ketergantungan Terputus: Memecahkan kebergantungan dengan memperkenalkan arahan yang tidak berkaitan (cth., xor) meningkatkan prestasi dengan membenarkan pemproses menyelaraskan lelaran gelung.

Gelagat Pengkompil:

GCC mahupun Visual Studio tidak menyedari pergantungan palsu ini, yang membawa kepada prestasi yang tidak dapat diramalkan. mengenai peruntukan daftar. Penyusun lain, seperti Clang dan ICC, juga kekurangan pengetahuan ini.

Prestasi AMD:

Pemproses AMD nampaknya tidak mempunyai pergantungan palsu ini, menyumbang kepada peningkatannya prestasi dalam popcount operasi.

Mitigasi:

  • Inlining Assembly: Mengoptimumkan kod pemasangan secara manual menggunakan pemasangan inline boleh memintas ketidaksedaran pengkompil tentang kebergantungan .
  • Memecahkan Kebergantungan Rantaian: Memasukkan arahan yang tidak berkaitan selepas setiap operasi popcnt memecahkan kebergantungan palsu dan meningkatkan prestasi.
  • Menggunakan Daftar Berbeza: Menetapkan daftar berbeza untuk operasi popcnt berturut-turut boleh mengurangkan isu tetapi mungkin tidak selalu boleh.

Atas ialah kandungan terperinci Mengapa Popcount 64-bit Lebih Lambat Daripada 32-bit pada CPU Intel Kerana Ketergantungan Data Palsu?. 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