Mengapa Prestasi Merosot Apabila Menggulung Lebih 8192 Elemen
Apabila menggelungkan lebih daripada 8192 elemen, program menghadapi kelembapan yang ketara. Ini dikaitkan dengan isu penjajaran memori, diburukkan lagi oleh struktur gelung yang tidak cekap.
Penjajaran Memori
Pemproses moden menggunakan hierarki cache untuk meningkatkan kelajuan akses data. Akses memori yang dijajarkan, di mana data disimpan pada alamat yang berbilang saiz baris cache, membolehkan pengambilan data yang lebih cepat. Walau bagaimanapun, dalam kes ini, parameter SIZE ditakrifkan sebagai 8192, yang bukan gandaan saiz baris cache (biasanya 64 bait). Penjajaran salah ini boleh melambatkan operasi capaian memori.
Penyusunan Gelung
Menggabungkan isu penjajaran memori ialah susunan gelung. Kod asal berulang mengikut lajur matriks, menghasilkan akses memori tidak berurutan. Ini memaksa pemproses untuk melakukan pengambilan semula data secara perlahan dan rawak daripada memori.
Penyelesaian
Terdapat dua penyelesaian yang mungkin:
Dengan menukar susunan gelung dalam kod, kesesakan prestasi dihapuskan.
Contoh
Kod berikut menggambarkan betulkan:
for(j=1;j<SIZE-1;j++) { for(i=1;i<SIZE-1;i++) { res[j][i]=0; res[j][i] += img[j-1][i-1]; ... } }
Perbandingan Prestasi
Selepas menggunakan pembetulan, prestasi meningkat dengan ketara:
Kod Asal:
SIZE = 8191: 1.499 seconds SIZE = 8192: 2.122 seconds SIZE = 8193: 1.582 seconds
Kod Tetap:
SIZE = 8191: 0.376 seconds SIZE = 8192: 0.357 seconds SIZE = 8193: 0.351 seconds
Atas ialah kandungan terperinci Mengapa Gelung Saya Lambat Semasa Memproses Elemen 8192?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!