Gelung Lambat Lebih 8192 Elemen: Memahami Penalti Prestasi
Kod yang disediakan memproses matriks, img, dengan mengira purata sembilan sel sekeliling untuk setiap elemen bukan sempadan dan menyimpan hasilnya dalam res matriks. Apabila saiz matriks ialah 8192x8192, program ini menunjukkan penurunan prestasi yang ketara.
Perlambatan ini dikaitkan dengan isu pengurusan memori yang berkaitan dengan penjajaran super. Pengkompil menjajarkan struktur data dalam ingatan untuk meningkatkan prestasi, dan dalam kes ini, reka letak matriks boleh menyebabkan capaian memori tidak cekap.
Untuk menyelesaikan isu ini, susunan gelung dalam operasi purata harus ditukar ganti. Daripada melelakan mengikut lajur, gelung harus melelang mengikut baris.
Berikut ialah kod yang diubah suai:
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]; res[j][i] += img[j ][i-1]; res[j][i] += img[j+1][i-1]; res[j][i] += img[j-1][i ]; res[j][i] += img[j ][i ]; res[j][i] += img[j+1][i ]; res[j][i] += img[j-1][i+1]; res[j][i] += img[j ][i+1]; res[j][i] += img[j+1][i+1]; res[j][i] /= 9; } }
Dengan menukar susunan gelung, memori berjujukan akses dikekalkan, menghapuskan penalti prestasi yang dikaitkan dengan akses tidak berurutan.
Prestasi Perbandingan:
Struktur gelung yang saling bertukar meningkatkan prestasi dengan ketara:
Kod Asal:
Gelung Bertukar:
Atas ialah kandungan terperinci Mengapa Pesanan Gelung Penting untuk Pemprosesan Cekap bagi Matriks 8192x8192?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!