문제의 프로그램에서 발췌 한 내용은 다음과 같습니다. 행렬 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에 대해 이미 알고 있지만 문제는 사용 된 메모리 양이 아니며 실행 시간 일 뿐이므로 어떻게 도움이되는지 모르겠습니다.