Đây là trích từ chương trình trong câu hỏi. Ma trận img[][]
có kích thước SIZE × SIZE và được khởi tạo tại:
img[j][i] = 2 * j + i
Sau đó, bạn tạo một ma trận res[][]
và mỗi trường ở đây được tạo thành trung bình của 9 trường xung quanh nó trong ma trận img. Đường viền được để lại ở mức 0 cho đơn giản.
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;
}
Đó là tất cả các chương trình. Để hoàn thiện hơn, đây là những gì đến trước. Không có mã đến sau. Như bạn có thể thấy, đó chỉ là khởi tạo.
#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;
Về cơ bản, chương trình này chậm khi SIZE là bội số của 2048, ví dụ: thời gian thực hiện:
SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
Trình biên dịch là GCC. Từ những gì tôi biết, điều này là do quản lý bộ nhớ, nhưng tôi thực sự không biết quá nhiều về chủ đề đó, đó là lý do tại sao tôi hỏi ở đây.
Ngoài ra làm thế nào để khắc phục điều này sẽ tốt, nhưng nếu ai đó có thể giải thích những lần thực hiện này thì tôi đã đủ hạnh phúc.
Tôi đã biết về malloc / miễn phí, nhưng vấn đề không phải là dung lượng bộ nhớ được sử dụng, đó chỉ là thời gian thực hiện, vì vậy tôi không biết điều đó sẽ giúp ích như thế nào.