Berikut adalah kutipan dari program yang dimaksud. Matriks img[][]
memiliki ukuran SIZE × SIZE, dan diinisialisasi pada:
img[j][i] = 2 * j + i
Kemudian, Anda membuat matriks res[][]
, dan setiap bidang di sini dibuat menjadi rata-rata dari 9 bidang di sekitarnya dalam matriks img. Batas dibiarkan pada 0 untuk kesederhanaan.
for(i=1;i<SIZE-1;i++)
for(j=1;j<SIZE-1;j++) {
res[j][i]=0;
for(k=-1;k<2;k++)
for(l=-1;l<2;l++)
res[j][i] += img[j+l][i+k];
res[j][i] /= 9;
}
Itu semua ada untuk program ini. Demi kelengkapan, inilah yang terjadi sebelumnya. Tidak ada kode yang muncul setelahnya. Seperti yang Anda lihat, itu hanya inisialisasi.
#define SIZE 8192
float img[SIZE][SIZE]; // input image
float res[SIZE][SIZE]; //result of mean filter
int i,j,k,l;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
img[j][i] = (2*j+i)%8196;
Pada dasarnya, program ini lambat ketika SIZE adalah kelipatan 2048, misalnya waktu eksekusi:
SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
Kompilernya adalah GCC. Dari apa yang saya tahu, ini karena manajemen memori, tetapi saya tidak terlalu tahu banyak tentang subjek itu, itulah sebabnya saya bertanya di sini.
Juga cara memperbaikinya akan menyenangkan, tetapi jika seseorang dapat menjelaskan waktu eksekusi ini saya sudah cukup senang.
Saya sudah tahu tentang malloc / gratis, tetapi masalahnya bukan jumlah memori yang digunakan, ini hanya waktu eksekusi, jadi saya tidak tahu bagaimana itu akan membantu.