İşte söz konusu programdan alıntı. Matris img[][]
, SIZE × SIZE boyutundadır ve şu konumda başlatılır:
img[j][i] = 2 * j + i
Daha sonra bir matris yaparsınız res[][]
ve buradaki her alan img matrisindeki 9 alanın ortalaması olacak şekilde yapılır. Basitlik için kenarlık 0'da bırakılmıştır.
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;
}
Programda hepsi bu kadar. Tamlık uğruna, işte daha önce gelenler. Sonra hiçbir kod gelmez. Gördüğünüz gibi, sadece başlatma.
#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;
Temel olarak, SIZE 2048'in katları olduğunda bu program yavaştır, örn. Yürütme süreleri:
SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
Derleyici GCC'dir. Bildiğim kadarıyla, bu bellek yönetimi nedeniyle, ama bu konu hakkında çok fazla şey bilmiyorum, bu yüzden burada soruyorum.
Ayrıca bunun nasıl düzeltileceği iyi olurdu, ancak birisi bu yürütme sürelerini açıklayabilirse, zaten yeterince mutlu olurdum.
Ben zaten malloc / free biliyorum, ama sorun kullanılan bellek miktarı değil, sadece yürütme zamanı, bu yüzden bu nasıl yardımcı olacağını bilmiyorum.