Rumah >pembangunan bahagian belakang >C++ >Mengapa Penggelungan Lebih 8192 Elemen Jauh Lebih Perlahan Daripada 8191 atau 8193?

Mengapa Penggelungan Lebih 8192 Elemen Jauh Lebih Perlahan Daripada 8191 atau 8193?

Susan Sarandon
Susan Sarandonasal
2024-12-11 08:56:10817semak imbas

Why is Looping Over 8192 Elements So Much Slower Than 8191 or 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!

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