Rumah >pembangunan bahagian belakang >C++ >Mengapa Penggelungan Lebih 8192 Elemen Jauh Lebih Perlahan Daripada 8191 atau 8193?
Kesan Prestasi Apabila Menggulung Lebih 8192 Elemen
Operasi matriks tertentu mempamerkan anomali prestasi apabila saiz matriks, terutamanya bilangan baris, adalah gandaan 2048 (mis., 8192). Fenomena ini, yang dirujuk sebagai penjajaran super, timbul disebabkan oleh amalan pengurusan memori khusus dalam CPU moden.
Coretan kod yang disediakan menunjukkan isu ini, di mana res matriks[][] dikira daripada img matriks[ ][]. Prestasi untuk saiz matriks yang berbeza, khususnya 8191, 8192 dan 8193, mendedahkan kelembapan yang ketara apabila saiz matriks ialah 8192.
Kesan Penjajaran Super
Prestasi variasi berpunca daripada capaian tidak seragam kepada ingatan yang disebabkan oleh gelung bersarang yang mengulang mengikut lajur di atas img matriks[][]. Corak akses tidak berurutan ini menghasilkan penalti prestasi pada CPU moden, yang beroperasi dengan lebih cekap dengan akses memori berjujukan.
Penyelesaian: Pertukaran Gelung Luar
Penyelesaian terletak pada menyusun semula gelung bersarang, mengutamakan lelaran mengikut baris daripada lelaran mengikut lajur. Dengan berbuat demikian, akses memori menjadi berurutan, meningkatkan prestasi dengan ketara:
for(j=1;j<SIZE-1;j++) { for(i=1;i<SIZE-1;i++) { // Code to compute res[j][i] } }
Hasil Prestasi
Hasil prestasi berikut menunjukkan peningkatan yang dicapai dengan menukar gelung luar:
Matrix Size | Original Code (s) | Interchanged Loops (s) |
---|---|---|
8191 | 1.499 | 0.376 |
8192 | 2.122 | 0.357 |
8193 | 1.582 | 0.351 |
Pengoptimuman ini secara drastik mengurangkan jurang prestasi untuk matriks dengan dimensi yang ialah gandaan 2048, menghasilkan prestasi yang konsisten merentas saiz matriks yang berbeza.
Atas ialah kandungan terperinci Mengapa Penggelungan Lebih 8192 Elemen Jauh Lebih Perlahan Daripada 8191 atau 8193?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!