これは問題のプログラムからの抜粋です。行列img[][]
のサイズはSIZE×SIZEで、次のように初期化されます。
img[j][i] = 2 * j + i
次に、マトリックスを作成res[][]
します。ここの各フィールドは、imgマトリックス内のその周囲の9つのフィールドの平均になります。簡単にするため、境界線は0のままにしておきます。
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;
}
これでプログラムは終わりです。完全を期すために、これが以前のものです。後にコードはありません。ご覧のとおり、それは初期化です。
#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;
基本的に、このプログラムはSIZEが2048の倍数である場合、実行時間が長くなります。
SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
コンパイラはGCCです。私が知っていることから、これはメモリ管理のためですが、私はその主題についてあまり知らないので、私はここで尋ねています。
これを修正する方法もいいですが、誰かがこれらの実行時間を説明できれば、もう十分満足しています。
私はすでにmalloc / freeを知っていますが、問題は使用されるメモリの量ではなく、単に実行時間に過ぎないため、それがどのように役立つかわかりません。